软件漏洞自动化利用,零基础入门到精通,收藏这篇就够了

625 篇文章 28 订阅
548 篇文章 5 订阅

摘要

近年来软件漏洞数目急剧增加,漏洞危害也引起业界广泛关注. 准确、高效、快速地编写出漏洞利用代码是漏洞危害性评估和漏洞修复的关键. 当前漏洞利用代码主要依赖人工手动分析编写,效率较低. 因此,如何实现自动化的漏洞利用代码生成是该领域研究的热点和难点.

本文分析了该领域近30年的代表性成果,首先将漏洞自动化利用过程分为典型的4个环节:漏洞根源定位、可达路径搜索、漏洞原语生成、利用代码生成. 然后从人机边界、攻防博弈、共性技术3个角度对上述成果进行梳理,明确当前研究的重点、难点,以及取得的阶段性成果. 最后从现有成果与技术实用化所面临的差距方面,论述当前研究存在的瓶颈问题、未来的发展趋势,以及下一步的研究重点.

主要内容

1.将漏洞自动化利用过程分为典型的4个环节: 漏洞根源定位、可达路径搜索、漏洞原语生成、利用代码生成.

2.从人机边界、攻防博弈、共性技术3个角度对上述成果进行梳理,明确当前研究的重点、难点,以及取得的阶段性成果.

3.从现有成果与技术实用化所面临的差距方面,论述当前研究存在的瓶颈问题、未来的发展趋势,以及下一步的研究重点.

亮点图文

0. 引言

自漏洞出现以来,漏洞利用技术的研究即成为该领域研究的焦点,而漏洞自动化利用则是众多研究方向中最具挑战性的一个. 漏洞自动化利用是指由计算机自动生成一段代码,该代码可以在受害者不知道的情况下触发漏洞,完成攻击者预期行为. 本文将漏洞自动化利用过程分为4个步骤:1)分析漏洞成因,定位漏洞根源;2)确定利用点,搜索构造利用路径;3)消除副作用,编写漏洞利用原语(通常指具备攻击能力的利用单元或原子操作,表现形式为漏洞程序的一个特定输入,为具体攻击代码提供组成单元);4)突破防护机制,编写漏洞利用代码,漏洞自动化利用过程如图1所示.

本文分析了该领域近30年的研究成果,重点梳理近10年在IEEE,ACM,Springer等期刊和安全会议中的代表性文献,从人机边界、攻防博弈、共性技术3个方面对成果进行归类和比较分析,尝试总结当前研究成果存在的不足,指出该领域可能的研究方向.

1. 人机边界

纵观漏洞利用技术的发展历史,凡是漏洞利用技术遇到了瓶颈问题、新漏洞类型出现亟需新的利用思路、新的防护机制亟待绕防与突破时,都依赖 “天才般”的灵感去创造新的利用技术和技巧,而人在其中起到了“化腐朽为神奇”的作用,甚至是采用“切换视角”的方式用超越该问题维度的思维去解决该问题. 虽然“人”在漏洞利用中起着最为关键的作用,但是在涉及到计算、枚举、过程存储等环节时,“计算机”也起到了重要的辅助作用. 重复性、高算力的操作由“机器”完成,决策性、高智力参与的操作由“人”完成,“智力的参与度”决定了“人”与“机器”的协作“边界”. 因此,从“人”与“计算机”在漏洞利用过程中所扮演角色的角度,可以将漏洞利用的发展过程分为2个阶段:依赖专家经验的人工漏洞利用阶段和基于模板知识的自动化漏洞利用阶段.

2. 攻防博弈

图2展示了漏洞防护技术发展阶段图,以操作系统为例,2000年以前,对漏洞利用基本处于无防护阶段,简单的缓冲区漏洞即可造成大范围的网络攻击. 2000—2010年,GS,SafeSEHR,DEP,ASLR,Safe Unlink等系统防御机制先后被提出,每一次防御机制的出现,都带来漏洞利用方法的升级. 这个阶段是攻击能力强于防御能力的阶段,可被称为“弱防护阶段”. 2010年以来,随着硬件性能的革命性提升,对用户使用体验影响较大的防御机制被操作系统默认开启,并且更加严格的内核、权限、程序控制流等保护机制也先后适配到不同的操作系统中. 漏洞利用的难度越来越大,这个阶段大有防御能力强于攻击能力的趋势,可被称为“强防护阶段”.

系统防御机制的出现,不仅给漏洞利用带来了革命性的变化,也一直是漏洞自动化利用需要克服的难题. 针对不同的系统防御机制,研究人员先后提出了多种绕过和对抗方法.

3. 共性技术

