如何实现C++程序释放后使用导致的漏洞分析
时间:2023-05-13 04:18
当动态分配的内存释放时,该内存的内容是不确定的,有可能保持完整并可以被访问,因为什么时候重新分配或回收释放的内存块是内存管理程序决定的,但是,也可能该内存的内容已经被改变,导致意外的程序行为。因此,当内存释放之后,保证不再对它进行写入或读取。 由内存管理不当导致的问题是 C/C++ 程序中常见的漏洞。释放后使用会导致可被利用的潜在风险,包括程序异常终止、任意代码执行和拒绝服务攻击等。2018年1月至11月,CVE 中共有134条漏洞信息与其相关。部分漏洞如下: 示例源于 Samate Juliet TestSuite for C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE416_Use_After_Free__malloc_free_char_01.c。 使用360代码卫士对上述示例代码进行检测,可以检出“释放后使用”缺陷,显示等级为高。如图1所示: 图1:释放后使用检测示例 在上述修复代码中,Samate 给出的修复方式为:在第30行使用 malloc()进行内存分配,并在第36行处使用 free() 进行释放,释放后不在对该内存进行其他操作。 使用360代码卫士对修复后的代码进行检测,可以看到已不存在“释放后使用”缺陷。如图2: 图2:修复后检测结果 要避免释放后使用,需要注意以下几点: (1) 释放内存时请务必置空指针,虽然这种方法针对多重或复杂数据结构利用的有效性有限,但可以从一定程度上规避一部分问题。 (2) 在循环语句中进行内存分配或释放时,需谨慎确认是否存在问题。 (3) 使用源代码静态分析工具进行自动化的检测,可以有效的发现源代码中的释放后使用问题。 以上就是如何实现C++程序释放后使用导致的漏洞分析的详细内容,更多请关注Gxl网其它相关文章!1、释放后使用
2、 释放后使用的危害
CVE 漏洞概述 CVE-2018-1000051 Artifex Mupdf 版本的 fz_keep_key_storable 中存在一个释放后使用漏洞,可导致拒绝服务或代码执行问题。通过诱骗受害者打开一个特殊构造的 PDF 文件,该漏洞即可遭利用。 CVE-2018-17474 谷歌 Chrome 浏览器70.0.3538.67 之前版本 Blink 引擎的 HTMLImportsController 中存在一个释放后使用漏洞,很有可能导致远程攻击者通过一个特殊构造的 HTML 页面利用堆损坏问题。 CVE-2018-15924 Adobe Acrobat 和 Reader 2018.011.20063及之前版本、2017.011.30102 及之前版本、2015.006.30452 及之前版本中存在释放后使用漏洞。远程攻击者可利用该漏洞执行任意代码。 3、示例代码
3.1缺陷代码
3.2 修复代码
4 、如何避免释放后使用