靜態代碼掃描存在的價值
- 研發過程,發現BUG越晚,修復的成本越大
- 缺陷引入的大部分是在編碼階段,但發現的更多是在單元測試、集成測試、功能測試階段
- 統計證明,在整個軟件開發生命周期中,30% 至 70% 的代碼邏輯設計和編碼缺陷是可以通過靜態代碼分析來發現和修復的
以上三點證明了,靜態代碼掃描在整個安全開發的流程中起着十分關鍵的作用,且實施這件事情的時間點需要盡量前移,因為掃描的節點左移能夠大幅度的降低開發以及修復的成本,能夠幫助開發人減輕開發和修復的負擔,許多公司在推行靜態代碼掃描工具的時候會遇到大幅度的阻力,這方面阻力主要來自於開發人員,由於工具能力的有限性,會產生大量的誤報,這就導致了開發人員很可能在做BUG確認的工作時花費了大量的無用時間。因此選擇一款合適的靜態代碼分析工具變得尤為重要,合適的工具能夠真正達到降低開發成本的效果。
靜態代碼分析理論基礎和主要技術
靜態代碼分析原理分為兩種:分析源代碼編譯后的中間文件(如Java的字節碼);分析源文件。主要分析技術如下:
-
缺陷模式匹配
事先從代碼分析經驗中收集足夠多的共性缺陷模式,將待分析代碼與已有的共性缺陷模式進行匹配,從而完成軟件安全分析。優點:簡單方便;缺點:需要內置足夠多的缺陷模式,容易產生誤報。 -
類型推斷/類型推斷
類型推斷技術是指通過對代碼中運算對象類型進行推理,從而保證代碼中每條語句都針對正確的類型執行。 -
模型檢查
建立於有限狀態自動機的概念基礎上。將每條語句產生的影響抽象為有限狀態自動機的一個狀態,再通過分析有限狀態機達到分析代碼目的。
校驗程序並發等時序特性。 -
數據流分析
從程序代碼中收集程序語義信息,抽象成控制流圖,可以通過控制流圖,不必真實的運行程序,可以分析發現程序運行時的行為。
靜態代碼掃描工具
1. Fortify SCA(Source Code Analysis)
Fortify Software公司是一家總部位於美國硅谷,致力於提供應用軟件安全開發工具和管理方案的廠商。Fortify為應用軟件開發組織、安全審計人員和應用 安全管理人員提供工具並確立最佳的應用軟件安全實踐和策略,幫助他們在軟件開發生命周期中花最少的時間和成本去識別和修復軟件源代碼中的安全隱患。 Fortify SCA是Fortify360產品套裝中的一部分,它使用fortify公司特有的X-Tier Dataflow™ analysis技術去檢測軟件安全問題。
優點:全球最大的靜態代碼檢測廠商,支持語言較多
缺點:價格太過昂貴,性價比不高
2. Checkmarx CxSuite
Checkmarx 是以色列的一家高科技軟件公司。它的產品CheckmarxCxSuite專門設計為識別、跟蹤和修復軟件源代碼上的技術和邏輯方面的安全風險。首創了以查詢語言定位代碼安全問題,其采用獨特的詞匯分析技術和CxQL專利查詢技術來掃描和分析源代碼中的安全漏洞和弱點。
優點:可以利用CxQL 查詢語言自定義規則
缺點:輸出報告不夠美觀、語言支持種類不全面,價格昂貴
3. Coverity
Coverity公司是由一流的斯坦福大學的科學家於2002年成立的,產品核心技術是1998年至2002年在斯坦福大學計算機系統實驗室開發的,用於解決一個計算機科學領域最困難的問題,在2003年發布了第一個能夠幫助Linux、FreeBSD等開源項目檢測大量關鍵缺陷的系統,Coverity是唯一位列IDC前10名軟件質量工具供應商的靜態分析工具廠商,被第三方權威調查機構VDC評為靜態源代碼分析領域的領導者,市場占有率處於絕對領先地位。
優點:可以檢測二進制文件,分析能力較強
缺點:價格昂貴
4. 源傘科技Pinpoint
網址:https://www.sourcebrella.com/
源傘科技公司是香港科技大學安全實驗室的眾多博士創建的,產品集成了實驗室多年的研究成果,在眾多國際頂級學術會議上都發表了成果論文,在學術界有很大的影響。近幾年源傘科技將靜態代碼檢測產品Pinpoint成功商業化。目前產品已經比較成熟,能夠方便的集成各種安全開發流程,操作界面流暢。能夠直接掃描JAVA的二進制文件,在Java和c/c++兩種語言上的分析能力十分強大,掃描速度普遍快於市面上現有的產品,且擁有眾多國內一線互聯網以及金融公司的安全開發實例經驗,不僅能夠輸出工具產品,也能夠提供安全開發的解決方案。在國內靜態代碼分析領域處於領先地位。
優點:分析能力強,使用方便友好,價格透明親民
缺點:還未支持C#以及OC,目前支持C/C++,Java,Android,JS,PHP,Python,Golang,Sql
為國產工具源傘Pinpoint打Call!!