Common Weak Enumeration (CWE) 是軟件弱點和漏洞的類別系統,現在用于為開發關鍵任務嵌入式系統的人員提供源代碼分析工具的通用詞匯表。CWE項目的一些不同分組(例如與一般編碼實踐相關的分組)側重于軟件系統中特定于安全的部分,包括身份驗證和加密,以及可以通過適當選擇編程語言或工具來緩解的部分。最近決定在CWE的框架內包括“通用質量枚舉”,該枚舉將推廣其適用于各種軟件弱點,而不是嚴格意義上與網絡安全相關的弱點。
制定 CWE
Common Weak Enumeration(CWE,http://cwe.mitre.org)已經成為每個具有安全意識的任務關鍵型嵌入式系統開發人員的事實上的參考資源。CWE將所有已知的網絡安全漏洞分類為一個系統編號的列表,最新版本(3.2版,從2019年1月開始)包含800多個弱點和近1,200個項目。CWE源于MITRE公司(馬薩諸塞州貝德福德和弗吉尼亞州麥克萊恩)的一個項目,該項目旨在描述和總結不斷增長的常見漏洞和暴露(CVE)列表;MITRE還與美國國家標準與技術研究院(NIST)維護的國家漏洞數據庫(NVD)一起維護CVE列表。
CVE和NVD一起記錄了每個公開的網絡安全漏洞和暴露事件,可以追溯到1999年。CWE試圖將網絡安全漏洞和暴露事件分為不同的類別,以便為工具,網絡安全專家和整個關鍵任務軟件開發社區提供通用詞匯。在 3.2 版中,已努力包含更普遍的質量弱點,這些弱點源自 CQE(通用質量枚舉)項目。這些類型的弱點與安全問題沒有直接關系,但仍然可能導致生命周期中的重大問題,并且通??梢酝ㄟ^檢測以安全為中心的弱點的相同類型的工具檢測到。
CWE被用于各種上下文,但也許最重要的是與源代碼分析工具有關。從歷史上看,每個這樣的工具都有自己特定的詞匯表,所有這些詞匯表都有可能令人困惑或模棱兩可的描述,確切地說它旨在檢測什么樣的軟件問題。然而,隨著CWE的出現,許多源代碼分析工具已經開始使用相關的唯一CWE標識符來識別它們檢測到的問題。使用CWE,這種共享詞匯能夠以有意義的方式組合和比較來自多個工具的結果。即使使用通用術語,使用多個工具也有優勢,因為在檢測潛在的源代碼缺陷時,不同的工具往往具有不同的優勢。
CWE 示例
CWE最好通過示例來說明。在第一次查看 CWE 時,區分不同類型的弱點通常是有幫助的。有些我們可以稱之為通用,因為它們在任何和每個應用程序中都是值得關注的,例如緩沖區溢出(CWE-120)?;旧?,所有程序都使用表、數組或字符串,對于所有此類程序,嘗試向表、數組或字符串中放入比它可以容納的更多內容肯定會產生問題,如果語言通過運行時檢查捕獲此類嘗試,或者最終如果由此類緩沖區溢出損壞的數據用作計算后期階段的輸入。CWE-120的 http://cwe.mitre.org 條目如下(表1)。
表 1:CWE-120。
除了 CWE-120 之外,還有一組相關的弱點,這些弱點涉及將索引到數組邊界之外的類似數組的結構中。在CWE網站上搜索“數組越界”會生成相關CWE條目的列表,其中不僅包括對弱點的描述:它們還包括一些示例來說明那些編程語言中的弱點,其中編譯時或運行時檢查不會自動檢測到弱點。此外,在一些更基本的 CWE(如 CWE-120)的條目中,還提供了其他部分,例如介紹模式、適用平臺(通常是弱點更普遍的編程語言)、常見后果、利用的可能性和潛在的緩解措施。緩解措施部分將確定不太可能出現漏洞的語言或平臺,以及軟件開發或部署實踐,這些實踐將減少在所使用的語言或平臺無法自動阻止漏洞的環境中被利用的可能性。
除了緩沖區溢出及其相關危險等普遍弱點之外,還有一些弱點更特定于應用程序,具體取決于應用程序的性質。例如,正確使用身份驗證和授權可能與在物理安全位置之外無法訪問的應用程序無關。CWE-284,訪問控制不當,解決了這一特定于應用程序的弱點(下一頁的表2)。
表 2:CWE-284。
與緩沖區溢出一樣,還有一組其他 CWE 條目專注于此一般弱點領域的特定元素。在CWE網站上搜索“身份驗證和授權”會生成示例列表。
盡管此類特定于應用程序的 CWE 可能并不適用于所有系統,但具有外部連接的系統的比例每天都在增長。例如,過去只有飛行員才能使用的軍事系統現在正在聯網,以改善協調和態勢感知。盡管網絡中的其他系統本身可能是安全的,但干擾通信的可能性始終存在。即使是這些純粹的計算機到計算機連接也可能需要身份驗證和授權,以避免不友好方的欺騙或損壞。最重要的是,越來越多的以前特定于應用程序的CWE在其相關性方面變得更加普遍。
如上所述,剛剛在CWE版本3.2中添加的一組新的CWE條目與安全性沒有直接關系,但仍然與強大的關鍵任務嵌入式系統的構建和發展相關。該組源自幾年前構建的實驗性通用質量枚舉 (CQE),包括 CWE 條目,例如 CWE-1041,冗余代碼的使用(表 3)。
表 3:CWE-1041。
如表的擴展描述所示,相同代碼的重復副本會嚴重影響系統的維護和演進。這也是一個普遍的質量和可維護性問題,事實上,幾乎每個系統都會發生,與編程語言或開發過程無關。甚至還有一個三個字母的首字母縮略詞專門用于這個問題:DRY – 不要重復自己!代碼的重復在某種程度上是“不要重新發明輪子”的另一面。無論是重復自己還是重新發明輪子,都不是程序員構建長期關鍵任務系統的正確答案。關鍵是抽象、模塊化和編程平臺底層的良好庫系統,因此可重用的組件可以抽象為可以多次調用或實例化的組件,而無需依賴復制和粘貼。
CWE 兼容工具
正如上述少量CWE條目所證明的那樣,CWE與軟件密集型系統開發過程中每天面臨的挑戰直接相關。有了這個通用詞匯,軟件項目現在可以根據工具是否可以檢測甚至建議更正正在開發或部署的系統源代碼中的此類弱點來識別和評估工具。事實上,MITRE 已經建立了一個遵循 CWE 命名法的工具注冊表,無論是在控制其操作方面,還是在生成報告方面。此工具列表作為MITRE的CWE兼容性和有效性計劃的一部分進行維護。
目前,大約有35家公司在CWE兼容工具注冊表中列出了50多種工具。要在注冊表中列出,該工具必須至少滿足以下六個條件中的前四個:可使用 CWE 標識符進行 CWE 搜索;必須包含或允許用戶獲取相關的 CWE 標識符;必須準確鏈接到適當的 CWE 標識符;必須描述 CWE、CWE 兼容性和 CWE 相關功能;必須明確列出功能聲稱覆蓋范圍和有效性的 CWE-ID,以防止在軟件中定位;并且必須在網站上顯示 CWE 評估軟件的測試結果。
作為某些類型的工具如何將 CWE 標識符集成到其用戶界面中的示例,下面是靜態分析工具的屏幕截圖,展示了它在示例程序 [dining_philosophers.adb – 基于經典的餐飲哲學家算法] 中檢測各種 CWE 問題的能力(圖 1)。
圖1:屏幕截圖演示了該工具在示例程序中檢測 CWE 問題的能力。
如上所示,顯示的每條消息都包含與每個已識別問題關聯的 CWE 標識符(在本例中,我們看到緩沖區溢出和數字范圍溢出)。圖形界面還使用戶能夠通過CWE標識符識別當前感興趣的特定弱點,從而過濾掉與這些問題無關的消息。雖然此處未顯示,但將鼠標懸停在 CWE 標識符上會顯示弱點的簡短描述,因此用戶無需嘗試記住每個 CWE ID 的含義。
作為另一個示例,下面是一個工具的屏幕截圖,該工具支持在 Ada 的 SPARK 子集中編寫的程序的程序屬性的形式證明。
圖2:屏幕截圖顯示了相應的 CWE 標識符。
在這里,我們再次看到指示工具無法完全自動化證明運行時錯誤缺失 (AoRTE) 屬性的位置的消息包括適當的 CWE 標識符。上面還顯示了一個搜索功能,可以過濾掉非 CWE 郵件(在本例中,通過在搜索框中寫入“CWE”),或者可以識別引用特定 CWE ID 的郵件。
MITRE對常見弱點枚舉的定義為開發更安全,更健壯的軟件密集型系統的整個過程做出了重要貢獻。它提供了一個通用詞匯表,有助于軟件開發組織內部的溝通,并允許用戶理解和比較用于掃描和分析任務關鍵型軟件源代碼的工具的功能。設計人員會發現,將CWE兼容功能納入靜態分析和形式化方法工具集,使用戶能夠輕松了解可以消除的安全性和魯棒性問題。
審核編輯:郭婷
-
嵌入式
+關注
關注
5068文章
19014瀏覽量
303232 -
應用程序
+關注
關注
37文章
3240瀏覽量
57600
發布評論請先 登錄
相關推薦
評論