如何实现C++程序释放后使用导致的漏洞分析

1、释放后使用

当动态分配的内存释放时,该内存的内容是不确定的,有可能保持完整并可以被访问,因为什么时候重新分配或回收释放的内存块是内存管理程序决定的,但是,也可能该内存的内容已经被改变,导致意外的程序行为。因此,当内存释放之后,保证不再对它进行写入或读取。

2、 释放后使用的危害

由内存管理不当导致的问题是 C/C++ 程序中常见的漏洞。释放后使用会导致可被利用的潜在风险,包括程序异常终止、任意代码执行和拒绝服务攻击等。2018年1月至11月,CVE 中共有134条漏洞信息与其相关。部分漏洞如下:

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、示例代码

示例源于 Samate Juliet TestSuite for C/C++ v1.3 (https://samate.nist.gov/SARD/testsuite.php),源文件名:CWE416_Use_After_Free__malloc_free_char_01.c。

3.1缺陷代码

如何实现C++程序释放后使用导致的漏洞分析

使用360代码卫士对上述示例代码进行检测,可以检出“释放后使用”缺陷,显示等级为高。如图1所示:

如何实现C++程序释放后使用导致的漏洞分析

图1:释放后使用检测示例

3.2 修复代码

如何实现C++程序释放后使用导致的漏洞分析

在上述修复代码中,Samate 给出的修复方式为:在第30行使用 malloc()进行内存分配,并在第36行处使用 free() 进行释放,释放后不在对该内存进行其他操作。

使用360代码卫士对修复后的代码进行检测,可以看到已不存在“释放后使用”缺陷。如图2:

如何实现C++程序释放后使用导致的漏洞分析

图2:修复后检测结果

4 、如何避免释放后使用

要避免释放后使用,需要注意以下几点:

(1) 释放内存时请务必置空指针,虽然这种方法针对多重或复杂数据结构利用的有效性有限,但可以从一定程度上规避一部分问题。

(2) 在循环语句中进行内存分配或释放时,需谨慎确认是否存在问题。

(3) 使用源代码静态分析工具进行自动化的检测,可以有效的发现源代码中的释放后使用问题。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

文章标题:如何实现C++程序释放后使用导致的漏洞分析,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/27283

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月20日 上午12:14
下一篇 2022年9月20日 上午12:15

相关推荐

  • jquery如何实现div渐隐效果

    三种实现方法:1、用fadeOut()逐渐改变被选元素的不透明度,从可见到隐藏,语法“元素对象.fadeIn(渐隐时长)”;2、用fadeTo()逐渐改变被选元素的不透明度,语法“元素对象.fadeTo(渐隐时长,0)”;3、用fadeToggle()逐渐改变被选元素的不透明度,语法“元素对象.fa…

    2022年9月16日
    74600
  • windows realtek高清晰音频管理器怎么设置

    realtek高清晰音频管理器有什么用: 答:realtek高清晰音频管理器可以进行音频管理, 从而去发挥声卡的功能。 还可以去进行管理比如麦克风,耳机, 音响的音量,增益 、特效调节。 realtek设置方法: 1、在win10系统中打开控制面板,以小图标的方式查看,点击Realtek高清晰音频管…

    2022年9月24日
    1.4K00
  • MySQL安装常见报错怎么处理

    1.无法启动处理,错误1053 Windows 无法启动Mysql服务 错误1053:服务没有及时响应启动或控制请求 1.1 结束进程 处理方法: 1、在命令行中敲入tasklist查看进程 2、根据进程名杀死进程 taskkill /f /t /im 进程名称 1.2 更改网络服务 Server2…

    2022年9月15日
    95400
  • windows中360桌面助手如何整理桌面

    360桌面助手整理桌面方法: 1、首先打开自己的桌面选择空白处右击。 2、然后在弹出的菜单中点击“桌面助手”。 3、之后选择右侧菜单中的“一键整理桌面”。 4、最后就可以将桌面全部的整理完成了。 感谢各位的阅读,以上就是“windows中360桌面助手如何整理桌面”的内容了,经过本文的学习后,相信大…

    2022年8月31日
    66000
  • 使用Redis如何实现分布式锁

    1. 什么是分布式锁 当我们在编写多线程代码的时候,不同的线程可能会发生资源的争夺,为了避免资源争夺造成的错误,我们会对资源上锁,只有获得锁的线程才能继续往下执行。 进程中的锁,本质就是内存中一个变量,当一个线程执行某个操作申请加锁时,如果能成功把代表锁的变量值设置为1,则表示获得了锁,其他线程想要…

    2022年9月8日
    54800
  • vlookup函数显示溢出怎么解决

    解决方法 1、一般来说,提示查找错误都是因为没有正确选择对象。 2、例如上述情况,输入的函数为“=VLOOKUP(F:F,A:B,2,0)”导致出错。 3、这时候,我们只需要将函数改为“=VLOOKUP(F2,A:B,2,0)”即可解决问题。 4、如果遇到这类问题,较好的方法就是删除该函数,按照正确…

    2022年9月22日
    6.4K00
  • pr视频怎么导出为手机视频大小

    pr视频导出为手机视频大小的方法: 1、首先,我们点击左上角“文件”并新建一个“项目” 2、新建后,右键空白处,选择“新建”一个“序列” 3、然后进入“设置”,根据图示参数进行设置,最重要的是设置“垂直比9:16” (手机常用的大小有360×640、750×1334、720&#2…

    2022年8月31日
    98300
  • 前端node Session和JWT鉴权登录怎么实现

    服务端渲染及session鉴权 服务端渲染 服务端渲染简单来说就是前端页面是由服务器通过字符串拼接动态生成的,客户端不需要额外通过Ajax请求参数,只需要做好渲染工作即可。 优点 前端耗时少,前端只需要请求一次接口就能将数据渲染出来,首屏加载速度变快。 利于SEO,因为服务器端相应的是完整的html…

    2022年9月21日
    80600
  • XML外部实体注入漏洞的示例分析

    一、XML外部实体注入 XML 外部实体注入漏洞也就是我们常说的 XXE 漏洞。XML 作为一种使用较为广泛的数据传输格式,很多应用程序都包含有处理 xml 数据的代码,默认情况下,许多过时的或配置不当的 XML 处理器都会对外部实体进行引用。 如果攻击者可以上传 XML 文档或者在 XML 文档中…

    2022年9月20日
    1.2K00
  • vlookup函数怎么匹配两个条件

    vlookup函数匹配两个表格的方法 对比两个表格数据 我们先来看一下这两个表格的数据,为了方便大家查看,小编将两个表格的数据放在了一张图片上 位于左边的是生产计划表的数据,而位于右边的则是库存表的数据。对比两个表格我们可以发现,两个表格中虽然产品品种一样 但是顺序不一样,在数据量少的时候可以通过人…

    2022年9月21日
    1.1K00
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部