CN106096407B - 一种代码复用攻击的防御方法 - Google Patents
一种代码复用攻击的防御方法 Download PDFInfo
- Publication number
- CN106096407B CN106096407B CN201610375304.5A CN201610375304A CN106096407B CN 106096407 B CN106096407 B CN 106096407B CN 201610375304 A CN201610375304 A CN 201610375304A CN 106096407 B CN106096407 B CN 106096407B
- Authority
- CN
- China
- Prior art keywords
- statement
- statements
- code
- data
- page
- 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.)
- Expired - Fee Related
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/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
Abstract
本发明公开了一种代码复用攻击的防御方法,包括在库文件中增加新段,令所述新段中保存的语句为库文件的代码段的数据语句;然后加载所述库文件;最后将所述代码段分别加载至只读的内存页以及只执行的内存页;通过所述新段中保存的语句,判断只读的内存页以及只执行的内存页中加载的代码段中的语句为数据语句或者指令语句,并将所述只读的内存页中的指令语句以及只执行的内存页中的数据语句替换为无效语句。本发明通过以不同的内存页分别储存指令语句和数据语句,从而防御代码复用攻击,本发明不依赖于具体的处理器硬件平台,任何基于windows平台的虚拟系统都可以实施本发明提出的技术方案。
Description
技术领域
本发明属于系统安全技术领域,更具体地,涉及一种代码复用攻击的防御方法。
背景技术
代码复用攻击是指在系统共享库文件中(动态链接库,如Windows系统System32目录下的ntdll.dll)或者程序运行时的内存空间(内核空间、可执行进程空间等)已有的代码中搜索可利用的具有特定特征的指令片段(gadgets,通常以ret等汇编指令结尾),并将其链接成可连续执行的指令序列(以ret等汇编指令实现跳转),再结合缓冲区溢出覆盖函数的返回地址等技术,使程序转而执行构造好的指令序列(由gadgets链接而成),最终可执行系统调用(如system()函数)获得系统权限或调用系统函数(如VirtualProtect)修改内存属性(读、写、执行),执行预先构造的攻击程序。
代码复用攻击利用了系统执行程序时的以下几个特点:(i)程序执行时内存中的代码页为可读和可执行权限(代码页中存在需要读的数据);(ii)ret指令在共享库文件或内存中大量存在;(iii)每个gadget包含的指令条数(即由gadgets组成的指令序列中两个ret指令之间的指令数目)很少;(ⅳ)ret/call指令对数目严重失衡(call指令调用函数,ret指令返回,这两条指令在大多数情况下成对出现)。针对构建代码复用攻击的这些特点,出现了不少的防御方法。
其中,Hidem方法利用一些早期处理器(CPU)架构独有的Split-TLB特性(分别通过不同的高速缓存访问数据页和代码页)将可执行的代码页中存在的数据和代码进行分离,为程序在内存中执行时的每一个代码页额外分配一个具有只执行权限的内存页面,用于保存代码页中的代码。这样攻击者在执行程序搜索内存空间时就会因为不能读取代码页中的代码而无法构造具有攻击能力的指令序列,从而达到防御代码复用攻击的目的。但这种方法消耗的内存受到执行的程序的影响,最高可能达到程序可执行代码使用内存的两倍,约为2MB~20MB,同时现有的处理器已经没有Split-TLB特性,因此Hidem所能防御的平台十分有限。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供了一种代码复用攻击的防御方法,其目的在于以不同的内存页分别储存指令语句和数据语句,从而防御代码复用攻击。
为实现上述目的,按照本发明的一个方面,提供了一种代码复用攻击的防御方法,包括以下步骤:
S1.在库文件中增加新段,令所述新段中保存的语句为库文件的代码段的数据语句;
S2.将所述库文件加载至内存;
S3.将所述库文件的代码段分别加载至内存中只读的内存页以及只执行的内存页;通过所述新段中保存的语句,判断加载后的代码段中的语句是否为数据语句,并将所述只读的内存页中的非数据语句以及只执行的内存页中的数据语句替换为无效语句。
优选地,所述步骤S1具体包括如下子步骤:
S11.将库文件的代码段的数据语句储存于临时文件;
S12.在库文件中增加新段,并将临时文件中储存的数据语句复制至新段。
作为进一步优选地,所述步骤S11具体为:根据库文件的代码段的语句的操作码是否为空,判断该语句是否为数据语句,是则将该语句储存入临时文件,否则对该语句不作任何处理。
作为进一步优选地,所述步骤S12具体为:
将库文件的头部中的段的数值+1;在库文件的bound import段以及security段之前插入新段,令所述新段中保存的语句为临时文件中的数据语句;修改库文件的头字节以及校验和。
优选地,所述方法用于基于windows平台的虚拟系统。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有下列有益效果:
1、采用不同的内存页分别储存数据语句和指令语句,仅需多分配和原有页面数量相同的内存页,经验证仅消耗2MB内存,优于现有技术中的Hidem方法;
2、不依赖于具体的处理器硬件平台,任何能够模拟完整硬件环境的开源虚拟系统的windows平台都可以实施本发明提出的技术方案。
附图说明
图1为现有技术和本发明实施例1进行内存访问的示意图;
图2为本发明实施例1将所述只读的内存页中的指令语句以及只执行的内存页中的数据语句替换为无效语句的示意图;
图3为本发明实施例1的页面写回示意图;
图4为本发明实施例1虚拟多TLB系统处理COW的过程。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
本发明提供了一种代码复用攻击的防御方法,该方法可用于基于windows平台的虚拟系统,包括以下步骤:
S1.在库文件中增加新段,令所述新段中保存的语句为库文件的代码段的数据语句,该步骤又包括如下子步骤:
S11.根据库文件的代码段中的语句的操作码是否为空,判断该语句是否为数据语句,是则该语句为数据语句,将数据语句储存入临时文件;否则该语句为非数据语句,即指令语句,不对该语句作任何处理;
S12.将库文件的头部中的段的数值+1;在库文件的bound import段以及security段之前插入新段(如果库文件既没有bound import段或security段,则可在任意位置插入新段,但为了加载时的便利,一般将新段插入至除bound import段以及security段以外其它所有段的尾部),令所述新段中保存的语句为临时文件中的数据语句;修改库文件的头字节以及校验和。
S2.将所述库文件加载至内存;
S3.将所述库文件的代码段分别加载至内存中只读的内存页以及只执行的内存页;通过步骤S1中的所述新段中保存的语句,判断加载后的代码段中的语句是否为数据语句,并将所述只读的内存页中的非数据语句(除了数据语句以外的其它语句,即指令语句)以及只执行的内存页中的数据语句替换为无效语句。
实施例1
本实施例的目的在于针对现有Windows系统对内存中代码段赋予可读可执行权限的缺点,结合能够模拟完整硬件环境的开源虚拟机系统提出了一种代码复用攻击的防御方法,包括以下步骤:
S1.在库文件中增加新段,所述新段为数据段,在添加后设置为只读;将库文件的代码段的数据语句保存于新段中;所述代码段由数据语句和指令语句组成;
S11.对Windows系统库文件进行静态分析,结合IDA Pro用python语言编写插件采用递归下降反汇编算法识别库文件的代码段中的数据语句。首先,获得库文件预设的加载基址及库文件中包含的段数目;接着,遍历其中的所有段以获得代码段的起始地址和结束地址;然后,依次分析代码段中的每一条语句,根据语句的操作码是否为空来判断该条语句为指令语句或数据语句;如该语句为数据语句,则将此数据语句的首地址和尾地址以相对偏移的形式写入临时文件,直至代码段中所有的数据语句均写入临时文件;
S12.由于Windows系统提供了成百上千的动态链接库,如果将从库文件的代码段提取到临时文件的数据语句保存到额外的文件,那么加载器在加载库文件的同时必须加载保存了数据语句的文件,这样会加重加载器的负担。为了解决这一问题,本发明在库文件的尾部插入一新段,并设置为只读,用于保存临时文件中的数据语句,并给该新段命名为“.cdata”。具体操作如下:
S121.获取库文件的头部(IMAGE_NT_HEADER)的偏移量,根据获得的偏移量将库文件的头部中的段的数值+1;并在最后一个段的结束位置处插入新段(即.cdata段);如果库文件中包含边界导入(bound import)段或安全(security)段,则将其依次移至.cdata段之后,否则不做移动;
S122.将库文件的头字节修改为原库文件的大小+新段的大小;
S123.获得库文件的校验和,并将其保存;
得到包含.cdata段的库文件之后,用该文件去覆盖Windows系统原有的库文件。我们的Windows系统是QEMU虚拟机生成的系统镜像,其本质是可挂载文件系统,因此,挂载之后便可直接进行替换。这样,系统加载的库文件都包含.cdata段。
S2.将所述库文件加载至内存;
S21.本实施例所用的QEMU虚拟系统的VMI接口中包含表示系统运行时状态的两个重要数据结构:加载模块(class module)以及运行进程(class process)。
在表示加载模块(class module)以及表示运行进程(class process)的类结构中新增成员变量,用于保存库文件的新段的信息,具体描述如表1和表2所示:
表1class module新增的成员变量
表2class process新增的成员变量
S22.通过步骤S1,我们已经将数据语句保存在库文件的.cdata段中,由于classmodule是对库文件(如exe、dll等)加载到内存之后的抽象,因此必须将.cdata段从库文件中提取出来并保存到class module中。当然,一个module不是独立存在的,它必然关联于某一个process。所以,通过检测module的加载,便可以将module所表示的库文件的新段中的数据语句成功“转移”至内存。先判断正在加载的库文件是否含有.cdata段,如果没有则直接返回;如果有则遍历.cdata段,提取所有的数据语句,并将它们分别保存到模块结构(module)和进程结构(process)中,同时设置相关变量。
S3.到目前为止,运行进程链接的库文件中代码段的数据语句已经全部转移至内存了。但是,进程结构所表示的内存中的内存页不仅包含代码页还包含数据页等非代码页,而且不是每一个代码页都包含非执行数据。
因此,在系统执行缺页中断程序后得到一个要访问页面(页面的地址可以是正在执行程序内存空间内的任何地址值)的地址时,准确并迅速的给出其包含的数据区间至关重要。首先由系统上下文结构的cr[3]成员得到页表基地址;再结合进程中保存的数据区间判断正在加载的内存页中是否包含这些数据区间值;如果包含,就将属于此页面的数据区间信息保存到临时数组中供后面的页面覆盖时使用。
本实施例所用的QEMU虚拟系统的软件内存管理(Software Memory Manage Unit,SoftMMU)单元为提高系统运行速度,引入快表(Translation Lookaside Buffer,TLB)的设计思想。通过TLB实现客户机(运行在虚拟机上的系统)虚拟地址和主机(运行虚拟机的系统)虚拟地址之间的映射。为了实现代码段中代码和数据的分离,本发明在原有TLB的基础上实现了虚拟多TLB,即新增一个和TLB具有相似结构的快表——DTLB。基本思想是通过TLB访问数据语句所在页面(即只读的内存页的区域),让DTLB指向指令语句所在的只执行的内存页的区域。TLB所指的页面为原页面(即只读的内存页),而DTLB所指的页面为拷贝页面(即只执行的内存页)。图1a和b分别描述了现有虚拟机只利用TLB访问内存(原有TLB机制)和虚拟多TLB机制进行内存访问的示意图。
在原有TLB机制下,系统无论是执行操作还是读操作,都是通过TLB访问相同的内存页面。而本实施例令TLB指向的原页面只保存代码页中的数据语句,其指令语句被“挖除”(即被无效语句所替换);DTLB指向的拷贝页面只保存代码页中的代码语句,其数据语句也被“挖除”(即被无效语句所替换),如图2所示。当操作系统发出读的信号时,CPU将通过TLB获得不包含代码语句的原页面的内存地址;若操作系统发出的是执行的信号,CPU将通过DTLB获得只包含代码语句的拷贝页面的内存地址。
Qemu的TLB是一个2*256的二维数组,它是通过宏定义实现的。Qemu中的TLB实质是CPUTLBEntry数组,它的前三个成员addr_read、addr_write和addr_code均为内存虚拟地址,分别表示读、写和执行地址;将虚拟地址加上addend便得到物理地址。
由于虚拟多TLB(即TLB和DTLB)指向进程空间中的同一页面,因此DTLB和TLB可以共用TLB中的前面三个变量。也就是说,DTLB只需要一个成员addend。
S31.将代码段储存入TLB所指的页面即原页面,所述原页面为只读的内存页,并将DTLB所指的页面对原页面进行复制获得拷贝页面,所述拷贝页面为只执行的内存页;
S32.通过库文件的新段中保存的数据语句,判断原页面以及拷贝页面中储存的代码段中的语句为数据语句还是指令语句,与库文件的新段中保存的数据语句相同则为数据语句,否则为指令语句;并将原页面中的指令语句以及拷贝页面中的数据语句替换为无效语句。
在QEMU虚拟系统中,内存页面调入内存时,先由底层硬件完成内容的拷贝,然后通过tlb_set_page()函数完成TLB的填充。因此,我们只需要在tlb_set_page()函数中合适的地方调用mtlb_cover_dtlb_page()函数便将调入的内存页中的指令语句以及拷贝页中的数据语句替换为无效语句,在本实施例中采用了0xF4作为无效语句。
内存页面回写
在程序运行时,通过页表将虚拟地址映射到物理内存。每个进程有属于自己的页表,但所有进程共用TLB,即TLB具有唯一性。显然在进程切换时,由于虚拟进程空间发生了变化,会刷新TLB,有时会将旧进程在内存中的部分页面置换出内存。我们暂时将这种由于进程切换等原因而导致整个TLB刷新的现象称为“刷新TLB”。
QEMU虚拟机实现的TLB是客户机虚拟内存到主机虚拟内存的映射,但是相对而言,TLB的容量小的多。假设某计算机主存是4G,页面大小为4K,那么内存从逻辑上划分成2^20块;而TLB中表项一般不会多,在实际中很少会超过64个。因此,即使没有进程切换,也会发生TLB表项被覆盖的现象。我们称这种TLB表项被置换的现象为“刷新TLB表项”。
由于DTLB所指向的拷贝页的数量和TLB表项数目一致,所以无论是“刷新TLB表项”还是“刷新TLB”都会导致拷贝页面被回收,而TLB指向的页面可能依旧驻留在内存中。由于拷贝页面是动态分配的,这样就会导致TLB重新“指向”原页面时得到不同的拷贝页面。而虚拟多TLB系统在页面被加载至内存时,会将TLB指向的页面中的代码语句及DTLB指向的拷贝页中的数据语句覆盖成0xF4。因此,在拷贝页面被回收之前,必须进行页面写回的操作,即将原页面中的数据语句写回到拷贝页面,同时将拷贝页面的代码写回原页面,如图3所示。
对于“刷新TLB表项”和“刷新TLB”这两种不同的现象,写回策略有所不同。由于“刷新TLB”只是多次使用“刷新TLB表项”的写回策略,故只详述“刷新TLB表项”的写回策略。具体如下:
首先,依据TLB获得即将被置换出内存页的相对虚拟地址(Relative VirtualAddress,RVA);
然后,根据RVA找出该内存页包含的数据语句及指令语句;
接着,利用TLB和DTLB,计算出原页面和拷贝页面的起始地址;
将原页面中的数据语句写回到拷贝页面,同时将拷贝页面的指令语句写回原页面中。
内核态和用户态的同步
QEMU虚拟系统中TLB的二维分别代表内核态和用户态。当系统运行在内核态时,通过tlb_table[0]和dtlb_addend[0]来完成地址映射;否则,用tlb_table[1]和dtlb_addend[1]代表虚拟多TLB。
用户态和内核态的同步是指如果tlb_table[0][i]和tlb_table[1][i](其中i取0,1,…,255)指向同一个页面,则必须将dtlb_addend[0][i]和dtlb_addend[1][i]也指向同一页面。这又可以分为两种情况,(1)页面加载时,不额外分配拷贝页面;(2)刷新TLB表项时,如果该页面还有引用,则不能释放其拷贝页面。我们的应对策略是在上述情况对应的位置,先对页面的引用数目进行判断,如果超过1,则不释放拷贝页面;否则释放。
写时复制(Copy On Write,COW)的页面同步
COW表示对于多个调用者使用的相同资源(如代码页面),在某个调用者视图修改资源时,系统会为该调用者复制一份资源副本,而其他调用者所使用的资源仍然保持不变。由于代码段不具备可写属性,因此原则上允许若干个进程共享代码段,实际上,代码段确实是共享段。但是,如果代码段包含了像导入地址表(Import Address Table,IAT)这类在程序运行时需要修改的数据,就会触发写时复制。由于IAT表保存的是库函数相对库文件的相对偏移,所以在库文件被加载到指定内存块时(通常称该内存区域的起始地址为模块基址),加载器需要将IAT修改为库函数在内存的地址(即偏移值加上模块基址)。加载器修改IAT表的过程通常被称为“IAT重写”。如果IAT表被合并在代码段,那么在加载器修改IAT表时会触发COW异常。为了提升包含IAT表的代码页(记为Page1)的写权限,操作系统重新分配一个具有可写权限的页面(记为Page2),同时填写TLB对应表项;之后,操作系统将Page1的数据完全拷贝到Page2中,此时加载器就可以对Page2进行写操作了;完成重写IAT之后,操作系统会去刷新TLB表项,使得用户态指向Page1的TLB表项指向具有写权限的Page2页面。完成整个COW的处理过程之后,处理器又将切回用户态继续执行。在虚拟多TLB的系统中,由于页面加载时就分别对TLB和DTLB指向的页面中的指令语句和数据语句进行了覆盖,这将会导致页面拷贝时得到的数据不正确,即引发虚拟多TLB不同步。
在对COW进行深入的分析之后,发现COW引发的虚拟多TLB不同步的问题很容易解决。如图4,我们只需要在QEMU执行缺页异常处理程序时(即QEMU的tlb_set_page()函数),进行异常检测。在QEMU中,触发异常的页面的起始地址被保存在处理器的cr2寄存器,即env->cr[2];而且,如果是写不可写页面(如只读页面或只执行页面)导致的异常,处理器中的W_ERROR_BIT(COW标志)会被置位。因此,在进行覆盖操作之前,判断处理器中的W_ERROR_BIT位是否被置位。如果是就触发了COW异常,不做覆盖任理;否则,覆盖TLB和DTLB指向的内存页面。
通过以上方法,区分了系统中进程对内存中指令语句和数据语句的访问,并分别限制访问权限,使其不能读指令语句和执行数据语句;当系统出现代码复用攻击时:
1、攻击指令在内存空间加载的语句中搜索可链接成执行序列的语句序列;
2、搜索到可用的语句序列后,攻击指令通过快表TLB,从而获得语句序列在内存中的访问地址;
3、由于本发明采用的TLB和DTLB实现了内存页读和执行权限的分离;
4、TLB中仅有可读可写的数据语句,DTLB中仅有可执行的指令语句;攻击指令无法通过完整的代码段获得语句序列,而链接成执行序列,从而无法发动攻击;因此系统有效防御了代码复用攻击,为用户提供健壮的系统安全保障。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (5)
1.一种代码复用攻击的防御方法,其特征在于,包括以下步骤:
S1.在库文件中增加新段,令所述新段中保存的语句为库文件的代码段的数据语句;
S2.将所述库文件加载至内存;
S3.将所述库文件的代码段分别加载至内存中只读的内存页以及只执行的内存页,通过TLB访问只读的内存页,通过DTLB指向只执行的内存页;通过所述新段中保存的语句,判断加载后的代码段中的语句是否为数据语句,并将所述只读的内存页中的非数据语句以及只执行的内存页中的数据语句替换为无效语句;
S4:当操作系统发出读信号时,CPU通过TLB获得不包含代码语句的只读的内存页的内存地址;若操作系统发出执行信号时,CPU通过DTLB获得只包含代码语句的只执行的内存页的内存地址;
S5:在操作系统刷新TLB或刷新TLB表项时,将只读的内存页中的数据语句写回到只执行的内存页中,同时将只执行的内存页的代码写回到只读的内存页中;
S6:在操作系统进行覆盖操作之前,判断处理器中的W_ERROR_BIT位是否被置位;若是则不做覆盖任理;否则,覆盖TLB和DTLB指向的内存页面。
2.如权利要求1所述的防御方法,其特征在于,步骤S1包括如下子步骤:
S11.将库文件的代码段的数据语句储存于临时文件;
S12.在库文件中增加新段,并将临时文件中储存的数据语句复制至新段。
3.如权利要求2所述的防御方法,其特征在于,所述步骤S11具体为:根据库文件的代码段的语句的操作码是否为空,判断该语句是否为数据语句,是则将该语句储存入临时文件,否则对该语句不作任何处理。
4.如权利要求2所述的防御方法,其特征在于,所述步骤S12具体为:将库文件的头部中的段的数值+1;在库文件的bound import段以及security段之前插入新段,令所述新段中保存的语句为临时文件中的数据语句;修改库文件的头字节以及校验和。
5.如权利要求1所述的防御方法,其特征在于,所述方法用于基于windows平台的虚拟系统。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610375304.5A CN106096407B (zh) | 2016-05-31 | 2016-05-31 | 一种代码复用攻击的防御方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610375304.5A CN106096407B (zh) | 2016-05-31 | 2016-05-31 | 一种代码复用攻击的防御方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106096407A CN106096407A (zh) | 2016-11-09 |
CN106096407B true CN106096407B (zh) | 2020-02-18 |
Family
ID=57229631
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610375304.5A Expired - Fee Related CN106096407B (zh) | 2016-05-31 | 2016-05-31 | 一种代码复用攻击的防御方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106096407B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109446802A (zh) * | 2018-11-13 | 2019-03-08 | 国网江苏省电力有限公司电力科学研究院 | 一种抵抗实时代码复用攻击的防御方法 |
CN110096453B (zh) * | 2019-04-11 | 2020-01-03 | 北京华三通信技术有限公司 | 数据处理方法及装置 |
CN110610086B (zh) * | 2019-08-30 | 2021-06-18 | 北京卓识网安技术股份有限公司 | 非法代码识别方法、系统、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101673332A (zh) * | 2009-10-12 | 2010-03-17 | 湖南大学 | 一种基于哈佛体系结构的内核代码保护方法 |
CN102436410A (zh) * | 2011-12-12 | 2012-05-02 | 华中科技大学 | 虚拟机检查点的在线保存方法 |
CN102663312A (zh) * | 2012-03-20 | 2012-09-12 | 中国科学院信息工程研究所 | 一种基于虚拟机的rop攻击检测方法及系统 |
CN103955438A (zh) * | 2014-05-21 | 2014-07-30 | 南京大学 | 基于硬件辅助虚拟化技术的进程内存保护方法 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103885770A (zh) * | 2014-01-21 | 2014-06-25 | 唐道成 | 单片机从可执行文件找回汇编文件的实现方法 |
US9305167B2 (en) * | 2014-05-21 | 2016-04-05 | Bitdefender IPR Management Ltd. | Hardware-enabled prevention of code reuse attacks |
CN105095762B (zh) * | 2015-07-31 | 2017-10-10 | 中国人民解放军信息工程大学 | 基于地址随机和段隔离的全局偏移表保护方法 |
CN105022956B (zh) * | 2015-08-14 | 2018-11-09 | 中国科学院计算技术研究所 | 一种抵御代码重用攻击的方法 |
CN105335656A (zh) * | 2015-11-02 | 2016-02-17 | 南京大学 | 基于二进制改写和动态随机化的软件安全增强方法 |
CN105224864B (zh) * | 2015-11-04 | 2018-05-04 | 中国科学院计算技术研究所 | 一种抵御代码重用攻击的工作进程随机化方法及系统 |
-
2016
- 2016-05-31 CN CN201610375304.5A patent/CN106096407B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101673332A (zh) * | 2009-10-12 | 2010-03-17 | 湖南大学 | 一种基于哈佛体系结构的内核代码保护方法 |
CN102436410A (zh) * | 2011-12-12 | 2012-05-02 | 华中科技大学 | 虚拟机检查点的在线保存方法 |
CN102663312A (zh) * | 2012-03-20 | 2012-09-12 | 中国科学院信息工程研究所 | 一种基于虚拟机的rop攻击检测方法及系统 |
CN103955438A (zh) * | 2014-05-21 | 2014-07-30 | 南京大学 | 基于硬件辅助虚拟化技术的进程内存保护方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106096407A (zh) | 2016-11-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8479174B2 (en) | Method, computer program and computer for analyzing an executable computer file | |
US8799879B2 (en) | Method and apparatus for protecting translated code in a virtual machine | |
US7757035B2 (en) | Method for optimizing virtualization technology and memory protections using processor-extensions for page table and page directory striping | |
US10310991B2 (en) | Timely address space randomization | |
US8739160B1 (en) | Methods and systems for safe execution of guest code in virtual machine context | |
US7313669B2 (en) | Virtual translation lookaside buffer | |
US9129106B2 (en) | Systems and methods for secure in-VM monitoring | |
KR102548226B1 (ko) | 제한 포인터의 사용을 제어하는 장치 및 방법 | |
CN106096407B (zh) | 一种代码复用攻击的防御方法 | |
JP7291149B2 (ja) | メモリ・アクセスにおける保護タグ・チェックの制御 | |
KR20220045211A (ko) | 캐패빌리티 기입 어드레스 추적 | |
EP3881189B1 (en) | An apparatus and method for controlling memory accesses | |
CN107463513B (zh) | 在存储位置之间转移控制的系统和方法 | |
CN108052415B (zh) | 一种恶意软件检测平台快速恢复方法及系统 | |
JP2021512405A (ja) | メモリ・アクセスにおける保護タグ・チェックの制御 | |
KR20230017832A (ko) | Tag 체킹 장치 및 방법 | |
JP7369720B2 (ja) | アクションをトリガするための装置及び方法 | |
JP2024517627A (ja) | ケイパビリティを使用してメモリへのアクセスを制約するための技法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20200218 Termination date: 20200531 |
|
CF01 | Termination of patent right due to non-payment of annual fee |