本系列文章将对全球知名的安全漏洞数据库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指针解引用漏洞。
咨询热线:18358509111 运营中心:400-675-8118
E-mail:wangan@wonsec.com 邮政编码:312000
地址:浙江省绍兴市柯桥区齐贤街道柯桥经济技术开发区西环路586号科创大厦A座507-508
版权所有 Copyright ©2019-2020 浙江望安科技有限公司 网络备案号:浙ICP备19042838号-1