又一個(gè)編程神器來了!微軟開源軟件特征源碼分析工具
現(xiàn)代軟件開發(fā)通常涉及數(shù)百個(gè)組件來構(gòu)建應(yīng)用程序,這些組件可能是來自組織中的另一個(gè)團(tuán)隊(duì),外部供應(yīng)商,或開源社區(qū)中的某個(gè)人編寫的,這樣做有很多好處,諸如發(fā)布時(shí)間、質(zhì)量和互操作性,但有時(shí)會(huì)帶來隱藏的風(fēng)險(xiǎn)。
盡管你信任自己的團(tuán)隊(duì),但是他們編寫的代碼通常只占整個(gè)應(yīng)用程序的一小部分,你對(duì)這些外部組件了解多少呢?從某種程度來說,你對(duì)這些組件的信任程度和團(tuán)隊(duì)是一樣的。
為了提高軟件的質(zhì)量,避免開源軟件的固有風(fēng)險(xiǎn),微軟開源了其內(nèi)部使用的源碼分析器是 Application Inspector,可以識(shí)別軟件中的一些特性和元數(shù)據(jù)。
Application Inspector與典型的靜態(tài)分析工具的不同之處在于,它并不局限于檢測(cè)糟糕的編程實(shí)踐,相反的,它會(huì)在代碼中顯示一些有趣的特性,它會(huì)根據(jù) 500 多種規(guī)則模式報(bào)告發(fā)現(xiàn)的內(nèi)容,并進(jìn)行特征檢測(cè),包括影響安全性的特征,例如加密技術(shù)的使用等。
這邊,我們一起來看一下這段代碼:

我們可以看到一段程序代碼,它從URL下載內(nèi)容,將其寫入文件系統(tǒng),然后執(zhí)行shell命令以列出該文件的詳細(xì)信息。如果通過Application Inspector運(yùn)行此代碼,它就會(huì)識(shí)別出以下內(nèi)容:
- FileOperation.Write
- Network.Connection.Http
- Process.DynamicExecution
在這個(gè)小例子中,手動(dòng)檢查代碼片段以識(shí)別那些相同的功能很簡(jiǎn)單,但是許多組件包含成千上萬行代碼,現(xiàn)代Web應(yīng)用程序經(jīng)常使用數(shù)百個(gè)這樣的組件。而Application Inspector就是專門為大規(guī)模的應(yīng)用程序設(shè)計(jì)。
Application Inspector是一個(gè)跨平臺(tái)的命令行工具,可以生成多種格式的輸出,包括JSON和交互式HTML。以下是HTML報(bào)告的示例:

上方報(bào)告中的每個(gè)圖標(biāo)代表源代碼中標(biāo)識(shí)的功能。展開功能后單擊鏈接,你就可以查看相關(guān)代碼。
Application Inspector 包含一個(gè)可過濾的置信度指示器,可幫助最大程度減少誤報(bào)匹配以及可自定義的默認(rèn)規(guī)則和條件匹配邏輯,其帶有數(shù)百種功能檢測(cè)模式,涵蓋了許多流行的編程語言,并且對(duì)以下類型的特征提供了良好的支持:
- 應(yīng)用程序框架(開發(fā)、測(cè)試)
- 云/服務(wù) API(Microsoft Azure、Amazon AWS 和 Google Cloud Platform)
- 密碼學(xué)相關(guān)(對(duì)稱、非對(duì)稱、哈希和 TLS)
- 數(shù)據(jù)類型(敏感的個(gè)人身份信息)
- 操作系統(tǒng)功能(平臺(tái)標(biāo)識(shí)、文件系統(tǒng)、注冊(cè)表和用戶帳戶)
- 安全功能(身份驗(yàn)證和授權(quán))

目前,Application Inspector 已經(jīng)在Github上獲得266個(gè)Star,23個(gè)Fork(Github地址:https://github.com/Microsoft/ApplicationInspector)感興趣的伙伴們趕緊嘗試下吧。