產(chǎn)品概述
CodeSonar是軟件靜態(tài)缺陷檢查和安全性分析工具,幫助團(tuán)隊(duì)快速分析和驗(yàn)證代碼,識(shí)別導(dǎo)致系統(tǒng)故障、可靠性差、系統(tǒng)漏洞或不安全條件的嚴(yán)重漏洞或錯(cuò)誤。通過(guò)在并發(fā)性分析、污染數(shù)據(jù)流分析和全面檢測(cè)等技術(shù)上的創(chuàng)新,CodeSonar比其他同類型工具發(fā)現(xiàn)更為重要的缺陷。
功能特性
l先進(jìn)的靜態(tài)分析算法
CodeSonar執(zhí)行統(tǒng)一的數(shù)據(jù)流和符號(hào)分析,檢查整個(gè)程序的運(yùn)算。該方法不依賴于模式匹配或類似的近似。CodeSonar通過(guò)更為深入的分析自然而然地發(fā)現(xiàn)新的或不尋常的缺陷。

圖1查看缺陷的每條路徑追蹤
l分析數(shù)百萬(wàn)行代碼
CodeSonar可以執(zhí)行千萬(wàn)行代碼的全程序分析。一旦完成了起初的基線分析,CodeSonar的增量分析能力快速分析代碼庫(kù)的每日變化。分析能并發(fā)運(yùn)行,充分利用多核環(huán)境的優(yōu)勢(shì)。
l支持編程標(biāo)準(zhǔn)
CodeSonar支持編程標(biāo)準(zhǔn),如MISRA C:2012、IS0-26262、US-CERT以及CWE等。
l軟件架構(gòu)的可視化
可視化代碼揭示和理解代碼之間的關(guān)系。Visual Taint Analysis允許用戶快速發(fā)現(xiàn)具有潛在危險(xiǎn)信息流的來(lái)源。

圖2 可視化軟件架構(gòu)理解代碼
l查看質(zhì)量趨勢(shì)
圖表顯示數(shù)據(jù),幫助用戶管理開(kāi)發(fā)和測(cè)試的工作。

圖3 通過(guò)比較分析查看質(zhì)量的趨勢(shì),發(fā)現(xiàn)引入的缺陷類型
l定制分析
提供C API,易于創(chuàng)建新的檢查。很多內(nèi)置的檢查也可以根據(jù)本地需求進(jìn)行配置。CodeSonar本身可以計(jì)算N種不同的代碼度量,也可以使用API來(lái)定義自己的度量。
l檢查項(xiàng)示例
緩沖區(qū)溢出
未初始化變量
釋放非堆變量
釋放后再使用
雙重釋放/關(guān)閉
格式化字符串漏洞
返回局部變量指針
數(shù)據(jù)競(jìng)爭(zhēng)
死鎖
空指針間接引用
雙重關(guān)閉
被零除
危險(xiǎn)函數(shù)轉(zhuǎn)換
資源泄漏
l支持的語(yǔ)言
C
C++
JAVA/C#(需額外組件)
典型應(yīng)用
CodeSonar關(guān)注的是那些“真正能夠引發(fā)問(wèn)題”的軟件缺陷,因此被廣泛使用在安全關(guān)鍵和任務(wù)關(guān)鍵的系統(tǒng),比如汽車(chē)電子、航空航天。由于算法的科學(xué)性和先進(jìn)性,往往能檢測(cè)到其它靜態(tài)工具可能遺漏的問(wèn)題所在。例如,對(duì)某開(kāi)源代碼的檢測(cè),如下隱藏在特定路徑里的“條件表達(dá)式永遠(yuǎn)為T(mén)RUE”的案例,CodeSonar給出了較其它靜態(tài)分析工具更為準(zhǔn)確的表現(xiàn):

圖4 條件表達(dá)式永遠(yuǎn)為T(mén)RUE的示例,隱藏在switch-case路徑中
觀察102行,t1v_type == -1如果為真,頂層的while循環(huán)將退出;在switch語(yǔ)句中,164行,t1v_type == -1則不可能為真。CodeSonar指出這里是一個(gè)“copy-paste錯(cuò)誤”,此檢查比較“智能”,它認(rèn)為此處的t1v_type應(yīng)該是中間復(fù)制變量sub_t1v_type,這兩個(gè)變量在錯(cuò)誤的路徑中都已高亮顯示。