System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 基于gadget质量实时载入的代码复用攻击防御方法技术_技高网

基于gadget质量实时载入的代码复用攻击防御方法技术

技术编号:43679501 阅读:2 留言:0更新日期:2024-12-18 21:01
本发明专利技术涉及系统安全软件漏洞防御领域,公开了一种基于gadget质量实时载入的代码复用攻击防御方法,包括如下步骤:预处理阶段获取程序代码段,并对代码段中的所有函数的指令进行静态分析,获取整个程序中的总gadget数量;对获取的gadget进行危险程度评估;初始化阶段进行线程池初始化、备用区域和执行区域初始化,以及gadget信息存储;实时装卸载阶段父进程进行监控,子进程运行可执行程序;当发现为0xCC时进行装载,当父进程监控到执行区域中gadget总数或者执行区域中gadget总危险程度分数超过设定阈值时进行卸载。本发明专利技术所公开的方法可以更细粒度地装载与卸载,大幅降低了攻击面和危险程度。

【技术实现步骤摘要】

本专利技术涉及系统安全软件漏洞防御领域,特别涉及一种基于gadget质量实时载入的代码复用攻击防御方法


技术介绍

1、在当今数字化时代,计算机系统安全已成为广泛关注的焦点之一。在计算机系统安全领域,一种常见的攻击是代码复用攻击。相较于传统的注入攻击,代码复用攻击无需注入代码,而是直接在漏洞点使用已有的汇编指令片段(称为gadget),通过执行多个gadget片段,称为gadget链,从而修改程序的返回地址等,进而更改程序的控制流,获取系统权限,实现恶意攻击的目的。

2、可以看到,要实现攻击,需要满足以下一些条件:(1)存在漏洞利用点;(2)攻击者知道多个可利用的代码片段的确切内存地址;(3)多个可利用的代码片段同时在内存中;(4)更改控制流。

3、因此,现有的防御方案也是从破坏以上条件来进行防御当前,国内外对代码复用攻击的防御机制进行了深入的研究,主要分为随机化、阈值监测、控制流完整性、软件去膨胀这几种方法。经过多年的发展,软件去膨胀方法逐渐活跃了起来,它是基于破坏条件(3)来进行防御的。软件去膨胀分为两种,一种是代码层面的去膨胀,通过删去不必要的代码,以减少代码暴露面;另外一种是内存层面的去膨胀,在内存中,仅确保一部分代码被暴露出来。代码层面的去膨胀需要源码,但一些软件并不会提供源码。此外,若删去的代码过多,可能会删除了必要代码,删去的代码过少,又降低了防御效果。因此,内存层面的去膨胀发展起来。该类方法关注实时的内存代码量,通过实时将代码加载到内存与实时卸载代码的方式,使得内存中的代码量较低,攻击者无法保证多个可利用的代码片段同时在内存中,从而无法构造gadget链,实现了防御效果。

4、但现有的实时加载与卸载方式以函数为粒度,不同程序需要分门别类地设计函数数量上限阈值,同时,若程序函数数量较少,各类函数大小分布不均,可能会出现几乎整个代码段都存在于内存中,并没有降低攻击面。


技术实现思路

1、为解决上述技术问题,本专利技术提供了一种基于gadget质量实时载入的代码复用攻击防御方法,以达到更细粒度地装载与卸载,大幅降低了攻击面和危险程度的目的。

2、为达到上述目的,本专利技术的技术方案如下:

3、一种基于gadget质量实时载入的代码复用攻击防御方法,包括如下步骤:

4、步骤1,预处理阶段:

5、获取程序代码段,并对代码段中的所有函数的指令进行静态分析,自定义每n条指令为一个gadget,获取整个程序中的总gadget数量;对获取的gadget进行危险程度评估,确定各gadget的危险程度分数,并存储到文件中;

6、步骤2,初始化阶段:

7、线程池初始化:创建线程任务类型,以及任务队列,同时,创建多个线程;

8、备用区域和执行区域初始化:将程序代码段全部拷贝到备用区域,将执行区域清空,清空是将执行区域的代码段全部修改为0xcc;同时设置备用区域为只读权限,执行区域可读可执行;

9、gadget信息存储:将预处理阶段获取到的文件中的gadget的地址和大小存放到hash表中;

10、步骤3,实时装卸载阶段:

11、创建父子进程的方式实施监控,父进程进行监控,子进程运行可执行程序;

12、当子进程企图执行代码片段时,发现为0xcc,而不是程序指令,这时父进程捕获到对应信号,此时需要装载,分发装载任务给线程池,让线程通过地址,查找hash表,找到对应的大小,在备用区域查找到对应gadget的所有指令,加载到执行区域中,子进程在指令被加载回之后继续执行;

13、当父进程监控到执行区域中gadget总数超过设定阈值或者执行区域中gadget总危险程度分数超过设定阈值时,此时需要卸载,将执行区域已有的代码片段直接修改为0xcc,使得该部分不可执行。

14、上述方案中,步骤1中,自定义每5条指令为一个gadget,当到达函数结尾时,将剩下的指令设定为一个gadget。

