草庐IT

缓冲区溢出漏洞分析技术研究进展

国名老公阿航 2023-03-28 原文

一.缓冲区溢出攻击步骤:

  1. 注入攻击代码
  2. 跳转到攻击代码(核心环节)
  3. 执行攻击代码

二.缓冲区溢出按照所攻击对象的不同可分为 3 类

  1. 破坏栈数据

    ​ 改变 RETADDR 的值,使其存放已经注入到栈中的攻击代码的地址或者是代码区中某些具有特权的系统函数地址(比如 system)。

  2. 破坏堆数据

  3. 更改类函数指针

三.缓冲区溢出漏洞分析技术

  1. 漏洞自动检测技术

    • 静态检测按照对模型节点的遍历方法分类
      1. 正向分析:指从可能发生缓冲区溢出漏洞的源节点出发,正向遍历模型中的节点,在遍历的过程中生成相应约束或提取部分属性进行分析的分析方法。
      2. 逆向分析:指从可能发生缓冲区溢出漏洞的槽 (sink)节点出发,逆向遍历模型中的节点,在遍历的过程中生成相应约束或提取部分属性进行分析的方法。
      3. 无向分析:指在分析过程中不考虑节点的前驱节点、后继节点和到达节点的条件等语义信息,只考虑节点自身的语法信息进行分析的方法。
    • 静态检测按技术种类,采用技术,及分析侧重点分类
      1. 基于抽象解释的缓冲区溢出漏洞静态检测技术
      2. 基于符号执行的缓冲区溢出漏洞静态检测技术
      3. 基于污染传播的缓冲区溢出漏洞静态检测技术
      4. 基于特征分类的缓冲区溢出漏洞静态检测技术
  2. 漏洞自动修复技术

    • 漏洞修复技术可按 照修复策略的复杂程度分为 3 种

      1. 采用简单修复策略的缓冲区溢出漏洞修复技术

        在进行溢出漏洞修复时,只采取 1 条简单常规修复策略的漏洞自动修复技术。例如,对所有要修复的对象都在访问缓冲区前加入条件判断语句,以确保访问位置在缓冲区分配大小内。

      2. 采用复合修复策略的缓冲区溢出漏洞修复技术

        在进行溢出漏洞修复时,采取多条常规修复策略的漏洞自动修复技术。例如,在修复过程中,依据不同情况采用扩充缓冲区分配大小、访问缓冲区前增加条 件判断、替换可能会发生缓冲区溢出漏洞的不安全函数操作等不同策略进行修复。

      3. 采用其他修复策略的缓冲区溢出漏洞修复技术

        对软件进行遗传变异或者其他非常规的方法对溢出漏洞进行自动修复。

  3. 漏洞运行时防护技术

    • 被动防护技术

      旨在保障内存中某些关键对象或性质完整性的防护技术。在程序运行过程中,时刻验证监控某些性质是否得到满足或者某些状态值(如栈中的返回地址或者 EBP)是否没被修改。因为时刻在验证关键对象或性质的完整性,当攻击出现时,该技术可以被动地检测到有人尝试在修改某些关键对象或者性质,并在攻击的触发下做相应的防护处理,因此称其为被动防护

      1. 插入canary

        StackGuard:该方法在函数调用栈的 RETADDRLOCVAR 之间加一个 canary 值。每次要跳转、执行到 RETADDR 对应地址的指令之前,先验证 canary 值是否改变:若 canary 值没有改变,则程序正常运行;若 canary 值发生了改变,则中断程序运行。

        为了防止攻击者伪造canary值进行攻击,生成canary值有以下3种办法:

        ​ (1) 随机产生 canary 值,以提高攻击者通过伪造 canary 值而通过完整性验证的难度。

        ​ (2) canary 值中含有字符串终止符,使得攻击者拷贝攻击载荷时无法顺利完成。

        ​ (3) 计算 canary 值和 RETADDR 的异或值,将该异或值保存到一个全局表中,在每次使用 RETADDR 值前,都要计算一遍当前 RETADDR 的值和 canary 的异或值,判断其与全局表中对应的值是否一致, 以提高攻击者构造的攻击向量通过完整性验证的难度。

        Propolice:借鉴了 StackGuard 方法.该技术与 Stackguard 不同之处主要有两点:

        ​ (1) Propolice 重排了局部变量的位置,将局部变量中的数组变量排在最高地址,这样就保障了局部变量不会被缓冲区溢出影响。

        ​ (2) 把 canary 值放在 LOCADDREBP 之间,这样不仅保护了 RETADDR 的值,还保护了 EBP 的值。

      2. 存储RETADDR

        StackShield:每次产生 RETADDR 时,就 把该值存储到一个全局的表中。每次要跳转执行前,都比较一下栈上的 RETADDR 值和全局表中的值:若相同,则程序正常执行;若不同,则中断程序执行。同时还对函数指针进行保护,每次函数指针进行解引用之前,都要判断该指针是否指向代码区:若指向代码区,则程序正常执行;若指向非代码区,则中断程序执行。

      3. 指针前后加guardzone

        LBC:首先在每个对象前后都插入一个值 guardzone。然后,用静态分析的方法选出发生算术加减的指针。接下来,每当对选出来的指针进行解引用时都进行检查,判断指针解引用对应的值是否等于 guardzone:如果不等,则程序继续运行;如果相等,则提示出现了访问错误。

      4. 低脂指针

        分配内存时,把缓冲区基地址信息、缓冲区大小信息等元信息映射到分配的指针上,从而高效地实现了对缓冲区的边界检测,防止运行时缓冲区溢出的发生。

    • 主动防护技术

      旨在保障内存中某些关键对象/性质的机密性/可用性的防护技术。攻击者要想实现攻击,必须对程序运行时的内存某些关键部分(如 EBP 的内存具体位置)布局情况了解,而如果通过某些技术手段保障了这些关键部分的机密性,让攻击者无法顺利地得到其内存位置信息,那么攻击者就很难攻击成功。主动地保障关键对象/性质的机密性/可 用性,在程序运行时已经对内存布局进行修改或者对函数使用做了替换,提高了攻击者预测具体内存 信息的难度(保障机密性)或者无法利用不安全的函数(保障可用性)。

      1. 更换动态链接库

        LibSafe:对于含有容易被攻击者所利用的类似 strcpysprintf 等易发生缓冲区溢出的函数的动态函数链接库进行替换,将其替换成相对应的提供缓冲区边界检测的安全的动态函数链接库。

      2. 加密指针型数据

        PointGuard:对指针型数据进行加密后再将其存放在内存中,指针解引用前再在寄存器中解密。这样即使攻击者通过利用缓冲区溢出漏洞修改了内存中的指针数据,解密后的指针指向的真正内存位置也不会是攻击者预想的位置。

      3. 随机化内存地址

        ASLR:对堆、栈、数据段等内存地址的随机化,增加攻击者预测目的地址的难度,提高了缓冲区溢出攻击的难度,同时降低了利用缓冲区溢出漏洞的病毒的传播速度。

      4. 去堆栈布局可预测性

        StackArmor:通过对逻辑栈帧先分割再置换的方式,彻底地打乱栈帧内变量和变量的分配位置信息、栈帧和栈帧间的位置信息,达到不让逻辑上相邻的栈空间内存在物理上相邻的目的,使得每个栈帧对象地址难以预测。

