現今許多安全漏洞是程式錯誤導致的,應用程式含有漏洞會造成嚴重的安全隱患,輕則程式崩潰無法運行,重則造成隱私外洩,甚至被駭客取得裝置控制權,因此程式開發的安全便極為重要。
舊版ISO27001:2013的A.14.2 於開發及支援過程中之安全在改版之後分為開發環境的安全、開發過程的安全兩大面向。新版ISO27001:2022的A.8.25保全開發循環側重開發過程的安全,要求在服務、硬體架構、軟體系統等方面確認開發開發循環安全。
新版ISO27001:2022的A.8.28程式開發安全(Secure coding)側重的是開發過程的安全,要求組織建立流程,針對軟體開發的前、中、後三階段提出最低安全準則,目的是要盡可能的減少資訊安全漏洞。
現今有許多工程師是所謂的「複製貼上工程師」,直接使用網路搜尋到的程式碼來實做功能,因此我們經常會發現含有相同漏洞的程式碼,出現在許多不同的程式中,網路上有許多程式碼只注重執行結果,並不在乎是否有安全隱患。應用程式最佳的設計便是要假設它總是受到攻擊,開發者要評估程式可能的攻擊面,任何會經由使用者輸入的內容所影響的執行序,皆需要特別謹慎的處理。
程式開發安全還應適時結合ISO27001:2022的A.8.16控制項─活動監控(Monitoring activities) ,要監控程式各種例外狀況,並記錄程式發生的錯誤,以利後續維護,藉由分析LOG檔找出並排除錯誤,最後開發出的成果還需進行加殼、程式碼混淆等原始碼保護機制,以增加駭客逆向工程、竄改程式的成本與難度。
最後在後期維護方面,為避免在開發過程中百密難免有一疏,組織必須要確保程式有安全的更新管道,在發現漏洞時能做即時的修補,避免損害擴大。
[增補]在內部程序上應該如何具體實作?
大家可以參考OWASP組織的Secure Coding Practices Quick Reference Guide計畫,該計劃定期更新一套供讀者快速吸收的程式開發安全指南。
重點章節包括輸入驗證Input validation、身份驗證與密碼管理Authentication and Password Management、Session管理Session Management、存取控制Access Control、Cryptographic Practices、資料保護Data Protection、通訊安全Communication Security。
實作上組織應該依據產品需求,將相關內容酌情納入程序書,若有委外開發的情況,也可以納入合約。
-艾斯飛利國際資安顧問 Dan Lin
Comments