干货|代码安全审计权威指南(附下载地址)
01?關于代碼安全審計
? ? 代碼安全審計是查找代碼中安全漏洞的方法。在"安全左移"的發展趨勢下,代碼審計逐漸成為確保代碼質量的一個關鍵環節。代碼安全審計通常可以分為: 自動化審計和人工審計。
? ? 自動化代碼安全審計是以自動化工具的方式查找代碼的安全漏洞,這樣的工具一般稱為靜態代碼檢測工具(SAST)。SAST的一大優勢是能夠極大地減少查找代碼漏洞的時間。
?
靜態代碼分析流程
然而,這類工具往往最讓人印象深刻的首先就是“誤報率”,據統計,SAST類的產品在OWASP基準測試中最高檢出率達到85%,但誤報率也高達52%。高誤報率的主要原因在于程序無法準確理解開發人員的代碼含義。其次,自動化代碼安全審計往往無法查找業務相關的漏洞,比如支付漏洞、任意密碼重置,優惠券疊加等。
相比于自動化,人工審計優勢在于查找業務邏輯相關漏洞,但對于成本也遠高于自動化工作,主要體現在兩方面:
①?學習成本
?
審計業務邏輯漏洞需要做到“三懂”:
?
a)?懂代碼。不同系統使用的代碼和開發平臺是不同的,Java、C#和PHP甚至是C++,各自關注的安全點也各不相同。而且很多安全問題在框架層次就已經解決掉了,典型的認證問題可用Shiro解決。如果看不懂框架,那么連實現的地方都無法找到,更不用說找出問題了。
b)懂業務。查找業務問題需要對系統業務有深入的了解,除了密碼重置等通用型業務,還包括不同行業的獨有業務,如電商的支付和優惠券、金融的轉賬對賬等。
c)懂安全。在了解代碼和業務的基礎上,還需要從攻擊者視角審查業務安全漏洞,才能進一步發現業務中可能存在的安全問題。比如典型的任意密碼重置漏洞、優惠券疊加漏洞,都需要審計人員理解漏洞原理和實現方法,才能"對癥下藥"查找業務邏輯的不足。
②?時間成本
人工代碼安全審計的時長取決于代碼量的多少。隨著代碼和業務復雜度的提升,完整實施代碼安全審計所需的時間成本也同步增加。
?
因此自動化和人工審計兩種方法并不是相互對立的,而是互為補充,二者并用才是業界代碼安全審計的最佳實踐。
02?代碼安全審計的流程
代碼安全審計流程
從上面的審計流程可以看到,代碼安全審計工作的關鍵環節在于:
1.設定審計基線,包括三方面:
a)針對代碼和開發平臺的基線。這里需要考慮的是代碼開發語言、架構、安全審計質量準則等。不同代碼和平臺之間關注的問題也不同。
b)合規基線。很多阻止需滿足合規要求,一些合規條例包括:等級保護要求、支付卡行業標準、中央銀行規定以及PCI-DSS(第三方支付行業數據安全標準)等。
c) 針對漏洞的基線,即需要明確代碼安全審計要覆蓋哪些漏洞,僅僅覆蓋OWASP Top 10的漏洞還是要覆蓋所有類型的漏洞?
2.人工審計。主要分為兩部分工作:
?a) 驗證工具掃描出的問題。
?b)查找工具未覆蓋的安全問題。
03??代碼安全審計的重要性
代碼安全審計在整個SDL流程中非常重要,屬于系統開發階段的白盒測試。
SDL全流程
?
很多人會將代碼安全審計和滲透測試作比較。二者主要區別如下:
①?階段不同。在SDL流程中,代碼安全審計早于滲透測試,通常在開發階段就可以實現。而滲透測試則出現于系統測試階段。
②?覆蓋范圍。通常代碼安全審計的覆蓋范圍高于滲透測試。
?
③?漏洞定位。代碼安全審計可以直接定位到漏洞的代碼,滲透測試通常做不到。
?
④?直觀。滲透測試比代碼安全審計更加直觀形象,可以在運行的系統上直接驗證問題。
?
在SDL實踐過程中,至少要有自動化代碼安全審計,即SAST工具。對于重要的業務系統,需要進行必要的人工審計。同時,在大量實踐的基礎上,默安科技專家團隊發現滲透測試和代碼安全審計也能夠相互促進,二者相互耦合,利用代碼安全審計發現問題,然后通過滲透測試驗證問題,充分發揮各自的優勢,達到事半功倍的效果。如下圖所示。
?
總結
以上是生活随笔為你收集整理的干货|代码安全审计权威指南(附下载地址)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 干货|各种WAF绕过手法学习
- 下一篇: 【Vulnhub靶机系列】DC1