發(fā)布時(shí)間:2020-07-30
代碼靜態(tài)分析技術(shù)從本質(zhì)上來說,就是在程序不執(zhí)行的情況下,利用分析技術(shù)對(duì)程序代碼進(jìn)行掃描,驗(yàn)證代碼是否滿足規(guī)范性、安全性、可維護(hù)性等指標(biāo)的一種代碼分析技術(shù);從另一層面上說,是白盒測試的一種測試方法。大家如果想要了解靜態(tài)分析技術(shù)的話,下面的一些知識(shí)是一定不能夠錯(cuò)過的。
基礎(chǔ)知識(shí)
定義:是在不執(zhí)行計(jì)算機(jī)程序的條件下,對(duì)源代碼進(jìn)行分析,找出代碼缺陷。
執(zhí)行方式:一般配合靜態(tài)程序分析工具進(jìn)行。
采用技術(shù):數(shù)據(jù)分析流,機(jī)器學(xué)習(xí),語義精簡。
可檢測類型:死鎖,空指針,資源泄漏,緩存區(qū)溢出,安全漏洞,竟態(tài)條件。
用途:程序翻譯/編譯,程序優(yōu)化重構(gòu),軟件缺陷檢測等。
對(duì)比:程序動(dòng)態(tài)分析:需要實(shí)際執(zhí)行程序
程序理解:靜態(tài)分析這一術(shù)語一般用來形容自動(dòng)化工具的分析,而人工分析則往往叫做程序理解。
優(yōu)點(diǎn):
1、能夠檢測所有的代碼級(jí)別可執(zhí)行路徑組合,快速,準(zhǔn)確。
2、直接面向源碼,分析多種問題。
3、在研發(fā)階段開始找到并修復(fù)多種問題,節(jié)省大量時(shí)間,人力成本
(注意:靜態(tài)分析不是萬能的,測試是持續(xù)的過程)
靜態(tài)分析的對(duì)象是windows內(nèi)核模塊,第三方驅(qū)動(dòng)程序等不開源的二進(jìn)制代碼。
1、首先需要通過反匯編工具對(duì)模塊進(jìn)行處理,生成相應(yīng)的匯編代碼,然后在此基礎(chǔ)上分析,檢查程序的語法,結(jié)構(gòu),過程,接口等,恢復(fù)和重建程序的數(shù)據(jù)類型,結(jié)構(gòu)和框架,驗(yàn)證程序功能,邏輯是否正確。
2、在靜態(tài)分析過程中,關(guān)鍵的地方是要做到準(zhǔn)確提取信息,不論是源程序還是二進(jìn)制程序,利用靜態(tài)分析技術(shù)都可以從中提取出控制流,表達(dá)式,接口和數(shù)據(jù)流等相關(guān)的信息。
3、由于程序本身可以看作是抽象的,復(fù)雜的數(shù)據(jù)結(jié)構(gòu)集合,因此程序的靜態(tài)分析技術(shù)主要是根據(jù)從程序中提取的相關(guān)信息,從不同角度對(duì)程序的數(shù)據(jù)結(jié)構(gòu)進(jìn)行重構(gòu),根據(jù)模型推導(dǎo)數(shù)據(jù)之間的邏輯轉(zhuǎn)換關(guān)系。
常用數(shù)據(jù)結(jié)構(gòu)
常用的數(shù)據(jù)結(jié)構(gòu)包括函數(shù)調(diào)用圖,抽象語法樹,路徑圖等。
其中函數(shù)調(diào)用圖是利用程序中函數(shù)之間的調(diào)用關(guān)系建立起的模型,抽象語法樹是利用程序語義建立起的模型。
建立好抽象語法樹模型后,可以進(jìn)一步獲取到程序模塊,函數(shù)的執(zhí)行過程,以及它們中間數(shù)據(jù)流動(dòng)的過程,通過恢復(fù)程序的函數(shù)關(guān)系,可以建立起函數(shù)模型,在此基礎(chǔ)上,根據(jù)這些模型可以采用二進(jìn)制對(duì)比技術(shù),語法分析,規(guī)則檢查,類型推導(dǎo)等多種方法對(duì)程序進(jìn)行安全分析。
如。對(duì)程序代碼進(jìn)行對(duì)比檢查可以采用二進(jìn)制對(duì)比技術(shù),通過對(duì)比補(bǔ)丁前后函數(shù)匯編代碼的不同,可以快速定位補(bǔ)丁修改位置,然后進(jìn)行分析,明確漏洞觸發(fā)的原因,實(shí)現(xiàn)編寫出針對(duì)該漏洞的驗(yàn)證代碼。
如何分析缺陷
1、過程間分析:將考慮每一個(gè)合理的可執(zhí)行路徑
2、獲取一系列的函數(shù)定義:資源分配,調(diào)用
3、數(shù)據(jù)流分析將跟蹤所有應(yīng)用中的不可信數(shù)據(jù):source,sink,二者之間必須進(jìn)行驗(yàn)證。
4、某些使用智能靜態(tài)分析
通過上面的知識(shí),對(duì)于代碼靜態(tài)分析技術(shù)相信每個(gè)人都一定有了一些自己的看法和理解。在小編看來,靜態(tài)分析簡單的說,就是自動(dòng)化工具的分析,常用的自動(dòng)化分析工具是比較多的,而小編是喜歡CodeAnalyzer這個(gè)工具的,CA可以在掃描源代碼時(shí)對(duì)安全規(guī)范子集中定義的規(guī)則進(jìn)行逐條檢查,用戶可以通過自己的需求選定規(guī)則,并制定問題的嚴(yán)重程度,如果發(fā)現(xiàn)有不符合項(xiàng)則報(bào)告在問題列表中。
推薦閱讀:
Java靜態(tài)代碼掃描怎么做?Java靜態(tài)代碼掃描工具的使用方法
為什么要進(jìn)行代碼檢查?靜態(tài)代碼分析工具的優(yōu)勢(shì)有哪些
什么情況下需要進(jìn)行靜態(tài)程序分析?常用Java靜態(tài)代碼分析工具的優(yōu)勢(shì)
電話咨詢,400-035-7887,安排專業(yè)技術(shù)售前給您解答(產(chǎn)品試用、技術(shù)交流、服務(wù)咨詢和商務(wù)報(bào)價(jià))。
您的信息已成功提交!
我們的客服人員稍后會(huì)與您聯(lián)系