新闻动态
如何使用W-AVC检测CWE漏洞(III)
来源: | 作者:望安科技 | 发布时间: 427天前 | 784 次浏览 | 分享到:



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


本篇将介绍另一个常见的内存安全问题,空指针的解引用问题(CWE-476)。栏目后续会逐步介绍内存越界、算术溢出、数据竞争等漏洞的描述、示例和验证。


栏目往期回顾:

CWE-787 越界写入

CWE-416 释放后引用






 ○ 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-476空指针解引用 ○

 (NULL Pointer Dereference)



空指针引用故障(Null Pointer Dereference),也叫空指针解引用,是程序设计语言中一类常见的动态内存错误。 指针变量可以指向堆地址、静态变量和空地址单元,当引用指向空地址单元的指针变量时,就会产生空指针引用故障,有可能产生不可预见的错误,导致软件系统崩溃。

以下代码是一个空指针解引用的简单示例


W-AVC对空指针解引用的识别

在下面的这段C代码中,我们从用户获取IP地址,验证其格式是否正确,然后查找主机名并将其复制到缓冲区中。

然而,在这段代码中,如果攻击者提供了一个格式良好的地址,但该地址不能解析为主机名,那么对gethostbyaddr()的调用将返回NULL。由于代码没有检查gethostbyaddr的返回值,因此在调用strcpy()时将发生NULL指针解引用漏洞。

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

这份基准文件中声明了函数的入参,并对长度len做了一个预设,同时限制user_supplied_addr指针非空。在得到的报告中,我们得到了多个关于指针引用错误。其中第一个错误为空指针解引用错误。

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

在这个反例中,验证器构造了gethostbyaddr()函数返回值为NULL,从而在执行hp->h_name时引起空指针解引用错误。




 ○ W-AVC介绍 ○

(Introduction Of W-AVC)



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

申请试用:

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



END





NEWS