有关缓冲区溢出漏洞分析技术研究进展的更多相关文章

  1. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  2. MIMO-OFDM无线通信技术及MATLAB实现(1)无线信道:传播和衰落 - 2

     MIMO技术的优缺点优点通过下面三个增益来总体概括:阵列增益。阵列增益是指由于接收机通过对接收信号的相干合并而活得的平均SNR的提高。在发射机不知道信道信息的情况下,MIMO系统可以获得的阵列增益与接收天线数成正比复用增益。在采用空间复用方案的MIMO系统中,可以获得复用增益,即信道容量成倍增加。信道容量的增加与min(Nt,Nr)成正比分集增益。在采用空间分集方案的MIMO系统中,可以获得分集增益,即可靠性性能的改善。分集增益用独立衰落支路数来描述,即分集指数。在使用了空时编码的MIMO系统中,由于接收天线或发射天线之间的间距较远,可认为它们各自的大尺度衰落是相互独立的,因此分布式MIMO

  3. ruby-on-rails - 用于门户的 Ruby 技术 - 2

    我刚刚看到whitehouse.gov正在使用drupal作为CMS和门户技术。drupal的优点之一似乎是很容易添加插件,而且编程最少,即重新发明轮子最少。这实际上正是Ruby-on-Rails的DRY理念。所以:drupal的缺点是什么?Rails或其他基于Ruby的技术有哪些不符合whitehouse.org(或其他CMS门户)门户技术的资格? 最佳答案 Whatarethedrawbacksofdrupal?对于Ruby和Rails,这确实是一个相当主观的问题。Drupal是一个可靠的内容管理选项,非常适合面向社区的站点。它

  4. 建模分析 | 平面2R机器人(二连杆)运动学与动力学建模(附Matlab仿真) - 2

    目录0专栏介绍1平面2R机器人概述2运动学建模2.1正运动学模型2.2逆运动学模型2.3机器人运动学仿真3动力学建模3.1计算动能3.2势能计算与动力学方程3.3动力学仿真0专栏介绍?附C++/Python/Matlab全套代码?课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。?详情:图解自动驾驶中的运动规划(MotionPlanning),附几十种规划算法1平面2R机器人概述如图1所示为本文的研究本体——平面2R机器人。对参数进行如下定义:机器人广义坐标

  5. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

  6. 网站日志分析软件--让网站日志分析工作变得更简单 - 2

    网站的日志分析,是seo优化不可忽视的一门功课,但网站越大,每天产生的日志就越大,大站一天都可以产生几个G的网站日志,如果光靠肉眼去分析,那可能看到猴年马月都看不完,因此借助网站日志分析工具去分析网站日志,那将会使网站日志分析工作变得更简单。下面推荐两款网站日志分析软件。第一款:逆火网站日志分析器逆火网站日志分析器是一款功能全面的网站服务器日志分析软件。通过分析网站的日志文件,不仅能够精准的知道网站的访问量、网站的访问来源,网站的广告点击,访客的地区统计,搜索引擎关键字查询等,还能够一次性分析多个网站的日志文件,让你轻松管理网站。逆火网站日志分析器下载地址:https://pan.baidu.

  7. ABB-IRB-1200运动学分析MATLAB RVC工具分析+Simulink-Adams联合仿真 - 2

    一、机器人介绍        此处是基于MATLABRVC工具箱,对ABB-IRB-1200型号的微型机械臂进行正逆向运动学分析,并利Simulink工具实现对机械臂进行具有动力学参数的末端轨迹规划仿真,最后根据机械模型设计Simulink-Adams联合仿真。 图1.ABBIRB 1200尺寸参数示意图ABBIRB 1200提供的两种型号广泛适用于各作业,且两者间零部件通用,两种型号的工作范围分别为700 mm 和 900 mm,大有效负载分别为 7 kg 和5 kg。 IRB 1200 能够在狭小空间内能发挥其工作范围与性能优势,具有全新的设计、小型化的体积、高效的性能、易于集成、便捷的接

  8. 关于Qt程序打包后运行库依赖的常见问题分析及解决方法 - 2

    目录一.大致如下常见问题:(1)找不到程序所依赖的Qt库version`Qt_5'notfound(requiredby(2)CouldnotLoadtheQtplatformplugin"xcb"in""eventhoughitwasfound(3)打包到在不同的linux系统下,或者打包到高版本的相同系统下,运行程序时,直接提示段错误即segmentationfault,或者Illegalinstruction(coredumped)非法指令(4)ldd应用程序或者库,查看运行所依赖的库时,直接报段错误二.问题逐个分析,得出解决方法:(1)找不到程序所依赖的Qt库version`Qt_5'

  9. ruby-on-rails - 如何使用 ruby​​-prof 和 JMeter 分析 Rails - 2

    我想使用ruby​​-prof和JMeter分析Rails应用程序。我对分析特定Controller/操作/或模型方法的建议方法不感兴趣,我想分析完整堆栈,从上到下。所以我运行这样的东西:RAILS_ENV=productionruby-prof-fprof.outscript/server>/dev/null然后我在上面运行我的JMeter测试计划。然而,问题是使用CTRL+C或SIGKILL中断它也会在ruby​​-prof可以写入任何输出之前杀死它。如何在不中断ruby​​-prof的情况下停止mongrel服务器? 最佳答案

  10. ruby - 使用哪种群发消息技术? - 2

    我感到有点困惑——大约24小时以来,我一直在考虑在我的项目中使用哪种组播技术。基本上,我需要的是:创建组(通过一些后端进程)任意客户端广播消息(1:N,N:N)(可能)直接消息(1:1)(重要)使用我自己的后端(例如,通过某种HTTPAPI)对客户端进行身份验证/授权能够通过后端进程(或服务器插件)踢出特定的客户端这是我要的:Ruby或Haxe中的后端相关流程JS+Haxe(Flash9)中的前端—在浏览器中,因此理想情况下通过80/443进行通信,但不一定。因此,这项技术必须能够在HaxeforFlash中轻松访问,最好是Ruby。我一直在考虑:RabbitMQ(或OpenAMQ)、

随机推荐