資安問題經常是因為應用程式未獲得充分的檢查與防護就貿然部署所導致。那麼應用程式最大的資安風險是什麼?企業又該如何確保DevOps流程的安全?本文將探討應用程式可能面臨的資安風險與威脅,以及企業該如何將網路資安防護融入DevOps流程當中。
為了因應產業變化的腳步,數位轉型是企業必經的重要過程。隨著全球因冠狀病毒疫情而陷入停滯,這樣的轉型不僅必要,也更加迫切。當企業開始拓展自己的數位足跡、打造現代化流程讓員工從任何地點都能隨時工作,企業也應思考如何在滿足客戶需求的同時,也簡化程式變更的流程。這股數位轉型趨勢在近幾個月來尤其明顯,各領域應用程式的使用率都明顯暴增。
應用程式現在已扮演一個不可或缺的角色,許多企業和使用者不論在工作、教育、娛樂、零售及其他用途,都得仰賴各式各樣的應用程式。在這樣的情況下,應用程式開發團隊將扮演著關鍵的角色,不僅要確保應用程式能為使用者提供絕佳的便利性和效能,更要防範駭客攻擊。因為駭客隨時都在尋找弱點、漏洞、組態設定錯誤以及其他可利用的資安破口來發動惡意攻擊。
假使企業為了保住業績和營收而急於讓應用程式上線,那麼資安的風險將更加令人擔憂。前一陣子推出的接觸者追蹤應用程式所引發的隱私權問題,就是應用程式開發和部署操之過急而帶來危險的最佳範例。今年五月,美國華盛頓郵報(The Washington Post)報導,接觸者追蹤應用程式雖然對政府單位與研究機構在控制疫情擴散方面很有幫助,但卻可能不小心讓駭客取得新冠肺炎(COVID-19)確診者的敏感資料。
不安全的應用程式所帶來的嚴重風險,突顯出應用程式防護以及在設計、開發、部署等階段發掘、修正及強化應用程式安全的必要性。本文探討應用程式可能面臨的資安風險與威脅,以及企業該如何將網路資安防護融入DevOps流程當中。
絕大部分外部攻擊都是瞄準軟體漏洞或網站應用程式
應用程式複雜性日益攀升,再加上第三方程式庫及其他問題,讓應用程式更容易遭遇資安風險和威脅。根據2020年一份Forrester報告指出,資安專業人員認為絕大部分外部攻擊都是瞄準軟體漏洞或網站應用程式。同一份報告也指出,開放原始碼軟體是應用程式安全的一大隱憂,開放原始碼資安漏洞自去年至今已成長50%。
隨著容器的日益普及,加上API躍居要角,都為應用程式帶來了新的風險。根據2020年Snyk的一份報告指出,Docker Hub內的官方十大容器映像檔,其中九個都含有50個以上的漏洞。此外,2019年F5的一份報告也發現,API攻擊主要發生在整合多樣化功能的大型平台、行動應用程式,以及應用程式組態設定錯誤。
以下列出一些應用程式最常見的風險,提醒軟體開發人員留意以確保程式碼的安全。「開放網站應用程式安全計畫」(Open Web Application Security Project,簡稱OWASP)基金會提供了一份網站應用程式與API風險的完整清單。最重要的是,開發人員應對這些應用程式最常見的資安風險(通常都是程式碼不安全所造成)有所瞭解,如此才能在開發流程的每一階段做好必要的檢查:
‧使用含有已知漏洞的元件:為了避免重複開發一些基本功能,開發人員通常會採用一些現成的元件,例如程式庫、架構和其他軟體模組。然而,駭客會利用這些元件的已知漏洞來瓦解應用程式防禦,發動各種攻擊。
‧資料外洩與曝光:網站應用程式和API若未確實做好敏感資料的防護,很可能就讓駭客竊取或修改這些未受妥善防護的資料。此外,也可能讓他們從事信用卡詐騙、身分冒用等惡意活動。
‧後台系統存取控管不足:後台系統的存取控管之所以會不足,通常是因為對已認證使用者的權限缺少適當管制。駭客會利用這項弱點來執行一些未經授權的動作,包括了存取其他使用者的帳號、查看敏感檔案、修改其他使用者的資料,以及變更存取權限。
‧程式碼注入:當未經信任的資料經由表單輸入到程式碼解譯器,或是經由其他提交機制傳送給網站應用程式時,歹徒便可利用SQL、NoSQL、OS以及LDAP程式碼注入的弱點來發動攻擊。此外,駭客可利用惡意的資料讓解譯器執行一些惡意指令或存取未經授權的資料。
‧資安組態設定錯誤:這是網站應用程式最常犯的問題,包括不安全的預設組態、設定錯誤的HTTP標頭、不完整或臨時的設定、開放的雲端儲存、過於詳細的錯誤訊息(其中可能包含敏感資訊)。不論是作業系統、程式庫、架構及應用程式,不僅應該設定正確的組態以防範駭客入侵,更應定期修補更新。
‧遭破解的認證與授權機制:當應用程式認證與連線階段(Session)管理功能撰寫不當,駭客就能利用程式的漏洞取得密碼、金鑰或連線階段金鑰(Session Token)等。接著,駭客就能盜用使用者或系統管理員的帳號,進而駭入整台電腦。
‧跨網站腳本(XSS):駭客會利用所謂的跨網站腳本(XSS)漏洞在瀏覽器內執行腳本,攔截使用者連線階段、破壞網站門面或將使用者重導至惡意網站。當應用程式在一個新的網頁中引入一些非信任的資料卻未給予適當的驗證或隔離時,就會產生XSS漏洞。此外,當應用程式經由HTML或瀏覽器API產生的JavaScript來更新現有的網頁內容時,也可能產生這類漏洞。
‧不安全的反序列化:這項漏洞是應用程式從序列化資料轉出應用程式物件時處理不當所造成,通常會導致遠端程式碼執行(RCE)漏洞。此外,這項漏洞還可能讓駭客發動回放、程式碼注入或提升權限等攻擊。
‧記錄檔與監控不夠完善:若記錄檔與監控機制不夠完善,駭客就有機會篡改、截取或破壞資料,並且進一步攻擊系統,長期躲在系統內部,或者四處遊走入侵其他系統。
建置階段發現漏洞所需的修復成本為設計階段的六倍
傳統的應用程式開發團隊,通常過於專注在應用程式功能的開發以及軟體的上市時程,因此資安總是事後才來考量。傳統開發流程不僅安全性不足,也容易造成開發團隊與資安團隊之間的隔閡,進而提高了資料外洩與巨額損失的潛在風險。除此之外,根據IBM的研究,比起在設計階段就發現漏洞,到了建置階段才發現漏洞,其花費的修復成本大約為六倍。所以,要打造安全的應用程式,開發團隊應該要在開發流程融入適當的資安防護來檢查容器、原始程式碼、相依程式庫或其他元件。以下是開發團隊尤其需要的一些網路資安防護:
‧容器掃描:容器技術可提升軟體開發流程的速度和效率,但容器的日益普及也意味著容器可能會有各式各樣的潛在風險與威脅,著實需要開發團隊確實做好資安工作。容器映像分析工具能在軟體開發生命週期(SDLC)的所有階段協助開發團隊掃描漏洞、機密與金鑰、法規遵循檢核項目,以及惡意程式變種。這類工具能提供可視性與深度分析,可在容器部署至營運環境之前,預先掌握容器內部是否有任何資安疑慮。此外,若要進一步降低容器的資安風險,開發團隊也可盡量避免使用第三方軟體,或者使用經過認證的第三方軟體,以確保容器環境不會遭到惡意軟體滲透。
‧軟體構成元件分析:這些現成的程式碼通常來自企業外部,而且很可能也沒做過靜態程式碼分析,但卻要在DevOps環境內執行。要檢查你的程式碼當中所用到的程式庫是否太過老舊或含有漏洞,可使用像OWASP相依性檢查這類的工具。Snyk是開發者優先的開放原始碼防護領導廠商,他們也提供了免費的開放原始碼專案第三方驗證服務。
‧靜態應用程式資安測試(SAST):靜態應用程式資安測試亦稱為「程式碼審查」或「程式碼稽核」,有助於開發人員在軟體開發生命週期(SDLC)早期發現應用程式原始碼中的漏洞和其他資安問題。及早發現資安問題不僅可為企業節省成本,還能更快修正程式碼。 ‧動態應用程式資安測試(DAST):動態應用程式資安測試亦稱為「黑盒測試」,這是一種利用惡意注入技巧,例如SQL資料隱碼攻擊(SQL Injection)、跨網站腳本攻擊(XSS)以及跨站請求偽造(CSRF),來發現應用程式資安漏洞與弱點的方法。DAST解決方案可測試應用程式、容器及叢集對於駭客利用各種惡意技巧來發掘潛在漏洞和弱點的耐受性。
‧互動式應用程式資安測試(IAST):互動式應用程式資安測試可對網站應用程式進行執行時期測試以發掘資安漏洞。IAST的用意在於測試一些SAST靜態測試與DAST動態測試所無法涵蓋的層面,因為IAST結合了動態與靜態測試的兩種元素,因此能涵蓋更多程式碼、提供更準確的結果及檢查更廣泛的資安規則。IAST解決方案可在下列任何環境當中進行應用程式內的即時分析,包括整合式開發環境(IDE)、品保測試(QA)、持續整合(CI)環境,甚至是營運環境。
應用程式資安六個最佳實務原則
隨著人們的生活越來越依賴各種用途的應用程式,企業有義務打造更安全的應用程式,以對抗可能遭遇的各種風險和威脅。
以下是企業在開發應用程式時如何確保其安全的一些最佳實務原則。其中有些著重於應用程式的掃描與測試,有些則關於如何培養重視資料隱私與資安的文化:
1. 採用最低授權原則(PLOP):企業內應採取最低授權原則,僅開放使用者在執行工作時絕對必要的權限給使用者,如此可降低帳戶遭到濫用或盜用與敏感資料外洩的風險。
2. 導入自動化測試:由於軟體漏洞數量自2017年即不斷攀升,開發團隊應盡量在開發階段早期導入自動化測試,以便在錯誤或瑕疵尚未擴大時及早發現。
3. 定期掃描漏洞:開發人員在開發軟體時,通常會運用到外部程式庫或開放原始碼套件,然而這些程式庫很可能暗藏著已知的漏洞。若要盡可能地提早偵測,進而修補這些漏洞,就必須對這些相依的外部元件進行定期掃描。
4. 部署執行時期應用程式自我防護(RASP)解決方案:開發團隊應採用執行時期應用程式自我防護解決方案來監控應用程式、容器、無伺服器架構所接收到的網路流量。RASP解決方案的設計就是要即時偵測攻擊,導入RASP解決方案就能攔截所有類型的流量,包括意圖不良的流量,如SQL資料隱碼攻擊(SQL Injection)、跨網站腳本攻擊(XSS)、漏洞攻擊、殭屍網路以及其他網站應用程式攻擊。
5. 建立跨功能團隊培養DevSecOps文化:企業內應培養所謂的DevSecOps文化,建立跨功能團隊來為開發人員提供資安相關訓練,同時也讓資安人員了解軟體開發流程,這樣資安團隊便能更了解程式設計語言,知道如何運用API將一些簡單的流程自動化。此外,資安團隊在接受這類訓練之後,亦有助於減輕其工作負擔,讓他們有更多時間專注於更重要的工作。
6. 將應用程式資安納入資料隱私法規遵循策略當中:應用程式資安是企業整體資料隱私法規與IT規範遵循作業的一環。企業應採取一套有效率的法規遵循策略,將隱私保護融入設計當中。例如一套有效的通用資料保護法(GDPR)遵規策略應包括:建置身分認證與適當存取控管來落實隱私與資安檢查、採取最低授權原則與加密來保護資料、採用安全的架構與程式庫等等。此外,企業也可採取同樣的原則來遵循其他資料隱私與防護法規,例如美國的健康保險可攜與責任法案(HIPAA)。
遵守以上最佳實務原則有助於企業提升應用程式資安。如前所述,企業應定期掃描,並運用進階資安工具來偵測惡意程式、漏洞及其他威脅。不僅如此,企業更應實施一些政策來培養良好的資安文化,讓資安與開發團隊接受相關教育訓練,確保應用程式符合資料保護規範,以免招來鉅額的罰鍰。
善用解決方案確保DevOps流程安全
Trend Micro Cloud One防護服務平台是趨勢科技Hybrid Cloud Security(混合雲防護)的基礎,讓軟體開發人員能夠依照自己的方式建構及執行應用程式。其資安控管可支援今日的各種基礎架構、現代化開發流程、開發工具以及多重平台要求。 Cloud One服務平台中的Application Security可提供程式碼漏洞的完整診斷細節,藉由執行時期防護來防範自動化攻擊與最常見的威脅,如SQL資料隱碼攻擊(SQL Injection)與遠端程式碼執行(RCE)攻擊。同時,還可提供每次攻擊的完整追蹤與報表,以及有關駭客身分與攻擊方法的深入剖析。
<本文作者:本文出自趨勢科技資安部落格,是由趨勢科技資安威脅研究員、研發人員及資安專家全年無休協力合作,發掘消費者及商業經營所面臨層出不窮的資安威脅,進行研究分析、分享觀點並提出建議。>