天天看點

如何使用W-AVC檢測CWE漏洞(II)

作者:望安科技

本系列文章将對全球知名的安全漏洞資料庫CWE(Common Weakness Enumeration)中C代碼常見錯誤進行介紹,并示範如何使用望安C代碼自動驗證平台W-AVC對漏洞進行檢測。

本篇将介紹在一個常見的記憶體安全問題,釋放後引用(CWE-416)。欄目後續會逐漸介紹記憶體越界、算術溢出、指針釋放錯誤、資料競争等漏洞的描述、示例和驗證。

欄目往期回顧:

使用W-AVC檢測CWE漏洞 —— 越界寫入

CWE簡介 :

CWE(Common Weakness Enumeration,官方網站:https://cwe.mitre.org/index.html)是由MITRE公司主導的一個社群開發的常見軟體和硬體弱點類型資料庫。CWE的主要目标是針對開發人員和安全從業者社群,通過教育軟體和硬體架構師、設計師、程式員和采購人員如何在産品傳遞之前消除最常見的錯誤,從源頭上阻止漏洞的産生。使用CWE有助于防止一直困擾着軟體和硬體行業并使企業處于風險之中的安全漏洞。

CWE幫助開發人員和安全從業者:

1.用通用語言描述和讨論軟體和硬體弱點。

2.檢查現有軟體和硬體産品中的弱點。

3.評估針對這些弱點的工具覆寫範圍。

4.利用弱點識别、緩解和預防工作的通用基線标準。

5.在部署之前預防軟體和硬體漏洞。

目前CWE已收錄了近1000個軟硬體開發中的漏洞。許多代碼安全分析工具使用CWE作為軟硬體開發中漏洞分類,識别和描述的依據和建議。

CWE-416釋放後引用(Use After Free):

釋放後引用漏洞是一種記憶體破壞漏洞,指釋放記憶體後引用該記憶體。觸發漏洞在于“重引用”這一步,通過該漏洞可以導緻意外的代碼執行、崩潰或資料損壞。

以下代碼是一個釋放後引用的簡單示例:

如何使用W-AVC檢測CWE漏洞(II)

W-AVC對釋放後引用的識别:

下面的這段C代碼是釋放後引用的樣例。

如何使用W-AVC檢測CWE漏洞(II)

在這段代碼中,第14行已經對指針buf2R1進行釋放,而第17行strcpy函數中引用了已經釋放的指針buf2R1,進而造成釋放後引用漏洞。

現在我們将利用W-AVC平台,對上述代碼的安全問題進行檢查。在W-AVC中,我們編寫如下基準檔案:

如何使用W-AVC檢測CWE漏洞(II)

這份基準檔案中聲明了函數的入參,并對指針user_supplied_string 做了一個預設。在得到的報告中,我們得到了3個錯誤。其中錯誤2指向解引用了已經釋放過的指針,即指針發生了UAF。

如何使用W-AVC檢測CWE漏洞(II)

檢視詳情後,可以看到W-AVC構造的具體反例:

如何使用W-AVC檢測CWE漏洞(II)

在這個樣例中,驗證器檢測到已經被釋放的指針被在strncpy函數中被再次引用,即程式中存在空指針解引用錯誤。

利用這份報告,開發測試人員可以很快定位到漏洞所在位置和具體問題,更高效、更安全地保障代碼正确性。

W-AVC介紹:

望安C代碼自動驗證平台W-AVC是由望安科技研發的C語⾔代碼程式的形式化驗證雲平台。平台基于形式化驗證技術,通過數學證明排查代碼中的缺陷和安全隐患 ;同時通過開發驗證⼈員編寫的規約基準代碼,⾃動檢查代碼中的安全漏洞,進而在開發流程的早期增強系統的安全性,減少現代⼤型軟體架構帶來的⻛險。

申請試用:

登陸w-avc.wonsec.com,申請免費試⽤。

繼續閱讀