在筆者從事軟件測評領域工作的15 年里,積累了大量的實踐工作經(jīng)驗。在此跟大家分享對代碼安全審計工作的一些經(jīng)驗。
說到代碼安全審計,首先要了解這項工作的內容和意義。代碼安全審計工作就是調查分析軟件系統(tǒng)的業(yè)務和技術需求,自動或者人工分析軟件的代碼,發(fā)現(xiàn)代碼之中的安全漏洞。以避免代碼中存在的安全漏洞在系統(tǒng)上線后被黑客或者惡意攻擊者所利用,實施諸如數(shù)據(jù)篡改、信息盜取、身份假冒、拒絕服務、抵賴、權限提升等攻擊,給軟件系統(tǒng)及用戶帶來巨大損失。所以代碼安全審計工作還是非常重要且必要的。
代碼安全審計工作主要有5 個關鍵因素:人、技術、策略、工具和流程[1]。
1)人。人是指具備軟件安全開發(fā)技術能力和知識的工程師,應具備軟件安全知識和分析方法的豐富經(jīng)驗,這樣才能準確有效地使用專業(yè)工具,排除誤報、定位漏洞。
2)技術。技術是指被測目標系統(tǒng)所涉及的技術,包括語言、框架、封裝、業(yè)務流程等。當然這部分技術也應該是第一關鍵因素——人所應具備的。
3)策略。策略是指進行代碼安全審計時所選擇的合適的策略。在實踐工作中,我們會利用專業(yè)的代碼安全審計工具結合有經(jīng)驗的工程師共同排查常見的代碼安全隱患,包括:審計和日志(Auditing and Logging)、認證(Authentication)、授權(Authorization)、通訊安全(Communication Security)、數(shù)據(jù)訪問(Data Access)、部署考慮(Deployment Consideration)模擬、錯誤處理(Error Handling)、委托(Impersonnation and Delegation)、輸入和數(shù)據(jù)驗證(Input and Data Validation)、參數(shù)操縱(Parameter Manipulation)、敏感數(shù)據(jù)(Sensitive Data)和會話管理(Session Management)等。如圖1 所示:
圖1
這里以使用DMSCA 掃描JAVA 開源框架為例:如圖2 所示。
圖2
通過工具掃描,我們發(fā)現(xiàn)此開源框架存在大量各級風險等級的安全漏洞。那么,安全掃描的規(guī)則又是如何制定的呢?
既然是“安全審計”,當然要遵循各類安全標準[2],比如,PCI DSS 第三方支付行業(yè)數(shù)據(jù)安全標準、HIPAA 健康保險攜帶和責任法案、FISMA 聯(lián)邦信息安全管理法案、BSIMM 軟件安全構建成熟度模型等國際通用標準模型,以及GB/T 20945-2013 信息安全技術 信息系統(tǒng)安全審計產(chǎn)品技術要求和測試評價方法、GB/T 34943-2017 CC++語言代碼漏洞測試規(guī)范、GB/T 34944-2017 Java 語言代碼漏洞測試規(guī)范、GB/T 34946-2017 C#語言代碼漏洞測試規(guī)范等國家標準,除此之外還有語言最佳編碼實踐標準以及架構設計標準等[3]。這些就是我們講的策略。
4)工具。出于我國近年日益重視的信息系統(tǒng)安全問題和面臨的風險考慮,建議選取我國代碼安全審計廠商自主研發(fā)的國產(chǎn)工具。
5)流程。第一步 確定代碼安全審計的目標。使用威脅模型(如果可用)導出目標,再理解架構、技術和需求導出目標。第二步 執(zhí)行初步掃描并分析安全問題結果。使用靜態(tài)分析工具或者輕量級的人工審查來尋找應用程序中最應當需要查找的安全問題,如緩沖區(qū)溢出、跨站點腳本,SQL 注入等,初始掃描使我們能夠優(yōu)先考慮風險最高的區(qū)域[4]。第三步 審查應用程序的架構所特有的代碼安全問題。最終審查用于調查本應用程序架構所特有的問題,一般表現(xiàn)為威脅建?;虬踩卣髦谐霈F(xiàn)的威脅,如自定義身份驗證或授權程序等。
完成所有步驟的安全代碼審查流程后,應該執(zhí)行審查后期活動,這樣可以提高應用程序的安全性及發(fā)現(xiàn)的漏洞的修復成功率。
后期活動包括:
1)已知bug 的優(yōu)先級排序。應基于該bug 可能對您的客戶產(chǎn)生的影響大小確定優(yōu)先次序,并評估潛在的最大損害以及您的哪些客戶可能會受到影響。
2)修復正確bug。眾所周知,對一個bug 進行修復后可能會引入一個新的bug。有時,已知bug的危險性比未知bug 要小。所以就要評價是否針對此類bug 進行修復。
3)從錯誤中學習。與團隊保持持續(xù)對話,探討錯誤是如何被犯下、被發(fā)現(xiàn)及被修復的。努力編寫清潔代碼,力求一次性通過審查。
完成了代碼審計工作后,會得到一系列可交付成果。實踐中是以代碼審計報告作為交付物的。其中代碼評估的目標文檔描述了這些內容:針對黑客有興趣的資產(chǎn)、代碼實現(xiàn)上的錯誤,這些錯誤將危及那些資產(chǎn)的安全,以及那在使用的技術和編程語言中的常見錯誤;針對每一個已經(jīng)識別漏洞的報告,包括所發(fā)現(xiàn)漏洞的概述、影響和嚴重性以及再現(xiàn)該漏洞的步驟和可用于修復該漏洞缺限的補救措施建議;安全代碼評估報告詳細說明風險評估結果、成果和整體印象、審查期間發(fā)現(xiàn)的問題、進行額外審查的建議,以及針對已確定漏洞進行補救的建議。
除此之外,筆者對準備開展代碼審計工作的機構或個人有幾點建議:
1)組建服務團隊。挑選具有軟件開發(fā)經(jīng)驗的員工組建代碼安全審計服務團隊。
2)技術學習培訓。提高服務團隊軟件安全開發(fā)和編碼能力,深入了解軟件開發(fā)過程中涉及的各種工具、技術、安全知識和安全編碼最佳實踐及標準。
3)制定標準和基線。參考標準和合規(guī)要求,及服務目的,制定測評機構的通用代碼安全審計服務標準和基線模版,指導后期具體項目服務測試標準和驗收條件。
4)確定服務模式。既實施環(huán)境,一般包括現(xiàn)場、在線、離線、按照項目或按照時間等。
5)選擇合適的工具或平臺。掃描分析工具能最大化滿足代碼安全審計服務標準和基線要求和服務模式要求,并能夠根據(jù)需要調整基線和增加安全規(guī)則和策略。集成基線和策略到工具平臺。
本文針代碼安全審計工作如何開展及要素進行了詳細介紹,并分享了開展工作的幾點建議,希望能夠對廣大從業(yè)者有所參考。