图3展示了2008—2021年的典型漏洞自动利用研究成果,图中虚线左侧的研究围绕如何在“已劫持/单步可控制劫持流”的前提下实现自动化的漏洞利用代码生成,虚线右侧的研究则围绕如何基于“代码生成与原语发现”方法进一步实现自动化的漏洞利用代码生成. 其共性技术类别可分为图3所示的7种.

依赖机器的自动化漏洞利用阶段

补丁比对技术是攻击者常用的一种方法,其主要目的在于发现那些已经修复但尚未公开披露的漏洞,即1Day漏洞. 通常,安全公告或补丁说明中不会提及漏洞产生的根本原因,这给攻击者利用漏洞带来了困难. 然而,基于二进制文件在打补丁前后的对比差异可以确定产生漏洞的位置,并结合其他漏洞分析技术,进一步确定漏洞的根本原因,最终生成能够利用该漏洞的攻击代码.

APEG尝试自动化构建漏洞利用的工作,不但该方法思路相对直接明了,而且由于其高度可操作性,因此广受研究人员的认可. 然而,APEG方法存在2个主要不足:1)无法应对在补丁程序中未添加过滤判断的情况;2)支持能够自动实现利用的漏洞类型主要为拒绝服务类漏洞利用,这种利用仅导致原程序崩溃,无法实现控制流劫持的目标.

基于数据流分析的漏洞自动化利用

数据流分析是一种信息分析技术,其目的在于获取程序执行路径上相关数据的信息. 由于程序数据流的数据依赖和控制依赖关系可能与漏洞紧密相关,因此也被用于漏洞分析. 数据流分析可对多种漏洞和缺陷进行检测分析,同时能够对其他漏洞分析方法提供支撑. 典型的基于数据流分析的自动漏洞利用工具包括AXGEN,PolyAEG,Q,HCSIFTER,Eloise,QED,ExpTracer,MinDOP等. 将数据流分析应用到漏洞自动化利用中,需要涉及对程序进行数据结构恢复. 该过程需要消除程序对寄存器、栈帧等底层环境的依赖,对函数定义、引用、参数和返回值等进行恢复. 然而,在进行二进制程序的跨平台恢复时,存在无法完全还原用户自定义过程中产生的参数、变量等数据的问题. 为解决这一问题,中国科学院的马湘宁等人于2002年提出了一种静态二进制翻译系统(XM翻译器)上的过程恢复技术. 该技术主要分为参数恢复及返回值恢复2个核心. 此外,他们还提出了一种新的简便方法来解决返回值恢复的问题,避免了传统方法中需要开展复杂的数据流和控制流分析. 该方法基于x86指令集本身的调用特性和实例进行分析,为实现返回值恢复提供了一种简单的方案. 2006年,解放军信息工程大学的付文等人针对IA64体系结构的特点及其对过程调用的相关规定进行了研究,实现了对IA64过程的恢复. 同时,在大量的实践基础上,提出了一种浮点参数恢复的优化方法. 2009年,解放军信息工程大学的方霞等人发现IA32体系结构中可执行程序在反编译过程存在寄存器参数恢复问题,并开展了针对性研究,他们基于IA32体系下的二进制函数调用约定,分析了寄存器参数的特征,并借鉴了数据流分析中的到达-定义分析和使用-定义链等经典方法. 通过利用寄存器定义和使用等信息,提出了一种识别、处理和实参恢复的寄存器参数方法.

基于符号执行的漏洞自动利用

符号执行是一类程序分析技术,它基于对程序的分析来获取触发指定区域代码执行的输入. 在符号执行中,目标程序的输入视为符号变量. 当程序执行时,数据被视为条件表达式或其他操作的等效物,它的结果被逐步表示为对输入值的约束,以确保代码按照指定路径执行. 每当代码执行存在符号值的条件检查时,将需要进行分支执行,在真实路径上增加已满足的约束,而在其他路径上添加未满足的约束. 通过使用约束求解器最终寻找满足约束的具体值,从而生成程序的测试用例. 符号执行被广泛应用于自动化领域.

基于模糊测试的漏洞自动利用

模糊测试(Fuzzing)系一种常见的软件测试技术,它的核心思想是首先自动生成或半自动生成测试样例,然后将这些样例输入到程序中,观察程序是否存在异常的行为,以发现潜在的程序错误. 安全研究人员常使用模糊测试来挖掘计算机软件或系统的安全漏洞. 经典的模糊测试流程包括3个环节:测试样例生成、崩溃状态检测和测试样例裁剪. 例如,FuzzGen,SIoTFuzzer等都是以此测试流程为基础的代表性成果. 首先,模糊测试通过变异等方法生成符合输入规范的样例,并检查测试样例中所有可修改的部分. 在执行过程中,评估测试用例的执行是否会产生可被利用的影响. 一旦探测到新的漏洞时,将其输入样本进行最小化等价替换,并生成一个包含基本操作组的PoC代码,用作证明. 基于模糊测试的自动漏洞利用的代表性工具有SHRIKE,Slake,Gollum,ArcHeap,AURORA等.