15、上述方案中,步骤1中,首先获取所有call、jmp指令的目标地址,存入一个称为target的list结构体中,接着在获取gadget时,在call、jmp处进行截断。

16、上述方案中,步骤2中,将危险程度分为4个等级,1表示危险程度最低,4表示最危险;具体划分原则如下:

17、存在pop reg形式,或包含popa、popal的指令危险程度分数为4;

18、包含ret、call、jmp指令的危险程度分数为3;

19、涉及rip、rsp、rbp、eip、esp、ebp指令的危险程度分数为3;

20、使用特权指令的危险程度分数为3;

21、存在内存引用指令的危险程度分数为2;

22、其余指令危险程度分数为1。

23、上述方案中,步骤3中,子进程为多线程程序,父进程也通过多线程实时监控,父子进程通过共享内存的方式让子进程在固定一块内存上执行。

24、上述方案中,步骤3中,为了让子进程在固定的一块内存上执行,需要先获取子进程参数、环境变量,以及子进程入口点信息;程序的参数、环境变量可通过进程初始化栈获取,为了模拟执行,需要定义一个新栈,自定义的新栈是用户态的栈;子进程入口点信息可直接通过elf header获取。

25、上述方案中,步骤3中,子进程运行可执行程序时,需要让子进程跳转到执行区域,因此先保存当前上下文,包括各类通用寄存器,然后跳转到执行区域的子进程入口点处;这部分通过一小段汇编代码实现,通过push reg方式存储各类通用寄存器信息,再通过jmp方式跳转到子进程入口点,后续通过pop指令恢复通用寄存器信息。

26、上述方案中,步骤3中,卸载时,采用lru批量卸载策略。

27、上述方案中,步骤3中,卸载时,使用lru算法将最久未使用的多个gadget进行卸载。

28、通过上述技术方案,本专利技术提供的一种基于gadget质量实时载入的代码复用攻击防御方法具有如下有益效果:

29、1)更细粒度地装载与卸载,真正做到设定阈值与实际运行结果一致,不会出现内存中代码数量远超期望阈值的情况;

30、2)不仅关注攻击面地减少,也关注gadget质量,具有可扩展性,若出现新的攻击类型,只需要根据该类特征给相应gadget评估危险等级即可;

31、3)使用多线程、hash表、lru方式优化,充分利用各类程序特点,并考虑了程序局部性,避免频繁装卸载,降低细粒度带来的开销;

32、4)用户可自定义gadget指令个数、gadget数量阈值、gadget危险评分阈值,让用户可根据需要,在保障安全和运行效率之间自行抉择;

33、5)在防御效果方面,通过对自定义的rop攻击、cve-2016-10190、 cve-2017-13089等进行测试,可以有效防御攻击;

本文档来自技高网...

【技术保护点】

1.一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,包括如下步骤:

2.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤1中,自定义每5条指令为一个gadget,当到达函数结尾时,将剩下的指令设定为一个gadget。

3.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤1中,首先获取所有call、jmp指令的目标地址,存入一个称为target的list结构体中,接着在获取gadget时,在call、jmp处进行截断。

4.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤2中,将危险程度分为4个等级,1表示危险程度最低,4表示最危险;具体划分原则如下:

5.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤3中,子进程为多线程程序,父进程也通过多线程实时监控,父子进程通过共享内存的方式让子进程在固定一块内存上执行。

6.根据权利要求5所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤3中,为了让子进程在固定的一块内存上执行,需要先获取子进程参数、环境变量,以及子进程入口点信息;程序的参数、环境变量可通过进程初始化栈获取,为了模拟执行,需要定义一个新栈,自定义的新栈是用户态的栈;子进程入口点信息可直接通过ELFheader获取。

7.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤3中,子进程运行可执行程序时,需要让子进程跳转到执行区域,因此先保存当前上下文,包括各类通用寄存器,然后跳转到执行区域的子进程入口点处;这部分通过一小段汇编代码实现,通过push reg方式存储各类通用寄存器信息,再通过jmp方式跳转到子进程入口点,后续通过pop指令恢复通用寄存器信息。

8.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤3中,卸载时,采用LRU批量卸载策略。

9.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤3中,卸载时,使用LRU算法将最久未使用的多个gadget进行卸载。

...

【技术特征摘要】

1.一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,包括如下步骤:

2.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤1中,自定义每5条指令为一个gadget,当到达函数结尾时,将剩下的指令设定为一个gadget。

3.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤1中,首先获取所有call、jmp指令的目标地址,存入一个称为target的list结构体中,接着在获取gadget时,在call、jmp处进行截断。

4.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤2中,将危险程度分为4个等级,1表示危险程度最低,4表示最危险;具体划分原则如下:

5.根据权利要求1所述的一种基于gadget质量实时载入的代码复用攻击防御方法,其特征在于,步骤3中,子进程为多线程程序,父进程也通过多线程实时监控,父子进程通过共享内存的方式让子进程在固定一块内存上执行。

6.根据权利要求5所述的一种基于gadget质...

【专利技术属性】
技术研发人员:唐睿曲海鹏应凌云高雅雯
申请(专利权)人:中国海洋大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1