源代碼分析工具的關(guān)鍵及應(yīng)避免的特征
一、源代碼分析工具的關(guān)鍵特征
一個有用且成本效率好的源代碼分析工具必須具備6種關(guān)鍵特征。
1.基于安全而設(shè)計。
軟件安全可能是軟件質(zhì)量的一個子集,但是軟件安全需要像壞人一樣的思維能力。利用軟件的弱點并不是常規(guī)QA中的一種練習(xí)。
在功能測試過程中揭示的軟件缺點的處理方式可能僅僅解決了功能問題,但是安全缺點依然存在,并且通過某種出乎意料的執(zhí)行路徑時就會現(xiàn)問題,而在功能測試過程中根本不會考慮到這種執(zhí)行路徑。
不言而喻的是,軟件安全風(fēng)險傾向于比常規(guī)軟件風(fēng)險造成更巨大的商業(yè)影響。安全影響的代價是根據(jù)所造成商業(yè)數(shù)據(jù)損失、客戶信任和品牌忠誠度損失、停工期和不能執(zhí)行商業(yè)交易的損失,以及其他的無形損失來衡量的。
簡單地說,對于健壯性而言,軟件質(zhì)量工具可能有些用處,但是軟件安全工具中內(nèi)置了更重要的安全知識。內(nèi)置在工具內(nèi)的知識庫是一個基本的決定因素。
2.支持多層模型。
很少有現(xiàn)代軟件應(yīng)用程序是用一種編程語言編寫,或者僅針對一個平臺的。大多數(shù)企業(yè)關(guān)鍵應(yīng)用程序都是高度分布式的,具有多層結(jié)構(gòu),每一層都用不同的編程語言編寫,并且在不同的平臺中執(zhí)行。
自動化的安全分析軟件必須支持所程序使用的每一種語言和平臺,以及正確地在各層內(nèi)和各層之間進(jìn)行協(xié)商。只能分析僅僅一種或者兩種語言的工具并不能滿足現(xiàn)代軟件的要求。
3.具有可擴展性。
與陸地上的物種一樣,安全問題也不斷進(jìn)化、成長和成熟。沒有任何一種技術(shù)或者規(guī)則集可以永遠(yuǎn)有效地檢測所有的安全弱點。好的工具需要模塊化體系結(jié)構(gòu),支持多種類型的分析技術(shù)。
這樣,當(dāng)開發(fā)出新的攻擊和防御技術(shù)時,工具就能進(jìn)行擴展以包含新的技術(shù)。類似地,用戶也應(yīng)該能夠增加他們自己的安全規(guī)則。每一個機構(gòu)都有自己的一套集團(tuán)安全政策,因此,解決安全問題的一成不變的“通用”方法是注定要失敗的。
4.對安全分析人員有用,也對開發(fā)人員有用。
安全分析是復(fù)雜和困難的。即使是最好的分析工具也不能自動地修改安全問題,就像調(diào)試器不能神奇地調(diào)試你的代碼一樣。最好的自動化工具使得分析人員可以將他們的注意力集中在最重要的問題上。
好的工具不但為分析人員提供支持,而且也為可憐的開發(fā)人員提供幫助,他們必須解決工具所揭示出來的問題。好的工具能夠使用戶盡可能有效率地找到并解決安全問題。如果使用正確,源代碼分析工具是很好的教學(xué)工具。使用它們,(幾乎是通過潛移默化)開發(fā)人員就能學(xué)到軟件安全的許多知識。
5.支持現(xiàn)有的開發(fā)過程。
與建造過程和IDE的無縫集成是任何軟件工具應(yīng)該具備的基本特性。要使一種源代碼分析工具被接受,成為應(yīng)用程序開發(fā)團(tuán)隊的工具集的一部分,這個工具就必須與現(xiàn)有的用于不同平臺的編譯器適當(dāng)?shù)丶善饋?,并且支持make和ant之類的流行建造工具。
好的工具既應(yīng)該集成到現(xiàn)有的建造過程中,也應(yīng)該支持人們熟悉的開發(fā)工具,并與它們共存無礙。
6.對不同職位的人有意義。
軟件都是為了某種理由而建造的——通常是某種商業(yè)理由。安全工具需要對商業(yè)有所幫助。對大多數(shù)機構(gòu)來說,關(guān)注面向安全的開發(fā)都是一種新思維。
原注:當(dāng)越來越多的普通質(zhì)量工具不能用來查明安全問題時,老練的審核人員卻可以用它們在代碼模塊的復(fù)雜、內(nèi)聚、耦合和努力/數(shù)量關(guān)系中確定一些“跡象”——這是確定可能的安全弱點的很好的起點。在許多情形中,來自于脆弱的編碼的安全錯誤在其他正確的代碼中并不顯眼。
它們經(jīng)常是更大的、更普遍的疏忽所導(dǎo)致的結(jié)果,從更廣義的角度,可以將它們看成一種質(zhì)量錯誤。不要依賴質(zhì)量衡量參數(shù)來確定安全問題,但是應(yīng)該注意質(zhì)量差的模塊。缺點都傾向于結(jié)伴出現(xiàn)。
當(dāng)然,軟件安全并不是一種產(chǎn)品;而是一種正在進(jìn)行的過程,這個過程需要整個機構(gòu)的許多人的力量。但是好的自動化工具有助于將軟件安全計劃從所選擇的幾個部門擴展到整個開發(fā)公司中。
可以使用相關(guān)的衡量參數(shù)來比較發(fā)布經(jīng)理、開發(fā)經(jīng)理,甚至公司主管人員的看法,而且他們的觀點能為軟件發(fā)布決策提供支持,有助于控制修改軟件的費用,以及提供對軟件管理最需要的數(shù)據(jù)。
二、源代碼分析工具應(yīng)該避免的三種特征
源代碼分析并不容易,而且早期的方法(包括ITS4)受到大量不利因素的困擾。一些這樣的問題仍然存在于現(xiàn)在的源代碼分析工具中。小心以下這些特征。
1.太多的假陽性。
早期的靜態(tài)分析方法的一個常見問題是,它們的假陽性比例太高。實際工作人員似乎覺得提供的假陽性比例小于40%的工具就能用。有時ITS4產(chǎn)生的假陽性比例大于90%甚至更高,使得它很難使用。美化的grep機器就有極低的信噪比。包含數(shù)據(jù)流分析能力的現(xiàn)代方法極大地降低了假陽性,使得源代碼分析更為有效。
2.在與IDE集成方面存在缺陷。
Emacs可能很棒,但是它并不適用于所有的人。開發(fā)人員已經(jīng)有了他們喜歡的IDE,在進(jìn)行安全分析時,不應(yīng)該要求他們切換到其他的界面。在這方面已經(jīng)進(jìn)行了足夠的討論,不再贅述。
3.一根筋地只支持C語言。
典型的安全缺陷在C語言中很普遍。但是,現(xiàn)在的軟件都是用多種語言來建造的,并且支持多種平臺。如果你的系統(tǒng)不是僅僅用C語言建造的,當(dāng)你審核代碼時,應(yīng)該確保沒有忽略那些“非C語言”的代碼。
【編輯推薦】