基于污点分析和符号执行相结合的漏洞自动利用

单独利用符号执行进行自动漏洞利用可能会面临路径爆炸、约束求解困难等问题,因此一些论文开始关注将污点分析与符号执行相结合进行自动漏洞利用,主要工具包括BitBlaze、扩展Avatar、NAVEX等.

基于模糊测试和符号执行相结合的漏洞自动利用

基于模糊测试与符号执行结合的自动漏洞利用代表性工具有Revery 、FUZE、Mechanical Phish、Lu等人所提工具、RELAY、KOOBE等.

为了解决程序崩溃现场无法利用的问题,Wang等人在2018年提出了一种名为Revery的自动化漏洞利用. Revery利用模糊测试技术来寻找漏洞可利用状态的等效路径,并使用关键的内存操作指令来定位漏洞点. 随后,Revery通过污点分析技术在等效路径中寻找可利用的状态. 最后运用符号执行技术求解路径约束和漏洞利用约束等条件,以生成漏洞利用方案.

其他可行的技术途径
   还有一些自动漏洞利用工具未使用上述方法,此处进行集中论述,代表性工具有!exploitable,WAPTEC,KernelPET,BOPC,SQLMi,GuideExp,Autosploit,EXPRACE等.

不足与展望

本文从现有成果与技术实用化所面临的差距方面,总结2个方面的不足:

1)从共性技术方法的实际能力来看,漏洞根源定位不准制约了全链自动化的实现. 如图4所示,当前主流的漏洞自动化利用技术往往是基于异常点(crash point)的分析,生成一条从异常点到利用点的路径(如B→C→D1). 但是实际应用时,需要构造一条从漏洞根源到达攻击点的路径(如A→B→C→D1→E),难以实现全链的自动化利用. 导致这种现象的主要原因是:程序深度理解、漏洞根源定位等基础性难题未得到有效解决.


2)从系统防御机制突破的自动化程度来看,现有方法难以实现复杂防御机制的突破. 漏洞自动利用的本质是可利用路径下的复杂约束条件求解. 现有的自动化生成均是在受限路径上的探索和规划,如现有的CRAX[12],Revery[14]等工具均可实现DEP机制的绕过,但是需要关闭ASLR,CFI等系统防御机制,降低约束条件求解的难度. 在真实场景下,该类“强约束”条件不仅无法满足,往往更加苛刻,如对漏洞利用代码的时效性等均有更高的要求. 使用现有基于异常点的漏洞自动化利用技术,“输入空间”受限,难以求解出满足“强约束”条件的输入,更无法实现复杂防御机制的突破.

因此,从满足处理复杂结构软件对象,以及实现复杂类型漏洞的自动化利用的目标来看,未来需要重点围绕2个方面展开研究:

1)如何提高漏洞成因深度分析能力,实现复杂场景下的漏洞可利用性判定. 现有研究成果难以实现漏洞利用过程的全链自动化,其根本原因是无法准确定位漏洞触发的根源点(root-cause). 漏洞根源直接反映了漏洞成因和漏洞的可利用性. 但是对于复杂结构软件、复杂类型漏洞,准确定位漏洞根源面临数据结构还原、代码控制流逆向等难题. 因此,以漏洞根源定位为核心的漏洞成因深度分析方向会是未来该领域研究的重点.

2)研究如何提高约束求解能力,实现非线性条件下的路径约束条件的准确求解. 现有研究成果难以实现复杂防御机制的突破,其中一个关键因素是约束求解能力有限. 结合符号执行和约束求解的漏洞自动化利用技术是目前最为主流的技术,但是受限于目前约束求解方法的算力,难以准确求解出非线性条件下的复杂约束. 因此,作为一个基础性难题,该问题的研究是无法绕过的一个研究方向.

总结

本文综述了漏洞自动化利用技术的研究成果,将漏洞自动化利用分为典型的4个步骤:漏洞根源定位、可达路径搜索、漏洞原语生成、利用代码生成. 从人机边界、攻防博弈、共性技术3个角度分别对当前代表性成果进行论述,阐述每个成果的技术思路和适用对象. 从技术实用化的角度,对当前研究总结了2个方面的不足,提出了2个研究方向. 漏洞自动化利用是漏洞领域研究中最具挑战性,也最能体现研究价值的方向,该领域新思路、新方法、新技术的出现,必将有力推动漏洞研究领域的进步.

为了帮助大家更好的学习网络安全,我给大家准备了一份网络安全入门/进阶学习资料,里面的内容都是适合零基础小白的笔记和资料,不懂编程也能听懂、看懂这些资料!

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]


在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]
在这里插入图片描述

在这里插入图片描述

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

[2024最新CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值