在前一篇的文章 - 用民主表決的方式增進軟體開發的安全性 - 中,我們提到有人利用投票評分的方式,希望可以增加系統的安全性。這個作法可以用在規劃的階段,至於其他階段,當然有其他更適用同時也更複雜的做法。其中程式碼的檢測,屬於後面開發階段所適用的工具之一。嚴格說來,這類檢測應該稱之為程式安全檢測(Application Security Testing),而不是程式碼檢測。
程式安全檢測通常可以區分為兩種,一種是靜態的(Static Application Security Testing, SAST),另外一種則是動態的(Dynamic Application Security Testing, DAST)。靜態跟動態最大的不同之處在於動態的分析方式是讓程式處於執行狀態 (runtime),而非靜止的情形 (non-runtime)。當然,有越來越多的技術會將兩種方式加以整合。因為透過兩者的交叉分析,不但可以互補以達到更好的檢測效果,同時也可以降低 False Positive 的比例。
Gartner 於月初公布了一份研究報告,研究的對象是針對市面上 SAST 的廠商。這些廠商中,有專注於程式安全的廠商(如 Fortify Software 、 Ounce Labs),也有提供 SDL 完整方案的廠商(如 HP 、 IBM 、 Microsoft),此外還有著重於整體程式品質的廠商(如 Coverity 、 Parasoft)。後面兩類的廠商,因為已經擁有不少現成的客戶基礎,所以在未來推廣上的阻力將是較小的。而這些廠商所提供的 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 檢測的重要性會越來越高
完整的研究報告請參考所附連結。
相關連結: