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



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


在本篇中,我们将介绍C语言算术运算中的溢出或环绕问题CWE-190),及其在W-AVC中的验证示例。


栏目往期回顾:

CWE-787 越界写入

CWE-416 释放后引用

CWE-476 空指针解引用







 ○ 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-190溢出或环绕 ○

 (Overflow or Wraparound)



当整数值增加到太大而无法存储时,会发生整数溢出或环绕。发生这种情况时,该值可能会变成一个非常小的数字或负数。虽然这可能是某些算法的预期行为,但如果是意外的,则可能会产生安全后果。尤其是计算的结果用于控制循环、做出安全决策,或者用于确定内存分配、复制、连接等行为中的偏移量或大小时,将会引发严重的安全问题。


W-AVC对溢出或环绕的识别

示例一:无符号数环绕

在下方代码中,get_num_imgs函数的返回值可能是任意整型,在第4行中该值用于计算malloc分配的内存大小,此时该值会自动转为无符号数。如果计算的结果溢出,发生了环绕,则会导致分配的内存小于预期。

为了验证,我们对get_num_imgs函数做一个插桩:

验证结果显示覆盖率100%,证明我们验证了全部的代码。在验证报告中检测出了两个错误,都是发生在同一行,一个是num_imgs从有符号数转为无符号数时的溢出,另一个时转换类型后乘法计算的溢出。


示例二:有符号数的溢出

下方是一个计算一季度总收入的函数,其中第12行对前三月销量进行了汇总,如果结果超过short的表示范围,则可能产生溢出。

类似示例一,我们可以对getMonthlySales函数进行插桩,并在W-AVC中验证。 通过验证,检查出以下溢出错误:




 ○ W-AVC介绍 ○

(Introduction Of W-AVC)



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

申请试用:

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



END




NEWS