搜尋此網誌

顯示具有 Static Source Code Analysis 標籤的文章。 顯示所有文章
顯示具有 Static Source Code Analysis 標籤的文章。 顯示所有文章

2009年2月27日 星期五

Gartner研究報告:靜態程式安全檢測

在前一篇的文章 - 用民主表決的方式增進軟體開發的安全性 - 中,我們提到有人利用投票評分的方式,希望可以增加系統的安全性。這個作法可以用在規劃的階段,至於其他階段,當然有其他更適用同時也更複雜的做法。其中程式碼的檢測,屬於後面開發階段所適用的工具之一。嚴格說來,這類檢測應該稱之為程式安全檢測(Application Security Testing),而不是程式碼檢測。

程式安全檢測通常可以區分為兩種,一種是靜態的(Static Application Security Testing, SAST),另外一種則是動態的(Dynamic Application Security Testing, DAST)。靜態跟動態最大的不同之處在於動態的分析方式是讓程式處於執行狀態 (runtime),而非靜止的情形 (non-runtime)。當然,有越來越多的技術會將兩種方式加以整合。因為透過兩者的交叉分析,不但可以互補以達到更好的檢測效果,同時也可以降低 False Positive 的比例

Gartner 於月初公布了一份研究報告,研究的對象是針對市面上 SAST 的廠商。這些廠商中,有專注於程式安全的廠商(如 Fortify SoftwareOunce Labs),也有提供 SDL 完整方案的廠商(如 HP 、 IBM 、 Microsoft),此外還有著重於整體程式品質的廠商(如 CoverityParasoft)。後面兩類的廠商,因為已經擁有不少現成的客戶基礎,所以在未來推廣上的阻力將是較小的。而這些廠商所提供的 SAST 形式包含軟體與服務(Security as a Service)兩種,或者兩者混搭。

研究的方式透過願景與執行力兩個部分來評估各家廠商的表現,其中兩者皆表現良好的廠商即為市場的領導者。研究的結果顯示,專注於程式安全的兩家廠商 – Fortify Software 與 Ounce Labs -是目前市場上領導的廠商。我想因為這是一個新的應用與市場,小型廠商只要擁有技術,在執行力的表現通常也很容易勝過那些大型的恐龍。不過也因為這是一個新興的市場,報告中特別指出當企業在選擇時必須多加警慎小心。除了小心合約的內容外,合約的時效性也不宜太長。另外,採用服務的方式也是降低風險的一種好方法,只是這部分就要審慎考慮 IP 的問題。另一個同時必須考量的部分,就是目前的領導廠商並不見得是最好的選擇,而必須根據企業自己的需求好好地加以評估並選擇。

前面提到,程式安全檢測並不等同於程式碼安全檢測,原因是檢測的目標除了是原始程式碼以外,也可以是 Byte Code(如 Java 與 .Net),甚至可能是 Native Code。不過不管檢測的目標是甚麼,這些檢測方法都不會讓程式執行,不然就算是 DAST 的範圍了。對於 Native Code 的檢測,除了與 Byte Code 檢測一樣不需要程式碼外(或沒有程式碼),更可以發現特定情形(如特定的作業系統)下才會產生的問題。所以如果可行的話,除了程式碼的檢測外,也可以額外進行 Native Code 的檢測。可惜的是,研究對象中僅有 Veracode 這家廠商提供此一技術。

此外,報告中也提出了其他對於市場與技術發展的觀點:

  • SAST 應該成為企業 IT 中必備的一項工具
  • SAST 將會以免費或非常低的取得成本整合至 SDL 的工具中
  • 功能與產品之間會加以整併,最終獨立運作的 SAST 將不復存在
  • 廠商之間會發生整併的情形
  • 服務的方式會越來越受歡迎,一方面也是拜經濟衰退之賜
  • Byte Code 與 Native Code 檢測的重要性會越來越高

完整的研究報告請參考所附連結。

相關連結:

2008年5月22日 星期四

Open Source 軟體安全再進化 - Scan開放源碼程式研究報告

Scan 這個網站於日前公布了一份為期兩年 (2006-2007) 的研究報告,這份報告是由美國國土安全局 (U.S. Department of Homeland Security) 贊助 Coverity 這家公司所進行的。這項主要針對Open Source程式碼安全性檢測的研究報告,總共有超過250個Open Source的軟體(超過5千5百萬行的程式碼)參與,並於期間不斷的重複檢測,所以總共做了14,238次檢測(超過一百億行的程式碼),最後的檢測結果也顯示在這兩年的期間內共有8,500個錯誤已經被修正。

此份報告並不針對單一軟體的檢測結果做出報告,僅針對全面性的數據做出報告分析。因為每個軟體的程式碼行數有很大的差距,所以此研究報告的指標是採用每一千行程式的錯誤數 (static analysis defect density,以下簡稱錯誤率)作為主要憑據。此數據由兩年前的0.3降到0.25,減少了約16%。當然並不是每個軟體都有相同的改進,有些軟體甚至出現該數據上升的情形。

此研究不但希望知道Open Source軟體在安全性的表現,更希望知道這些軟體是否持續改進其安全性,也因此才會維持長時間的研究計畫,並重複對單一軟體進行檢測。為了因應評定軟體持續改進的結果,該研究把這些軟體分成不同的rungs,其中目前已經有十一個軟體達到rung 2的等級,而且這些軟體的檢測結果也被簡單的列在該網站的網頁上。這些軟體包含Amanda、NTP、OpenPAM、OpenVPN、Overdoes、Perl、PHP、Postfix、Python、Samba與TCL。

報告中並將所有檢測出的錯誤做出分類排行,發現錯誤類型的分佈極不平均。其中前兩名是Null Pointer Dereference與Resource Leak,而且比例就佔了所有檢測出的錯誤一半以上(53.68%)。

此外,此份報告的結果也顯示出Function的長度與軟體整體的錯誤率並沒有任何關聯,這與我們一般的認知並不相同。不過報告也特別提出,因為此份報告並沒有分析Function的長度與Function自身的錯誤率的關係,所以並無法完全肯定Function長度與錯誤率的真正關係。而且此研究使用之方法主要為靜態程式碼分析,還有其他錯誤需要用其他的方式才能檢測出來。另外就是較長的程式碼通常比較難加以維護,這部分也是此份報告沒有加以評估與分析的。

最後,對於大家常討論的Open Source與商業軟體程式碼安全性的比較,在這篇報告中也因為研究計劃定位與商業機密的問題,並不予以討論。

有興趣的人可以下載完整的報告進一步加以了解。

完整報告:
Coverity White Paper: Scan Open Source Report 2008

About