CN110909347A - 一种基于Mcsema的Remill库栈污染分析方法及装置 - Google Patents
一种基于Mcsema的Remill库栈污染分析方法及装置 Download PDFInfo
- Publication number
- CN110909347A CN110909347A CN201911216792.5A CN201911216792A CN110909347A CN 110909347 A CN110909347 A CN 110909347A CN 201911216792 A CN201911216792 A CN 201911216792A CN 110909347 A CN110909347 A CN 110909347A
- Authority
- CN
- China
- Prior art keywords
- instruction
- stack
- remill
- mcsema
- pollution
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本发明公开了一种基于Mcsema的Remill库栈污染分析方法、装置、设备及可读存储介质,所述方法包括:对机器码及其指令级别进行提升得到高级指令数据结构;利用机器指令解码器对所述高级指令数据结构进行解码,以使解码得到的寄存器名称与remill基本块的变量名相对应;对预设的退栈相关指令的SEM解释进行修改;对修改了退栈相关指令的内容进行重编译,以完成栈污染过程。本发明通过在提升过程中对退栈相关指令的SEM解释进行修改,从而能够突破现有技术中二进制程序多种调用栈方面的限制条件,实现对所需研究栈空间对象进行智能化、无损化的栈污染分析。
Description
技术领域
本发明涉及计算机技术领域,尤其是涉及一种基于Mcsema的Remill库栈污染分析方法、装置、设备及可读存储介质。
背景技术
一些操作系统对内核默认启用了Address space layout randomization,简称ASLR。ASLR随机化了模块的加载基址,内核对象的地址等,是一种针对缓冲区溢出的安全保护技术。通过对堆、栈、共享库映射等线性区布局的随机化,通过增加攻击者预测目的地址的难度,防止攻击者直接定位攻击代码位置,达到阻止溢出攻击的目的。据研究表明ASLR可以有效的降低缓冲区溢出攻击的成功率。
后来ASLR这项安全特性得到了进一步的增强:引入randomize_va_space来阻止Low integrity的程序调用某些可以泄漏出模块基址,内核对象地址等关键信息的函数。但对于integrity在medium以下的程序,在Linux系统中会调用失败。在研究中发现ASLR并不负责代码段和数据段的随机化,这项工作由PIE负责,但是只有在开启ASLR之后,PIE才会生效。理论上来说,一个32位的系统能够提供给ASLR使用的熵是要比64位系统少的。然而,还有其它的约束条件同样会影响到熵的数量,比如说那些和内存布局相关的因素。举个例子,为了使栈能够持续地从内存高地址向着堆所在的低地址生长,栈的地址最高有效位往往是不被随机化的。在一些情景中,它把32位系统的mmap()的熵限制成仅仅为16位,而PAX补丁可以用来把熵提升到24位。
很明显地,如果要使得ASLR有效,那么进程的内存空间的所有段都需要被随机化。哪怕只有一片内存区域没有被完全随机化都会有违ASLR的目标,这是因为攻击者能够利用那一片没有被随机化的内存区域去定位到有价值的gadgets,从而实现一次成功的漏洞利用。在Windows对ASLR的实现机制下,这个问题已经多次出现了,因为第三方的软件(经常是Windows软件)包含一些没有启用ASLR的DLL,利用这些库来作为翘板是很容易去构造一次漏洞利用的。
另一方面,尽管ASLR在每一个进程中都被强制开启,但对于所有可执行文件来说,还是存在着没有被随机化的内存区域。就比如说代码段(或者叫文本段;.text)只有在可执行文件被编译成位置独立可执行文件(PIE)时才会被映射到随机地址。被编译成PIE的可执行文件可以被映射到内存中的任意地方却仍然能够正确执行而不需要经过修改,这是通过使用相对地址而不是绝对地址来实现的。所有的共享对象(.so,libraries)都被会编译成PIE,这对它们的工作来说是强制需要的,因此当ASLR开启时它们总是处于随机的内存地址。
基于以上信息,Linux系统上的可执行文件如果没有被编译为PIE,那么即使ASLR等级被设置成了2(完全的随机化),它也是不会被ASLR有效地保护的。因此攻击者可以在开启了ASLR的系统上对一个非PIE可执行文件,利用其代码段以及其他一些位于主程序段的区域,比如说GOT/PLT表等作为翘板,去构造一次成功的漏洞利用。结果就是,任何的非PIE可执行文件都给return-2-plt/GOT以及基于返回的编程(ROP)攻击打开了一扇门,但编译为PIE也有针对性的指令级别提升攻击方法。
发明内容
本发明实施例所要解决的技术问题在于,提供一种基于Mcsema的Remill库栈污染分析方法、装置、设备及可读存储介质,能够突破现有技术中二进制程序多种调用栈方面的限制条件,从而实现智能化、无损化的指令级栈空间分析。
为了解决上述技术问题,本发明实施例提供了一种基于Mcsema的Remill库栈污染分析方法,包括:
对机器码及其指令级别进行提升得到高级指令数据结构;
利用机器指令解码器对所述高级指令数据结构进行解码,以使解码得到的寄存器名称与remill基本块的变量名相对应;
对预设的退栈相关指令的SEM解释进行修改;
对修改了退栈相关指令的内容进行重编译,以完成栈污染过程。
进一步地,所述对预设的退栈相关指令的SEM解释进行修改,具体包括:
对程序内容进行位数识别,并根据识别结果对所述退栈相关指令进行对应的SEM解释修改;其中,所述程序内容的位数包括32位和64位。
进一步地,所述预设的退栈相关指令包括pop指令、add指令、mov指令、leave指令、return指令中的一种或多种。
为了解决相同的技术问题,本发明还提供了一种基于Mcsema的Remill库栈污染分析装置,包括:
机器码提升模块,用于对机器码及其指令级别进行提升得到高级指令数据结构;
指令解码模块,用于利用机器指令解码器对所述高级指令数据结构进行解码,以使解码得到的寄存器名称与remill基本块的变量名相对应;
指令修改模块,用于对预设的退栈相关指令的SEM解释进行修改;
栈污染模块,用于对修改了退栈相关指令的内容进行重编译,以完成栈污染过程。
进一步地,所述指令修改模块,具体用于对程序内容进行位数识别,并根据识别结果对所述退栈相关指令进行对应的SEM解释修改;其中,所述程序内容的位数包括32位和64位。
进一步地,所述预设的退栈相关指令包括pop指令、add指令、mov指令、leave指令、return指令中的一种或多种。
为了解决相同的技术问题,本发明还提供了一种基于Mcsema的Remill库栈污染分析终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时,实现任一项所述的基于Mcsema的Remill库栈污染分析方法。
为了解决相同的技术问题,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在的设备执行任一项所述的基于Mcsema的Remill库栈污染分析方法。
与现有技术相比,本发明具有如下有益效果:
本发明提供了一种基于Mcsema的Remill库栈污染分析方法、装置、设备及可读存储介质,所述方法包括:对机器码及其指令级别进行提升得到高级指令数据结构;利用机器指令解码器对所述高级指令数据结构进行解码,以使解码得到的寄存器名称与remill基本块的变量名相对应;对预设的退栈相关指令的SEM解释进行修改;对修改了退栈相关指令的内容进行重编译,以完成栈污染过程。本发明通过在提升过程中对退栈相关指令的SEM解释进行修改,从而能够突破现有技术中二进制程序多种调用栈方面的限制条件,实现对所需研究栈空间对象进行智能化、无损化的栈污染分析。
附图说明
图1是本发明一实施例提供的基于Mcsema的Remill库栈污染分析方法的流程示意图;
图2是本发明一实施例提供的污染所需研究栈空间对象的方法设计理念示意图;
图3是本发明一实施例提供的提升过程中指令解码的流程示意图;
图4是本发明一实施例提供的解码及分析步骤的流程示意图;
图5是本发明一实施例提供的程序基本块数据结构的示意图;
图6是本发明一实施例提供的基于Mcsema的Remill库栈污染分析装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,图2是一种毒化或者说污染所需研究栈空间对象的方法设计理念,是一种常见的思路。在网络攻防里,也有ARP和DNS缓存的投毒。Mcsema-lift工具的执行过程中会产生两个栈,一个是执行栈、另一个则是模拟栈。由于栈的一个重要的作用在于函数的调用及其寻找返回地址,因此我们不能破坏这个逻辑,但要求污染要覆盖掉原来返回地址的位置,本发明方法采用了退栈时刻修改指令pop esp,leave,add esp…,mov esp…的SEM解释的思路。
请参见图1,本发明实施例提供了一种基于Mcsema的Remill库栈污染分析方法,包括步骤:
S1、对机器码及其指令级别进行提升得到高级指令数据结构。
在本发明实施例中,步骤S1为将机器码及其指令级别进行提升得到高级指令数据结构。需要说明的是,“栈污染”的前提是已声明缓解了ROP利用,因为提升的bitcode(即模拟栈中的中间代码)忽略了模拟的返回地址,并且“信任”返回存储在其自己的执行栈中的地址。并且,提升的bitcode模拟了模拟栈上的分配变量。图3表示在这个提升过程中的第一步是解码指令的字节,该解码步骤首先采用原始指令字节,并将它们转换为更高级别的指令数据结构。该数据结构表示机器代码指令的逻辑操作数。这些操作数与将传递给语义函数的参数一一对应(不忽略任何一个参数)。图4表示解码及分析步骤的流程示意图。
需要说明的是,SEM解释是指在Mcsema中对应指令的语义函数模板。
请参见图5,作为举例,如“MOV_GPRv_IMMv_32”,是Mov语义函数的SEM解释定义,我们将通用寄存器和立即数之间发生了某种操作关系根据这种格式记录下来,其中,write_op就是要写入的地方,如写入32位寄存器EAX;而read_op就是要读取的地方,如读取立即数0x1。
S2、利用机器指令解码器对所述高级指令数据结构进行解码,以使解码得到的寄存器名称与remill基本块的变量名相对应。
需要说明的是,在本发明实施例中,如图5示例的这个基本块中,解码器理解这eax是一个寄存器。令人惊讶的是,Remill的提升器对于eax没有什么概念(即需要程序员来定义“告诉”提升器)。Remill库的Mcsema-lift工具旨在将任意机器代码转换为LLVM bitcode(bitcode是由LLVM引入的一种中间代码(Intermediate Representation,简称IR),它是源代码被编译为二进制机器码过程中的中间表示形态,它既不是源代码,也不是机器码。从代码组织结构上看它比较接近机器码,但是在函数和指令层面使用了很多高级语言的特性)。为此,需要有一种“通用语言”,即架构中立的LLVM方面——这是“特定体系结构的语义函数”和“机器指令解码器”这二者可用于协商转换的过程。这种通用语言是__remill_basic_block(remill基本块)函数中的变量名。指令解码器确保解码的寄存器名称对应于__remill_basic_block中定义的变量(即rdx对应&RDX)。从解码的指令数据结构到LLVMbitcode的转换过程中我们假定这种对应关系一直存在,因此这一阶段我们对机器指令开始解码。
S3、对预设的退栈相关指令的SEM解释进行修改。
进一步地,步骤S3具体包括:
对程序内容进行位数识别,并根据识别结果对所述退栈相关指令进行对应的SEM解释修改;其中,所述程序内容的位数包括32位和64位。
进一步地,所述预设的退栈相关指令包括pop指令、add指令、mov指令、leave指令、return指令中的一种或多种。
在本发明实施例中,为了不影响“栈开辟空间到函数调用完毕正常返回”这整个过程,因此我们决定通过修改pop esp、leave、add esp…、mov esp…,ret五条指令的SEM解释从而实现“栈污染”的效果。可以理解的是,这些指令是在退栈时的一些必要操作,在不同的程序中会用到其中的一种或两种。具体地:
针对pop指令:pop ebp指令的方式,pop的指令本来的操作把当前的栈顶的值赋给目的寄存器,分析其中往ebp寄存器中写操作的位置,在这之后可插入一段自定义的翻译内容。
针对add指令:add ebp,0xN指令的方式,add的指令是将寄存器的的值与后面的立即数进行相加,而后又将此和放入原来的寄存器中,存在对ebp寄存器的写操作,可在此后插入一段自定义的解释内容。
针对mov指令:mov esp,ebp指令的方式,mov指令是将右操作数寄存器的内容转移到做操作数寄存器里来,存在对esp寄存器的写操作过程,但是,这里不能仅仅是对mov指令添加自定义翻译,还需要对操作寄存器esp进行判断,原因是二进制程序中有成千上万个mov指令,对整个mov都做一个自定义添加解释内容显然不可取。这里本方法采用甄别寄存器前后值的方法,在提升前取一次值,若提升操作结束后得值与前一个值不同,则说明esp寄存器的内容发生了改动,即可证明对esp进行了操作。
针对leave指令:leave;ret指令的方式,leave指令的效果等同于mov esp,ebp;pop ebp,因此原理和上面mov和pop一样,在进行对寄存器写操作指令的后面进行添加自定义解释内容。
针对return指令:return指令的方式,return指令的效果等同于pop eip;jump,因此原理和pop一样,在对eip进行写操作之后添加自定义解释内容。
需要说明的是,以上的指令分析方法,都需判断32位和64位的区别。32位程序是4字节存储,64位则是8字节,本方法采用内存容量度量函数sizeof来对一个设立的标志位进行衡量的方式进行,如果需要进行满字节污染则需甄别位数的差别,并选择0xdeadbeef或者0xdeadbeefdeadbeef。可以理解的是,sizeof操作符以字节形式给出了其操作数的存储大小。操作数可以是一个表达式或括在括号内的类型名。操作数的存储大小由操作数的类型决定,因此我们用它来检测某个标志位的存储大小进而判断是哪一种类型的程序。利用sizeof的原因就在于其检测的简便性,仅仅需要一个存储步长的大小即可识别程序的类型,而不会涉及太多的复杂算法或者内容判断。
S4、对修改了退栈相关指令的内容进行重编译,以完成栈污染过程。
在本发明实施例中,让Mcsema-lift工具根据我们在SEM中按照不同指令特性添加的关于对栈空间填充0xdeadbeef的内容重新编译成“具有栈污染效果”的工具。其中,在SEM中按照不同指令特性添加的关于对栈空间填充0xdeadbeef的内容,包括特定寄存器识别,指定步长的循环污染等。
需要说明的是,Mcsema提供了丰富的操作写法,如针对POP指令的时候,仅需要确定是要往寄存器写还是读,再确定操作对象以及操作运算符,最后根据程序类型指定操作数内容按格式编写在相应的位置即可完成往栈上填入我们的特殊内容0xdeadbeef。因此本发明方法使用原生的Mcsema操作写法,极大地简化了我们的操作复杂度,也加固强调了很多类型,不至于因为类型出错而导致一些安全问题。
在本发明实施例中,作为优选方案,在针对ADD指令实验的过程当中,为了在成千上万个add指令之中对退栈时刻的ADD指令进行唯一识别,我们把研究对象转移到了寄存器,在操作前读取一次寄存器XSP(堆栈指针)的值(存为Old),然后令add指令经过Remill提升后再取一次寄存器XSP值与之前的Old进行比较。显然,如果比较出现相等的情况,则说明这个ADD指令不是我们想所关心的;反之,则说明XSP寄存器发生了内容上的变动,因此我们可以认为,这个ADD指令是与退栈相关的指令。
在本发明实施例中,作为优选方案,随着函数调用的复杂度上升和递归函数的频繁调用,参数和数据的数量级正在逐步上升,这时候就已经不再是几行代码能解决的问题。由于栈是一种根据程序的位数决定步长的存储数据结构,因此我们选择采用循环的方式去解决这个问题。
需要说明的是,本发明设计了一种基于Mcsema的Remill库工具来突破现阶段二进制程序中多种调用栈方面限制条件的智能化、无损化指令级栈空间分析(“栈污染”)方法,具体描述如下:
1、为了可以忽略或者减少可执行权限和内存布局随机化这两种栈空间限制条件的技术,通过直接在指令级层面对栈进行提升操作(包含修改栈指令语义解释、通过Mcsema-lift工具将指令提升为LLVM中间语言),以及在退栈过程中可以自定义地往栈上输入想要的数据,可以避免苦苦寻找其他可利用函数地址的烦恼以及绕过保护机制而花费的更多时间开销(我们的测试结果发现能在控制程序一致的情况下可节省80%的时间);
2、通过修改Mcsema-lift工具的提升过程中的模拟栈(与真实栈操作一致,最后会将数据转移到真实栈中)的语义解释定义的可控制的性质来实现突破“利用缓冲区溢出漏洞”、“缓冲区可输入长度固定”、“程序可能无交互输入函数”等限制条件;
3、以需要精心构造分析链为著称的ROP技术的操作难度是所有对栈空间进行分析的方法中最难的,而且当溢出长度不够使用的时候,还需要考虑栈迁移等操作。为了简化、精炼化栈空间分析过程,因此“栈污染”技术通过指令级层面获取开辟栈空间相关操作数信息来实现栈空间大小智能化检测的手段;
4、通过不修改已知操作指令的正常操作语义解释,增加根据研究需要(比如为了简便说明,本申请文使用填充二进制界特殊定义字节0xdeadbeef)的语义解释内容,从而利用控制变量法实现程序控制流和数据流基本能保持不变的无损化分析手段。
相对于现有技术,本发明具有如下有益效果:
1、能实现对32位和64位二进制程序的精准退栈时刻污染效果;本发明方法实现了Linux系统下32位和64位程序通用的栈污染方法,并且不影响返回地址的正常作用,具有一定的独创性,并且可自动甄别程序的位数来进行不同的填充污染方式,精准度高达百分百。
2、可在指令级别任意写入想要做的具体自定义翻译操作;基于Remill库的机器码及其指令级翻译提升阶段中后置自定义改写技术从用户角度来看相对亲民,门槛低,C语言编写并结合对寄存器的判断以及对寄存器的内容存储就可完成一些常规的污染操作。
3、可实现指令级别的插桩以及特殊的Hook效果;在不改变二进制程序代码本身逻辑的前提下完成了一系列对栈的污染操作,且不仅是局限于污染,还可以完成样式繁多的指令级Hook和插桩,说明实现成本低,效率高,后续可扩展性强。
4、能实现循环污染,长度可控,内容可控,为分析执行栈漏洞提供了良好的研究环境;
5、通过识别规定寄存器来实现具体的操作,不会盲目地进行污染,精准度接近百分百。
需要说明的是,本发明提供了一种可在程序开启ASLR和PIE保护的基础上对栈进行污染的研究分析方法,而其他的方法在此方面上没有做太多的涉及,因为潜意识里觉得这两个保护基本上已经缓解了大部分栈漏洞。再者,机器码及指令层面的提升翻译后部分阶段是可由用户进行自定义改写一些栈空间的填充内容,比起像绕过地址随机化的ROP技术来说能节省很多的时间。同时,实施本发明不会改变程序代码本身的逻辑,在以退栈的时候起关键作用的指令SEM解释层面入手,令计算机识别为正常的指令。
需要说明的是,对于以上方法或流程实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作并不一定是本发明实施例所必须的。
请参见图6,为了解决相同的技术问题,本发明还提供了一种基于Mcsema的Remill库栈污染分析装置,包括:
机器码提升模块1,用于对机器码及其指令级别进行提升得到高级指令数据结构;
指令解码模块2,用于利用机器指令解码器对所述高级指令数据结构进行解码,以使解码得到的寄存器名称与remill基本块的变量名相对应;
指令修改模块3,用于对预设的退栈相关指令的SEM解释进行修改;
栈污染模块4,用于对修改了退栈相关指令的内容进行重编译,以完成栈污染过程。
进一步地,所述指令修改模块3,具体用于对程序内容进行位数识别,并根据识别结果对所述退栈相关指令进行对应的SEM解释修改;其中,所述程序内容的位数包括32位和64位。
进一步地,所述预设的退栈相关指令包括pop指令、add指令、mov指令、leave指令、return指令中的一种或多种。
可以理解的是上述装置项实施例,是与本发明方法项实施例相对应的,本发明实施例提供的一种基于Mcsema的Remill库栈污染分析装置,可以实现本发明任意一项方法项实施例提供的基于Mcsema的Remill库栈污染分析方法。
为了解决相同的技术问题,本发明还提供了一种基于Mcsema的Remill库栈污染分析终端设备,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时,实现任一项所述的基于Mcsema的Remill库栈污染分析方法。
所述基于Mcsema的Remill库栈污染分析终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述处理器可以是中央处理单元(CentralProcessing Unit,CPU),还可以是其他通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述基于Mcsema的Remill库栈污染分析终端设备的控制中心,利用各种接口和线路连接整个基于Mcsema的Remill库栈污染分析终端设备的各个部分。
所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序等;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
为了解决相同的技术问题,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在的设备执行任一项所述的基于Mcsema的Remill库栈污染分析方法。
所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括电载波信号和电信信号。
需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本发明提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。
Claims (8)
1.一种基于Mcsema的Remill库栈污染分析方法,其特征在于,包括:
对机器码及其指令级别进行提升得到高级指令数据结构;
利用机器指令解码器对所述高级指令数据结构进行解码,以使解码得到的寄存器名称与remill基本块的变量名相对应;
对预设的退栈相关指令的SEM解释进行修改;
对修改了退栈相关指令的内容进行重编译,以完成栈污染过程。
2.根据权利要求1所述的基于Mcsema的Remill库栈污染分析方法,其特征在于,所述对预设的退栈相关指令的SEM解释进行修改,具体包括:
对程序内容进行位数识别,并根据识别结果对所述退栈相关指令进行对应的SEM解释修改;其中,所述程序内容的位数包括32位和64位。
3.根据权利要求1所述的基于Mcsema的Remill库栈污染分析方法,其特征在于,所述预设的退栈相关指令包括pop指令、add指令、mov指令、leave指令、return指令中的一种或多种。
4.一种基于Mcsema的Remill库栈污染分析装置,其特征在于,包括:
机器码提升模块,用于对机器码及其指令级别进行提升得到高级指令数据结构;
指令解码模块,用于利用机器指令解码器对所述高级指令数据结构进行解码,以使解码得到的寄存器名称与remill基本块的变量名相对应;
指令修改模块,用于对预设的退栈相关指令的SEM解释进行修改;
栈污染模块,用于对修改了退栈相关指令的内容进行重编译,以完成栈污染过程。
5.根据权利要求4所述的基于Mcsema的Remill库栈污染分析装置,其特征在于,所述指令修改模块,具体用于对程序内容进行位数识别,并根据识别结果对所述退栈相关指令进行对应的SEM解释修改;其中,所述程序内容的位数包括32位和64位。
6.根据权利要求4所述的基于Mcsema的Remill库栈污染分析装置,其特征在于,所述预设的退栈相关指令包括pop指令、add指令、mov指令、leave指令、return指令中的一种或多种。
7.一种基于Mcsema的Remill库栈污染分析终端设备,其特征在于,包括处理器、存储器以及存储在所述存储器中且被配置为由所述处理器执行的计算机程序,所述存储器与所述处理器耦接,且所述处理器执行所述计算机程序时,实现如权利要求1至3任一项所述的基于Mcsema的Remill库栈污染分析方法。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,其中,在所述计算机程序运行时控制所述计算机可读存储介质所在的设备执行如权利要求1至3任一项所述的基于Mcsema的Remill库栈污染分析方法。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911216792.5A CN110909347B (zh) | 2019-11-29 | 2019-11-29 | 一种基于Mcsema的Remill库栈污染分析方法及装置 |
JP2020153665A JP6941897B2 (ja) | 2019-11-29 | 2020-09-14 | Mcsemaに基づくRemillスタック汚染分析方法およびアプライアンス |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911216792.5A CN110909347B (zh) | 2019-11-29 | 2019-11-29 | 一种基于Mcsema的Remill库栈污染分析方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110909347A true CN110909347A (zh) | 2020-03-24 |
CN110909347B CN110909347B (zh) | 2022-02-08 |
Family
ID=69821387
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911216792.5A Active CN110909347B (zh) | 2019-11-29 | 2019-11-29 | 一种基于Mcsema的Remill库栈污染分析方法及装置 |
Country Status (2)
Country | Link |
---|---|
JP (1) | JP6941897B2 (zh) |
CN (1) | CN110909347B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199116A (zh) * | 2020-10-16 | 2021-01-08 | 常熟理工学院 | 操作数栈寄存器识别方法、装置、设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030130834A1 (en) * | 2001-12-21 | 2003-07-10 | Hitachi, Ltd. | Execution time modification of instruction emulation parameters |
US7177985B1 (en) * | 2003-05-30 | 2007-02-13 | Mips Technologies, Inc. | Microprocessor with improved data stream prefetching |
CN103077011A (zh) * | 2012-10-09 | 2013-05-01 | 华为技术有限公司 | 一种在JavaScript脚本语言中预生成机器码指令的方法和装置 |
CN108027766A (zh) * | 2015-09-19 | 2018-05-11 | 微软技术许可有限责任公司 | 预取指令块 |
CN109377789A (zh) * | 2018-10-26 | 2019-02-22 | 珠海中电数码科技有限公司 | 一种组合式智能全面屏黑板 |
-
2019
- 2019-11-29 CN CN201911216792.5A patent/CN110909347B/zh active Active
-
2020
- 2020-09-14 JP JP2020153665A patent/JP6941897B2/ja active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030130834A1 (en) * | 2001-12-21 | 2003-07-10 | Hitachi, Ltd. | Execution time modification of instruction emulation parameters |
US7177985B1 (en) * | 2003-05-30 | 2007-02-13 | Mips Technologies, Inc. | Microprocessor with improved data stream prefetching |
CN103077011A (zh) * | 2012-10-09 | 2013-05-01 | 华为技术有限公司 | 一种在JavaScript脚本语言中预生成机器码指令的方法和装置 |
CN108027766A (zh) * | 2015-09-19 | 2018-05-11 | 微软技术许可有限责任公司 | 预取指令块 |
CN109377789A (zh) * | 2018-10-26 | 2019-02-22 | 珠海中电数码科技有限公司 | 一种组合式智能全面屏黑板 |
Non-Patent Citations (3)
Title |
---|
XIN-QUAN LAI: "Study of signal integrity for a novel stacked cylindrical PoP package", 《IEEE》 * |
张岑: "轻量级污点导向型模糊测试技术研究", 《中国优秀硕士学位论文全文数据库(电子期刊)信息科技辑》 * |
马梦雨 等: "内存数据污染攻击和防御综述", 《信息安全学报》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112199116A (zh) * | 2020-10-16 | 2021-01-08 | 常熟理工学院 | 操作数栈寄存器识别方法、装置、设备及存储介质 |
CN112199116B (zh) * | 2020-10-16 | 2023-08-11 | 常熟理工学院 | 操作数栈寄存器识别方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
JP2021086614A (ja) | 2021-06-03 |
CN110909347B (zh) | 2022-02-08 |
JP6941897B2 (ja) | 2021-09-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11061833B2 (en) | Apparatus and method for handling page protection faults in a computing system | |
CN109643343B (zh) | 使用虚拟地址映射对目标应用功能的基于内核的检测 | |
KR101691719B1 (ko) | 프로시저로부터의 리턴-타겟 제한적 리턴 명령어들, 프로세서들, 방법들 및 시스템들 | |
US9250937B1 (en) | Code randomization for just-in-time compilers | |
CN109918903B (zh) | 一种基于llvm编译器的程序非控制数据攻击防护方法 | |
US8479174B2 (en) | Method, computer program and computer for analyzing an executable computer file | |
US7584364B2 (en) | Overlapped code obfuscation | |
US8352484B1 (en) | Systems and methods for hashing executable files | |
CN107480476B (zh) | 一种基于ELF感染的Android本地层指令编译虚拟化加壳方法 | |
CN108027737A (zh) | 通过二进制和存储器多样性进行混淆的系统和方法 | |
CN110941552A (zh) | 一种基于动态污点分析的内存分析方法及装置 | |
Stüttgen et al. | Robust Linux memory acquisition with minimal target impact | |
US20220383988A1 (en) | Data processing system and method | |
CN112052433A (zh) | 一种Jar文件的虚拟化保护方法、终端及存储介质 | |
CN107368739B (zh) | 一种内核驱动的监视方法和装置 | |
EP3867784A1 (en) | Applying security mitigation measures for stack corruption exploitation in intermediate code files | |
Wong | Mastering Reverse Engineering: Re-engineer your ethical hacking skills | |
CN110909347B (zh) | 一种基于Mcsema的Remill库栈污染分析方法及装置 | |
US20190102550A1 (en) | Technologies for mitigating call-oriented programming using an inter-module control flow policy | |
Ferguson | Reverse engineering code with IDA Pro | |
CN108446186B (zh) | 从加壳Android应用程序中恢复Dex源文件的方法 | |
Abrath et al. | Obfuscating windows dlls | |
CN106407751B (zh) | 对可执行文件进行保护的方法和装置 | |
CN110597571A (zh) | 一种非立即数跳转的保护方法及对应计算装置 | |
Kugler et al. | SCADS: Separated Control-and Data-Stacks |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |