一种面向CiscoIOS的ROP攻击定位与代码捕获方法

文档序号:27400882发布日期:2021-11-15 23:26阅读:100来源:国知局
一种面向ciscoios的rop攻击定位与代码捕获方法
技术领域
:1.本发明属于网络设备安全
技术领域
:,具体涉及一种面向ciscoios的rop攻击定位与代码捕获方法。
背景技术
::2.cisco网络设备安全的核心是cisco操作系统(internetworkoperatingsystem,ciscoios,简称ios)安全。近年来ciscoios不断曝出存在安全问题,攻击者利用ciscoios漏洞可以在未授权的情况下取得对cisco路由器设备的控制,实现对目标网络的监听和窃密,对网络安全造成严重威胁。3.在诸多漏洞攻击中,缓冲区溢出一直是引发应用程序安全问题的重要原因。面向返回地址的编程(return‑orientedprograming,rop)作为缓冲区溢出攻击的主流方法,已经被证明是图灵完备的。首先在程序代码中寻找带有特殊内存操作指令的短小代码片段gadget,通过控制函数返回地址跳转将gadget串联为一段具有完整逻辑功能的程序块以达到攻击目的。由于硬件条件和程序设计的限制,ciscoios对rop攻击的保护存在缺陷容易被绕过。4.通常有以下几种方法可以用于防止或检测rop攻击,但也都存在相应的缺陷。5.1、aslr技术地址空间布局随机化(addressspacelayoutrandomization,aslr)技术通过对进程的堆、栈、代码、共享库等地址在程序每次运行的时候进行随机化,能够极大地增加攻击者分析定位代码正确位置的难度。但是实际上aslr并不是绝对的,尤其是在实现上,各模块的内部结构依然相对固定,或者存在一定的关联关系,攻击者可以通过未启用的aslr部分或者不彻底的随机化部分实现同样的攻击效果。6.2、栈金丝雀值在函数调用时向返回地址前插入一个随机整数(金丝雀值),在函数返回时检查这些值是否改变,以此判断程序执行流是否发生改变。缺点是只考虑了栈溢出的顺序覆盖问题,而不是真正检查返回地址的篡改情况,利用泄漏金丝雀值的方法能够绕过该保护机制。7.3、程序控制流完整性检查程序控制流完整性(control‑flowintegrity,cfi),思想为构建程序运行控制流图,将程序运行限制在合法的范围内。分为有状态和无状态两种,无状态的控制流即为构建合法返回集合,而不去考虑实际函数的调用,容易遭受控制流弯曲攻击。有状态的控制流记录需要通过分支记录等技术保存上下文敏感信息,严重消耗硬件不适合绝大多数场景。8.4、影子栈维护一块相对独立的内存作为程序的栈空间副本,当函数返回时通过对比返回地址与影子栈中的地址的一致性来检测rop攻击。在设计实现上通常分为两种类型:平行影子栈和紧凑型影子栈。平行影子栈通过内存空间完全备份的方法实现完整性检查,优点是实现简单维护方便,缺点是内存消耗大,影子内存空间容易被攻击者发现并篡改。紧凑型影子栈只记录返回地址部分,优点是内存开销少,缺点是需要维护影子栈与程序栈的一致性,对于setjmp/longjmp和c++异常处理的不规则栈展开无法做到完全匹配,在调整影子栈指针时会带来额外开销,基于此,研究一种面向ciscoios的rop攻击定位与代码捕获方法是必要的。技术实现要素:9.针对传统的rop防护技术在解决ciscoios防护上存在的缺陷,提出了一种面向ciscoios的rop攻击定位与代码捕获方法,基于返回地址内存哈希验证的方法,能够对面向ciscoios的rop攻击有效检测,并对rop攻击代码进行捕获。10.本发明解决其技术问题所采用的方案是:一种面向ciscoios的rop攻击定位与代码捕获方法,包括如下内容:(1)动态截获ciscoios运行指令;利用虚拟化模拟路由器模拟ciscoios的执行环境,在在模拟路由器cpu指令执行过程中加入指令截获模块,对cpu运行状态进行动态跟踪,并截获ciscoios运行指令;(2)动态记录合法返回地址;构造哈希表用来记录程序运行的合法返回地址信息,合法返回地址信息包括:1)发生子函数调用时,ios程序执行返回地址入栈操作的栈内存指针point;2)实际入栈的合法返回地址ret;哈希记录过程如下:1)进行指令识别,如果为返回地址入栈指令,对入栈的point做哈希变换,得到返回地址ret在哈希表(hashtable1)中的实际存储位置index,哈希变化方式如下:2‑12)将合法返回地址ret进行哈希加密得到value值存储在hashtable1中index的位置,加密方式如下:ꢀꢀ2‑2(3)rop攻击判定和定位;1)进行指令识别,如果为返回地址入栈指令跳转到步骤2;如果为返回地址出栈指令跳转到步骤3;如果为返回地址跳转指令跳转到4;否则不做处理继续执行;2)根据哈希变换和哈希加密计算当前index和value的值并在哈希表中的index位置存储value,进行合法返回地址信息的存储;3)将此时返回地址出栈指令中的point和ret缓存到变量point'和ret'中,保持point'和ret'这两个值始终由最近一次的返回地址出栈指令得出;4)判断跳转指令地址jret与缓冲区中的ret'是否相等,如果相等,说明当前函数返回跳转的jret值来自栈空间保存的返回地址,即需要验证的返回地址,转至5);如果不相等,说明jret跳转为叶子函数的返回地址,不需要验证,转至8)。11.5)尝试在哈希表中hash1(point')位置处取出value并判断value是否存在;如果存在,进行下一步判断,转至6);如果不存在,说明遭受rop攻击转至8)。12.6)比较value的值是否与hash2(ret')相等。如果相等,说明此次为正常返回转至7);否则说明返回地址发生篡改,转至8)。13.7)删除哈希表中该次返回地址的副本,继续执行指令;8)继续执行指令;(4)攻击代码捕获:判定攻击发生后启动攻击代码捕获流程,攻击代码捕获步骤如下:1)初始时ropflag置0;2)判断当前返回地址是否正常,是转到3),否转到4);3)判断ropflag是否为1;如果是,说明当前正处于rop攻击中,此时为停止攻击信号,将ropflag置0;如果否,说明当前未处于rop攻击中,则不做处理继续执行指令;4)判断ropflag是否为0。如果是,说明当前未处于rop攻击中,此时为rop开始攻击信号,将ropflag置1;如果否,说明当前正处于rop攻击当中,攻击记录已经开始,则不做处理继续执行指令;其中ropflag为当前是否遭受rop攻击的标志,0表示未遭受攻击,1表示处于rop攻击过程中。,进一步的,哈希表的存储结构采用链地址法。14.进一步的,在子函数调用前,执行返回地址入栈时,定义存储返回地址的栈内存指针为point,实际入栈的返回地址值为ret,即子函数合法返回地址;则在mips和power两种平台架构下的point和ret分别由式(1‑1)和式(1‑2)计算得出:ꢀꢀ(1‑1)ꢀꢀ(1‑2)其中xx为内存偏移值,sp、r1分别为mips平台和powerpc平台中栈寄存器地址寄存器的值;ra、r0分别为为mips平台和powerpc平台中返回地址寄存器的值;在子函数返回前,返回地址出栈时,定义存储返回地址的栈内存指针为point',实际出栈的返回地址值为ret'。15.则在mips和power两种平台架构下的point'和ret'分别由式(1‑3)和式(1‑4)计算得出:ꢀꢀ(1‑3)ꢀꢀ(1‑4)定义子函数返回跳转的目的返回地址jret,则在mips和power两种平台架构下的jret由式(3)计算得出:ꢀꢀ(1‑5)进一步的,rop攻击判定时,经过hash加密后的point与相等且加密后的ret与相等,否则为遭受rop攻击,具体判断公式为(index==hash1(point'))&&(value==hash2(ret'))ꢀꢀ(3‑1)。16.本发明的有益效果:1、返回地址副本的安全性高与影子栈类似,本发明将合法的返回地址副本作为rop攻击检测依据。不同的是在影子栈的实现中,如果副本内存在泄漏,即攻击者能够通过同时篡改返回地址和验证副本的值来实现对影子栈的绕过。在本发明中由于对函数合法返回地址进行了hash,即副本中存储的是hash加密后的函数返回地址,使得攻击者无法通过分析内存中的函数合法返回地址来定位副本中合法返回地址的存储位置信息,也就无法在合法的存储位置上篡改返回地址,从而保证了返回地址副本的安全可靠。17.2、查找速度快当紧凑型影子栈遇到程序异常时,为了能够验证地址的合法性,通常做法是遍历影子栈直到找到与之匹配的返回地址为止,这会带来极大开销。本发明采用hash计算直接定位内存的方法进行查表,在没有碰撞的情况下只需一次查表,较大的提高了查表性能。18.3、通用性好本发明为动态检测,不需要对ios进行前置静态分析,不需要提前构建合法的函数返回地址集合,不存在静态分析构建合法集合不准确的问题,不存在aslr开启后静态分析前置条件信息缺失导致无法检测的问题。相对于紧凑型影子栈无法有效应对setjmp/longjmp等异常处理,本发明采用内存地址和返回地址双认证,解决了因中断异常等造成的影子栈错序问题,不需要实时维护副本与程序栈帧的对应,因此对异常处理也具有适用性。19.本发明通过在紧凑型影子内存防护思想的基础上,将传统的影子内存的存储模式改造为基于哈希的内存查找模式,增加了返回地址内存指针的记录作为哈希查找的索引,提高了影子内存查找效率,同时能够抵御由于内存泄漏导致的影子内存篡改。附图说明20.图1为rop攻击定位流程图。21.图2为一次rop攻击示例图。22.图3为攻击代码捕获流程图。23.图4为检测系统架构图。24.图5为测试环境示意图。25.图6为用ida解析“c1700‑entbase‑mz.124‑5”ios固件在相关位置的攻击代码片段。26.图7为系统对该次rop攻击的检测及代码捕获的告警信息。27.图8为攻击检测结果图。28.图9为时间消耗比的测试结果示意图。具体实施方式29.下面结合附图和实施例对本发明进一步说明。30.实施例1:本实施例旨在提供一种面向ciscoios的rop攻击定位与代码捕获方法,主要基于内存哈希验证的动态检测方法,针对传统的rop防护技术在解决ciscoios防护上存在的缺陷,提出了一种基于返回地址内存哈希验证的方法,能够对面向ciscoios的rop攻击有效检测,并对rop攻击代码进行捕获。31.本实施例中具体包括如下内容;(1)动态截获ciscoios运行指令;采用虚拟化方案模拟ciscoios的执行环境,模拟软件选择cisco路由器开源模拟器dynamips。在模拟路由器cpu指令执行过程中加入指令截获模块,对cpu运行状态进行动态跟踪。32.ciscoios函数调用与返回的符号化,并进行以下定义;定义1:在子函数调用前,执行返回地址入栈时,存储返回地址的栈内存指针为point,实际入栈的返回地址值为ret,即子函数合法返回地址。33.则在mips和power两种平台架构下的point和ret分别由式(1‑1)和式(1‑2)计算得出:ꢀꢀ(1‑1)ꢀꢀ(1‑2)其中xx为内存偏移值,sp、r1分别为mips平台和powerpc平台中栈寄存器地址寄存器的值;ra、r0分别为为mips平台和powerpc平台中返回地址寄存器的值,下同。34.定义2:在子函数返回前,返回地址出栈时,存储返回地址的栈内存指针为point',实际出栈的返回地址值为ret'。35.则在mips和power两种平台架构下的point'和ret'分别由式(1‑3)和式(1‑4)计算得出:ꢀꢀ(1‑3)ꢀꢀ(1‑4)定义3:子函数返回跳转的目的返回地址jret,则在mips和power两种平台架构下的jret由式(1‑5)计算得出:ꢀꢀ(1‑5)(2)动态记录合法返回地址;构造哈希表用来记录程序运行的合法返回地址信息,合法返回地址信息包括:1)发生子函数调用时,ios程序执行返回地址入栈操作的栈内存指针point;2)实际入栈的合法返回地址ret;哈希记录过程如下:1)进行指令识别,如果为返回地址入栈指令,对入栈的point做哈希变换,得到返回地址ret在哈希表(hashtable1)中的实际存储位置index,哈希变化方式如下:ꢀꢀ(2‑1)2)将合法返回地址ret进行哈希加密得到value值存储在hashtable1中index的位置,加密方式如下:ꢀꢀ(2‑2)利用哈希表作为函数返回地址副本对point和ret进行记录,采用链地址法避免hash冲突,index为哈希表中数据的存放位置索引,在这里通过hash1函数对point进行哈希计算得出;value为哈希表中index位置处的值,通过对正常函数返回地址ret做哈希hash2后得出(3)rop攻击判定和定位;rop攻击定位的目标是要找到出现函数非法返回时的程序运行地址,并记录当前函数的非法返回地址。思路为当程序运行到函数调时构造合法返回地址副本,当程序运行到需要返回时进行返回地址的验证,如果出现不一致,则此时的程序运行地址和函数返回地址即为所求。36.其中合法返回地址副本包含当前的栈内存指针point,和实际入栈的返回地址值,所组成的键值对。37.函数合法返回的判断依据为算式3‑1为真,即同时满足point与point'相等且ret与ret'相等,否则为遭受rop攻击。38.(point==point')&&(ret==ret')ꢀꢀ(3‑1)由于本实施例采用哈希表对合法返回信息进行存储,因此函数合法返回的判断依据应保证算式3‑2为真,即经过hash加密后的point与相等且加密后的ret与相等,否则为遭受rop攻击。39.(index==hash1(point'))&&(value==hash2(ret'))(3‑2)如图1中所示,rop攻击定位流程如下:1)进行指令识别,如果为返回地址入栈指令跳转到步骤2;如果为返回地址出栈指令跳转到步骤3;如果为返回地址跳转指令跳转到4;否则不做处理继续执行;2)根据哈希变换和哈希加密计算当前index和value的值并在哈希表中的index位置存储value,进行合法返回地址信息的存储;3)将此时返回地址出栈指令中的point和ret缓存到变量point'和ret'中,保持point'和ret'这两个值始终由最近一次的返回地址出栈指令得出;4)判断跳转指令地址jret与缓冲区中的ret'是否相等,如果相等,说明当前函数返回跳转的jret值来自栈空间保存的返回地址,即需要验证的返回地址,转至5);如果不相等,说明jret跳转为叶子函数的返回地址,不需要验证,转至8)。40.5)尝试在哈希表中hash1(point')位置处取出value并判断value是否存在;如果存在,进行下一步判断,转至6);如果不存在,说明遭受rop攻击转至8)。41.6)比较value的值是否与hash2(ret')相等。如果相等,说明此次为正常返回转至7);否则说明返回地址发生篡改,转至8)。42.7)删除哈希表中该次返回地址的副本,继续执行指令;8)继续执行指令;(4)攻击代码捕获:攻击者为了实现一定的功能或者植入代码的执行,会进行控制流的劫持,对于基于栈溢出的rop攻击,即通过溢出篡改保存在栈上的返回地址,在函数返回时,会跳转到修改后的目标地址,执行构造好的gadget攻击链代码实现特定的功能。43.为了避免使程序崩溃,完整的rop攻击在gadgets攻击链运行完毕时需将寄存器恢复和栈空间平衡,同时将程序执行流转移到首次返回地址篡改之前的执行流中,以免程序发生异常。44.如图2中所示一次常见的rop攻击示例,程序在函数funcb处发生rop攻击,控制流被转移至gadget链,gadget执行完之后,攻击者将控制流交回到函数funcb的上层调用函数funca中。45.基于此,从发生返回地址篡改到控制流交回正常执行序列的过程,在此期间的程序执行即为完整的攻击代码,如图3中所示,判定攻击发生后启动攻击代码捕获流程,攻击代码捕获步骤如下:1)初始时ropflag置0;2)判断当前返回地址是否正常,是转到3),否转到4);3)判断ropflag是否为1;如果是,说明当前正处于rop攻击中,此时为停止攻击信号,将ropflag置0;如果否,说明当前未处于rop攻击中,则不做处理继续执行指令;4)判断ropflag是否为0。如果是,说明当前未处于rop攻击中,此时为rop开始攻击信号,将ropflag置1;如果否,说明当前正处于rop攻击当中,攻击记录已经开始,则不做处理继续执行指令。46.其中ropflag为当前是否遭受rop攻击的标志,0表示未遭受攻击,1表示处于rop攻击过程中。47.实施例2:本实施例基于在实施例1中内容,对实施例1中方法进行验证,具体内容如下:为了实施例1中方法,如图4中所示,在dynamips平台的基础上设计实现了cropds系统,系统完成了对cisco路由器的虚拟化仿真,能够加载执行ciscoios,生成虚拟路由器。在对ciscoios虚拟化执行过程中对指令执行进行监控,其中检测告警模块应用本文方法实现了对rop攻击定位方法的实现,代码捕获模块通过对攻击利用过程记录的,实现了本文rop攻击代码捕获方法。48.如图5所示设置测试环境。其中服务器b运行cropds系统,路由器r1为cropds虚拟出的路由器,通过端口映射技术,r1可以借助b的网口与外界的通信,主机a为攻击验证主机,与虚拟路由器r1处于同一网络,利用攻击机a对r1发起rop攻击,同时观察cropds系统是否能够准确的发现该次攻击,并捕获相关攻击代码。本实验使用的所有利用代码均为真实有效的exp,且攻击方式均为rop攻击。49.下面以cve‑2017‑6736漏洞为例对本方法进行说明。该漏洞是一款ciscoios的snmp协议实现漏洞,本质属于缓冲区溢出漏洞,广泛存在与ios12.0‑12.4,15.0‑15.4版本之中。攻击者通过向路由器发送精心构造的snmp数据包来触发缓冲区溢出漏洞并执行shellcode,本实施例选择存在上述漏洞的ios版本为“c1700‑entbase‑mz.124‑5”的c1700路由器进行rop攻击验证。50.图6为事先利用ida解析“c1700‑entbase‑mz.124‑5”ios固件在相关位置的攻击代码片段,图7为系统对该次rop攻击的检测及代码捕获的告警信息,从告警信息上可以看出系统发现程序运行到0x8049baec时首次出现返回地址不正确,给出告警。此时的异常指令为lwzr0,r1,52。出现异常的栈内存地址为0x82bff63c,原本此处存储的函数返回地址0x80497860被篡改为0x800adfb4,与图6所示(a)中ida固件解析中的gadget0相关代码吻合,证明定位准确。51.后17条代码为攻击捕获代码,说明发生rop攻击后程序又运行了17条指令。在恶意函数返回后程序控制流被转移到0x800adfb4执行,之后又在0x80127e54、0x810b4f30处分别做了两次栈返回地址篡改。达到攻击效果后在0x810b4f40处将控制流转移到正常的函数调用序列中,至此攻击结束。攻击代码与图6中的(b)、(c)、(d)吻合,说明攻击代码捕获正确。52.实施例3:本实施例对实施例1中技术方案进一步验证。53.为了测试cropds的通用性和性能,实验选择ctaintdetect、cids和dynamips原型系统作对比实验。其中dynamips为cisco路由器仿真原型系统,dynamips本身不具备攻击检测能力可以作为运行时效的参考基准。前两者和本系统均为基于dynamips原型系统进行开发,均具备对ciscoios的漏洞相关攻击检测的能力,因此可作为通用性参考。54.为了验证系统对来自不同版本ios中不同类型的漏洞的rop攻击的通用性。本实施例选择了ftp、ip、snmp三款ciscoios协议实现上缓冲区溢出漏洞,针对不同ios版本路由器进行rop攻击测试。其中每款漏洞需在不同平台路由器下分别选择10种不同ios版本进行攻击,记录检测结果。55.攻击检测结果如图8所示。可以看到对三款漏洞共50款ios的rop攻击检测中,实施例1中方法的检测成功率达到了96%,优于前两款系统,且具备前两者不所具备的攻击代码捕获能力,说明了实施例1中方法具备对ios版本类别和漏洞种类的rop攻击检测的通用性。56.为了测试cropds的运行性能,在漏洞攻击测试中分别对ctaintdetect、cids、cropds和dynamips系统响应时间ti做记录。以dynamips虚拟化原型系统的运行响应时间t为基准单位1,采用时间消耗比作为参照指标,各平台系统的时间消耗比计算方式为:ti/t。57.从图9中可以看出ctaintdetect约为dynamips的4倍,cids时间消耗约为dynamips的1.5倍,本方法cropds约为dynamips的1.3倍,处理性能优于以上两者。其中ctaintdetect由于污点分析算法需要从异常数据包的引入开始反复跟踪内存污染传递情况,内存读写消耗大,因此耗时较高。cids需要依赖提前建立ios的静态分析库作为合法返回参考,由于查表范围为整个ios的合法返回集合,因此耗时较大。58.基于此,本实施例根据ciscoios指令特点,提出了一种基于栈返回地址内存哈希校验的rop攻击检测方法,利用哈希表对函数返回地址的记录和验证,增加了返回地址内存指针的记录作为哈希查找的索引,提高了影子内存查找效率,并且能够防止返回地址副本的篡改。对本文的方法在虚拟仿真器上进行了实现,通过真实rop攻击样例对方法进行了验证。59.本实施例可以在不依赖静态分析的前提下,对准确定位rop攻击,并且具备一定的rop攻击代码的捕获能力,运用该方法实现的系统cropds,通过模拟执行ciscoios生成的虚拟路由器,可作为蜜罐直接在互联网中进行部署,对ciscoios所遭受的rop攻击执行流程进行捕获,便于对缓冲区溢出漏洞的发现和漏洞利用。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1