使用W-AVC检测CWE漏洞 —— 越界写入

2023-07-07 11:44
1

图片


本系列文章将对全球知名的安全漏洞数据库CWE(Common Weakness Enumeration)中C代码常见错误进行介绍,并示范如何使用望安C代码自动验证平台W-AVC对漏洞进行检测。


本篇将介绍在CWE 2023年软件漏洞安全列表中排名第一的越界写入漏洞(CWE-787)开始讲起。栏目后续会逐步介绍内存越界、算术溢出、指针释放错误、数据竞争等漏洞的描述、示例和验证。





图片

○ CWE简介 ○

Introduction Of CWE



CWE(Common Weakness Enumeration,官方网站:https://cwe.mitre.org/index.html)是由MITRE公司主导的一个社区开发的常见软件和硬件弱点类型数据库。CWE的主要目标是针对开发人员和安全从业者社区,通过教育软件和硬件架构师、设计师、程序员和采购人员如何在产品交付之前消除最常见的错误,从源头上阻止漏洞的产生。使用CWE有助于防止一直困扰着软件和硬件行业并使企业处于风险之中的安全漏洞。

CWE帮助开发人员和安全从业者:

1

用通用语言描述和讨论软件和硬件弱点。

2

检查现有软件和硬件产品中的弱点。  

3

评估针对这些弱点的工具覆盖范围。

4

利用弱点识别、缓解和预防工作的

通用基线标准。

5

在部署之前预防软件和硬件漏洞。


目前CWE已收录了近1000个软硬件开发中的漏洞。许多代码安全分析工具使用CWE作为软硬件开发中漏洞分类,识别和描述的依据和建议。





图片

○ CWE-787越界写入 ○

(Out-of-bounds Write)



越界写入是指写入缓冲区的的数据超过了合法的界限。当应用程序在预期输入缓冲区的边界之外写入数据时,就会出现这种安全漏洞。当应用程序执行指针运算或更改索引以引用内存缓冲区之外的位置时,也可能导致该弱点。这种内存损坏通常会导致意外的代码执行、崩溃或数据损坏。

以下代码是一个越界写入的简单示例

图片


W-AVC对越界写入的识别

在下面的这段C代码中,我们希望对传入的字符串拷贝到副本,对副本字符串末尾的空格进行剪除后返回:

图片

然而,在这段代码中,如果传入的字符串全部由空格(包括``,'\t','\n','\v','\f','\r')组成,则由于第14行while语句中标准字符函数isspace条件一直为真,下标len会一直降至-1,从而可能对越界位置的内存进行写入。

现在我们将利用W-AVC平台,对上述代码的安全问题进行检查。在W-AVC中,我们编写如下基准文件:

图片

这份基准文件中声明了函数的入参,并对长度length 做了一个预设。在得到的报告中,我们得到了4个错误。所有错误都指向了一个问题,即指针发生了越界。

图片

查看详情后,可以看到W-AVC构造的具体反例

图片
图片

在这个反例中,验证器构造了引发越界错误的一个具体反例:当传入字符串是一个一个长度为5的字符串’\t \r\t ’,并且给出了范例发生步骤所在的具体代码行数。

利用这份报告,开发测试人员可以很快定位到漏洞所在位置和具体问题,更高效、更安全地保障代码正确性。




图片

○ W-AVC介绍 ○

(Introduction Of W-AVC)



望安C代码自动验证平台W-AVC是由望安科技研发的C语⾔代码程序的形式化验证云平台。平台基于形式化验证技术,通过数学证明排查代码中的缺陷和安全隐患 ;同时通过开发验证⼈员编写的规约基准代码,⾃动检查代码中的安全漏洞,从而在开发流程的早期增强系统的安全性,减少现代⼤型软件架构带来的⻛险。

申请试用:

登陆w-avc.wonsec.com,申请免费试⽤。