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