剖析CWE檢視的層次定義和解析方式
摘要:CWE做為軟體缺陷分類的重要標準, 對安全研究、安全標準、缺陷管理起了重要的紐帶作用。CWE通過編號的型別(類缺陷、基礎缺陷和變種缺陷等)形成了多層次的缺陷型別劃分體系。本文進一步剖析了CWE檢視的層次之間的定義和解析方式。
本文分享自華為雲社群《CWE檢視層級關係的解析 之 CWE節點的儲存和定義》,作者:Uncle_Tom。
1. CWE的檢視
CWE做為軟體缺陷分類的重要標準, 對安全研究、安全標準、缺陷管理起了重要的紐帶作用。CWE使程式碼缺陷不同領域的研究人員在交流安全問題時,能夠採用相同的定義,減少了歧義性。
CWE通過編號的型別(類缺陷、基礎缺陷和變種缺陷等)形成了多層次的缺陷型別劃分體系。
CWE按照使用者視角, 給出了不同的CWE檢視. CWE提供了三大類的檢視.
1.1. 嚮導檢視(Navigate CWE)
CWE提供了:
- 研究者:CWE-1000 VIEW: Research Concepts
該檢視旨在促進對弱點的研究,包括弱點之間的相互依賴性,並可用來系統地找出CWE內部的理論差距。該視圖面向的是學術研究人員、漏洞分析人員和評估工具廠商。
它對弱點進行了分類,在很大程度上忽略瞭如何檢測它們,它們出現在程式碼中的什麼地方,以及它們何時被引入軟體開發生命週期。相反,它主要是根據軟體行為的抽象來組織的。這種分類方法不關心缺陷的檢測方法,缺陷在程式碼中的位置,在軟體開發生命週期中何時引入缺陷。該檢視主要基於對軟體行為進行抽象描述的方法組織歸類。 - 軟體開發:CWE-699 VIEW: Software Development
該檢視圍繞軟體開發中經常使用或遇到的弱點。因此該檢視可以用於開發人員、教育工作者和評估供應商。分類基礎是軟體開發中經常使用和碰到的概念, 它提供了多種類別,旨在簡化導航、瀏覽和對映。 - 硬體設計:CWE-1194 VIEW: Hardware Design
1.2. 擴充套件試圖(External Mappings)
基於一些外部組織生成的檢視. 這裡有我們熟悉的CWE TOP 25,OWASP TOP 10,以及 SEC CERT的程式設計規範和CISQ 質量測量標準等。
- CWE Top 25 (2021)
- Most Important Hardware Weaknesses List (2021)
- OWASP Top Ten (2021)
- Seven Pernicious Kingdoms
- Software Fault Pattern Clusters
- SEI CERT Oracle Coding Standard for Java
- SEI CERT C Coding Standard
- SEI CERT Perl Coding Standard
- CISQ Quality Measures (2020)
- CISQ Data Protection Measures
- Architectural Concepts
1.3. 幫助試圖(Helpful Views)
這裡基於特定的標準提供了特定領域的試圖.
- Introduced During Design
- Introduced During Implementation
- Quality Weaknesses with Indirect Security Impacts
- Software Written in C
- Software Written in C++
- Software Written in Java
- Software Written in PHP
- Weaknesses in Mobile Applications
- CWE Composites
- CWE Named Chains
- CWE Cross-Section
- CWE Simplified Mapping
- CWE Entries with Maintenance Notes
- CWE Deprecated Entries
- CWE Comprehensive View
- Weaknesses without Software Fault Patterns
- Weakness Base Elements
1.4. 過期的檢視(Obsolete Views)
因為新的檢視釋出,而不再使用的檢視, 例如以往的CWE TOP 25, OWASP TOP 10等.
- CWE Top 25 (2020)
- CWE Top 25 (2019)
- CWE/SANS Top 25 (2011)
- CWE/SANS Top 25 (2010)
- CWE/SANS Top 25 (2009)
- Weaknesses Used by NVD
- OWASP Top Ten (2017)
- OWASP Top Ten (2013)
- OWASP Top 10 (2010)
- OWASP Top 10 (2007)
- OWASP Top 10 (2004)
- The CERT C Secure Coding Standard (2008)
- The CERT Oracle Secure Coding Standard for Java (2011)
- SEI CERT C++ Coding Standard (2016)
- CISQ Quality Measures (2016)
2. CWE的儲存結構
2.1. CWE定義的xml schema檔案
CWE 每個版本的所有資訊是存放在一個xml檔案中。xml中各個欄位的格式和定義是由一個xsd檔案來定義xml的schema。這些兩個檔案可以從CWE的下載頁面得到。
我們來看下檢視和具體的CWE的儲存關係是怎麼定義在schema中的。
2.2. CWE xml檔案的框架(Weakness_Catalog節點)
這個節點下定義了組成xml檔案的四個主要節點:
- Weaknesses:各個CWE的定義,由WeaknessType型別具體定義;
- Categories:弱點的分類定義,由CategoryType型別具體定義;
- Views:弱點檢視的定義,由ViewType型別具體定義;
- External_References: 外部參考資訊,由ExternalReferenceType型別具體定義。
接下來我們重點說下四個節點中的:Weaknesses和Views。
2.3. 弱點節點(Weaknesses)定義
Weaknesses的定義是由WeaknessType型別定義的。
2.3.1. 弱點型別(WeaknessType)的定義
這個節點下定義每個CWE弱點的主要地方,這裡有我們瞭解的必須的節點,例如CWE的ID,名字(Name), 描述(Description)等,以及組成每個CWE的其他節點的定義。
這裡我們重點關注CWE間的關係:Related_WeaknessesType。
2.3.2. 弱點關係型別(Related_WeaknessesType)的定義
這個節點定義個當前CWE在不同檢視下與其他節點的關聯關係。主要欄位包括:
- Nature: 關係型別,由另一個列舉(RelatednatureEnumeration)定義。見下圖:
- CWE_ID: 與之關聯的CWE編號ID;
- VIEW_ID: 與之關聯的CWE檢視(View)編號(ID);
通常這裡只定義父節點,也就是當前節點在檢視(VIEW_ID)中的父節點(Nature為ChildOf)的CWE節點是CWE_ID。
2.4. 檢視節點(Views)定義
Views的定義是由ViewType型別定義的。
2.4.1. 檢視型別(ViewType)的定義
這裡定義了檢視的主要組成:
- ID:檢視的ID;
- Name: 檢視的名字;
- Members:檢視的成員,由RelationshipsType型別具體定義。
2.4.2. 檢視節點關係型別(RelationshipType)的定義
該型別具體的定義了檢視的成員,以及和檢視成員之間的關係。
- Has_Member: 由結構體Member_Type定義,具體如下圖:
每個檢視成員由成員的CWE_ID,和所屬的檢視編號View_ID組成。
2.5. CWE層級關係的舉例
2.5.1. 研究者檢視CWE-1000
- 研究者檢視CWE-1000頁面關係展示
從這個圖示可以看到編號:CWE-1000的研究者檢視由以下節點組成:
- 檢視的成員:
- CWE-284:訪問控制不恰當(Improper Access Control);
- CWE-435: 互動錯誤(Improper Interaction Between Multiple Correctly-Behaving Entities);
- CWE-664:在生命週期中對資源的控制不恰當(Improper Control of a Resource Through its Lifetime);
- 檢視的子節點:
這裡以CWE-120為例,從圖中可以看到: - CWE-120:未進行輸入大小檢查的緩衝區拷貝(傳統緩衝區溢位),它的父節點是:CWE-119;
- CWE-119:記憶體緩衝區邊界內操作的限制不恰當,它的父節點是: CWE-118;
- CWE-118: 對可索引資源的訪問不恰當(越界錯誤), 它的父節點是: CWE-664;
- CWE-664:在生命週期中對資源的控制不恰當,它的父節點是: CWE-1000;
- CWE-1000:研究者檢視。
2.5.2. 對應的xml定義
- 研究者檢視CWE-1000的定義
- CWE-120的定義
- CWE-119的定義
- CWE-118的定義
3. 小結
- 介紹了CWE的四種主要檢視型別:嚮導檢視、擴充套件試圖、幫助試圖和過期的檢視;
- 介紹了CWE通過xsd完成xml儲存的定義方式,重點介紹瞭如何建立各個CWE之間的層級關係;
- 以CWE120為例說明了CWE在xml檔案中如何建立與CWE-1000之間的層級關係。