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