想要了解代碼靜態(tài)分析技術(shù),這些知識(shí)不可錯(cuò)過(guò)

發(fā)布時(shí)間:2020-07-30

代碼靜態(tài)分析技術(shù)從本質(zhì)上來(lái)說(shuō),就是在程序不執(zhí)行的情況下,利用分析技術(shù)對(duì)程序代碼進(jìn)行掃描,驗(yàn)證代碼是否滿足規(guī)范性、安全性、可維護(hù)性等指標(biāo)的一種代碼分析技術(shù);從另一層面上說(shuō),是白盒測(cè)試的一種測(cè)試方法。大家如果想要了解靜態(tài)分析技術(shù)的話,下面的一些知識(shí)是一定不能夠錯(cuò)過(guò)的。

CodeAnalyzer(代碼質(zhì)量管理)

基礎(chǔ)知識(shí)

定義:是在不執(zhí)行計(jì)算機(jī)程序的條件下,對(duì)源代碼進(jìn)行分析,找出代碼缺陷。

執(zhí)行方式:一般配合靜態(tài)程序分析工具進(jìn)行。

采用技術(shù):數(shù)據(jù)分析流,機(jī)器學(xué)習(xí),語(yǔ)義精簡(jiǎn)。

可檢測(cè)類型:死鎖,空指針,資源泄漏,緩存區(qū)溢出,安全漏洞,竟態(tài)條件。

用途:程序翻譯/編譯,程序優(yōu)化重構(gòu),軟件缺陷檢測(cè)等。

對(duì)比:程序動(dòng)態(tài)分析:需要實(shí)際執(zhí)行程序

程序理解:靜態(tài)分析這一術(shù)語(yǔ)一般用來(lái)形容自動(dòng)化工具的分析,而人工分析則往往叫做程序理解。

優(yōu)點(diǎn):

1、能夠檢測(cè)所有的代碼級(jí)別可執(zhí)行路徑組合,快速,準(zhǔn)確。

2、直接面向源碼,分析多種問(wèn)題。

3、在研發(fā)階段開(kāi)始找到并修復(fù)多種問(wèn)題,節(jié)省大量時(shí)間,人力成本

(注意:靜態(tài)分析不是萬(wàn)能的,測(cè)試是持續(xù)的過(guò)程)

靜態(tài)分析的對(duì)象是windows內(nèi)核模塊,第三方驅(qū)動(dòng)程序等不開(kāi)源的二進(jìn)制代碼。

1、首先需要通過(guò)反匯編工具對(duì)模塊進(jìn)行處理,生成相應(yīng)的匯編代碼,然后在此基礎(chǔ)上分析,檢查程序的語(yǔ)法,結(jié)構(gòu),過(guò)程,接口等,恢復(fù)和重建程序的數(shù)據(jù)類型,結(jié)構(gòu)和框架,驗(yàn)證程序功能,邏輯是否正確。

2、在靜態(tài)分析過(guò)程中,關(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)用圖,抽象語(yǔ)法樹(shù),路徑圖等。

其中函數(shù)調(diào)用圖是利用程序中函數(shù)之間的調(diào)用關(guān)系建立起的模型,抽象語(yǔ)法樹(shù)是利用程序語(yǔ)義建立起的模型。

建立好抽象語(yǔ)法樹(shù)模型后,可以進(jìn)一步獲取到程序模塊,函數(shù)的執(zhí)行過(guò)程,以及它們中間數(shù)據(jù)流動(dòng)的過(guò)程,通過(guò)恢復(fù)程序的函數(shù)關(guān)系,可以建立起函數(shù)模型,在此基礎(chǔ)上,根據(jù)這些模型可以采用二進(jìn)制對(duì)比技術(shù),語(yǔ)法分析,規(guī)則檢查,類型推導(dǎo)等多種方法對(duì)程序進(jìn)行安全分析。

如。對(duì)程序代碼進(jìn)行對(duì)比檢查可以采用二進(jìn)制對(duì)比技術(shù),通過(guò)對(duì)比補(bǔ)丁前后函數(shù)匯編代碼的不同,可以快速定位補(bǔ)丁修改位置,然后進(jìn)行分析,明確漏洞觸發(fā)的原因,實(shí)現(xiàn)編寫(xiě)出針對(duì)該漏洞的驗(yàn)證代碼。

如何分析缺陷

1、過(guò)程間分析:將考慮每一個(gè)合理的可執(zhí)行路徑

2、獲取一系列的函數(shù)定義:資源分配,調(diào)用

3、數(shù)據(jù)流分析將跟蹤所有應(yīng)用中的不可信數(shù)據(jù):source,sink,二者之間必須進(jìn)行驗(yàn)證。

4、某些使用智能靜態(tài)分析

找到潛在bug其實(shí)只是難題之一
1、消除誤報(bào)非常難
2、將復(fù)雜的缺陷解釋出來(lái)很難
3、只找潛在的一次性缺陷是很難的

通過(guò)上面的知識(shí),對(duì)于代碼靜態(tài)分析技術(shù)相信每個(gè)人都一定有了一些自己的看法和理解。在小編看來(lái),靜態(tài)分析簡(jiǎn)單的說(shuō),就是自動(dòng)化工具的分析,常用的自動(dòng)化分析工具是比較多的,而小編是喜歡CodeAnalyzer這個(gè)工具的,CA可以在掃描源代碼時(shí)對(duì)安全規(guī)范子集中定義的規(guī)則進(jìn)行逐條檢查,用戶可以通過(guò)自己的需求選定規(guī)則,并制定問(wèn)題的嚴(yán)重程度,如果發(fā)現(xiàn)有不符合項(xiàng)則報(bào)告在問(wèn)題列表中。

推薦閱讀:

白盒測(cè)試的基本方法有哪些?與黑盒測(cè)試的區(qū)別?

比較常用的白盒測(cè)試工具有哪些?

Java靜態(tài)代碼掃描怎么做?Java靜態(tài)代碼掃描工具的使用方法

為什么要做白盒測(cè)試?哪些項(xiàng)目適合白盒測(cè)試?

為什么要進(jìn)行代碼檢查?靜態(tài)代碼分析工具的優(yōu)勢(shì)有哪些

什么情況下需要進(jìn)行靜態(tài)程序分析?常用Java靜態(tài)代碼分析工具的優(yōu)勢(shì)

代碼審查和代碼走查的區(qū)別及代碼審查在軟件開(kāi)發(fā)生命周期中的作用

常用Java靜態(tài)代碼分析工具的分析與比較

本文內(nèi)容不用于商業(yè)目的,如涉及知識(shí)產(chǎn)權(quán)問(wèn)題,請(qǐng)權(quán)利人聯(lián)系SPASVO小編(021-60725088-8054),我們將立即處理,馬上刪除。
滬ICP備07036474號(hào) 2003-2024 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd.
微信
咨詢

添加客服微信 歡迎咨詢測(cè)試工具和測(cè)試服務(wù)

微信客服
問(wèn)題
反饋
產(chǎn)品
畫(huà)冊(cè)

掃描二維碼下載澤眾軟件企業(yè)宣傳冊(cè)

產(chǎn)品畫(huà)冊(cè)
返回
頂部

方案咨詢

×
提交信息

電話咨詢,400-035-7887,安排專業(yè)技術(shù)售前給您解答(產(chǎn)品試用、技術(shù)交流、服務(wù)咨詢和商務(wù)報(bào)價(jià))。

您的信息已成功提交!

我們的客服人員稍后會(huì)與您聯(lián)系