针对基于面向返回编程实现代码注入攻击的检测方法

文档序号:31451067发布日期:2022-09-07 13:17阅读:120来源:国知局
针对基于面向返回编程实现代码注入攻击的检测方法

1.本发明涉及恶意代码注入检测技术领域,具体涉及一种针对基于面向返回编程实现代码注入攻击的检测方法。


背景技术:

2.在网络攻击过程中,攻击者往往首先通过利用漏洞,或者借助社会工程学攻击手段获得目标系统的初始访问权。在获得被攻击系统的初始落脚点之后,攻击者会进一步地将恶意软件植入到目标系统中,以获得对系统的持久和隐蔽控制,并建立远程控制服务器与被攻击系统之间的指挥与控制通信,以实现对目标系统的远程控制。
3.在植入恶意软件过程中,为了躲避杀毒软件的检测,攻击者往往不会将恶意软件整体一次性地植入目标系统,而是将恶意软件的功能模块予以分割,划分成不同的恶意代码片段,然后采用相关的代码注入方式将这些代码片段注入到目标系统中正常运行的进程模块中,然后再通过远程调用的方式执行这些恶意程序片段。这些正常运行并被注入代码的进程通常被称为目标进程。在选择要注入代码的目标进程时,恶意软件经常会刻意挑选一些“可信”进程。所谓“可信”进程,即是指被操作系统默认为正常的进程。比如,csrss.exe、explorer.exe、lsass.exe、smss.exe等。因为这些进程通常是操作系统本身自带的模块,所以将恶意代码片段注入到这些进程中时不易被杀毒软件发现。
4.通常,恶意软件注入代码片段的基本过程为,首先,在目标进程中分配地址空间;然后,在目标进程中创建线程;最后,将代码片段拷贝到所分配的地址空间中。当需要执行这些注入的代码片段时,恶意软件通过地址调用的方式调用注入代码片段的地址就可以执行这些代码。上述代码注入过程的基本实现原理如图1所示。针对这种代码注入的攻击方式,反病毒软件通常首先枚举当前系统中运行的进程列表,然后检查某一进程地址空间中是否存在地址分配、代码拷贝等行为,以此发现可疑的进程地址操作行为,并向用户发出报警信息,以提醒用户检查可能隐藏的恶意进程行为。
5.针对上述代码注入方式存在的特点,为了更为隐蔽地躲避反病毒软件的查杀,一些新的恶意软件又采用了新的恶意代码注入方式,即通过采用面向返回编程的方式,直接借用目标进程中的原有代码片段来实现预定的恶意功能,并将这些代码片段通过返回调用的方式实现互相调用,由此构建起一个完整的恶意攻击行为链。这种新的代码注入攻击的基本原理是,通过采用面向返回的编程方式,借用系统进程自身的代码片段来实现代码注入攻击的效果。当前,针对这种新型的恶意代码注入方式,检测人员通常通过人工方式进行分析,尚未有自动化的检测方法。


技术实现要素:

6.有鉴于此,本发明提出了一种针对基于面向返回编程实现代码注入攻击的检测方法,能够实现对新型攻击手段高效和准确的自动化检测。
7.为实现上述目的,本发明针对基于面向返回编程实现代码注入攻击的检测方法,
包括如下步骤:
8.步骤1,枚举系统当前的进程列表;
9.步骤2,对每一个当前运行的进程,分析该进程的共享节;
10.步骤3,对于各个共享节,检查其中是否发生了地址分配和内容拷贝操作;
11.如果未发生上述操作过程,则结束检测;如果发生了上述操作过程,则进一步分析该进程共享节的地址范围,然后执行步骤4;
12.步骤4,分析共享节中植入代码中return指令的调用地址,并判断该地址是否在该共享节的地址范围内;
13.如果未超出共享节的地址范围,则进一步地分析该调用地址的函数例程,并构建此次代码注入攻击的攻击链,结束检测;
14.如果超出了共享节的地址范围,则执行步骤5;
15.步骤5,基于代码的调用地址,确定该调用地址所属的进程及该地址具体对应的函数例程;
16.步骤6,分析当前函数例程中是否存在返回地址调用情况;如发生,则执行步骤7,否则构建此次代码注入攻击的攻击链,结束检测;
17.步骤7,分析步骤6中人为设置函数返回地址对应的进程和函数例程;
18.步骤8,判断所述返回地址是否超出了当前进程的地址空间范围;
19.如果超出了当前进程的地址空间范围,则将人为设置函数返回地址对应的函数例程作为当前函数例程,转回步骤6;
20.如果未超出当前进程的地址空间范围,则分析该调用地址的函数例程,并构建此次代码注入攻击的攻击链,结束检测。
21.其中,所述步骤3中,对于各个共享节,检查其中是否发生了地址分配和内容拷贝操作的具体方式为:检查是否执行了如下操作:
22.①
分配地址空间allocatememory;
23.②
创建线程createremotethread;
24.③
植入代码writeprocessmemory。
25.其中,所述步骤3中,分析该进程共享节的地址范围的方式为:通过解析该进程的结构,获取该进程共享节的地址范围。
26.其中,所述步骤6中,通过分析函数例程中是否存在修改寄存器地址的行为判断是否存在返回地址调用情况。
27.其中,所述步骤8中,分析该调用地址的函数例程,并构建此次代码注入攻击的攻击链的具体方式为:按照地址找到所调用的当前进程中的代码片段,基于前述过程涉及的进程和函数例程,构建面向返回编程的代码注入攻击链。
28.有益效果:
29.本发明对:恶意软件中实现恶意功能的代码片段可能分布在同一个进程地址空间的不同位置,或者分布在不同进程的地址空间中;这些程序片段之间通过地址调用方式实现执行流程的连接,由此形成一个完整的攻击过程;恶意软件会精心修改每一个程序片段的返回地址(即return地址),实现对程序执行流程的控制;恶意软件为了隐蔽其初始程序片段,也会精心挑选一个可信进程,然后将其初始程序片段隐蔽存放到可信进程的共享地
址空间中。以上关键环节进行监测分析,发现其隐藏的恶意攻击行为,实现了对采用面向返回编程实现代码注入攻击的自动化检测。
附图说明
30.图1为通过在目标进程中分配地址空间实现恶意代码注入的过程示意图。
31.图2为通过采用面向返回编程方式实现代码注入攻击示意图。
32.图3为本发明针对面向返回编程实施代码注入攻击的检测原理示意图。
33.图4为针对基于面向返回编程实现代码注入的自动化检测流程图。
具体实施方式
34.下面结合附图并举实施例,对本发明进行详细描述。
35.面向返回编程(return-oriented programming,简称rop)是一种计算机安全攻击技术,攻击者通过控制堆栈调用以劫持程序控制流程并执行机器语言指令序列片段(称为gadgets)。每一个程序片段gadget通常以return(返回)指令结束,并位于内存中的子例程中。
36.通过面向返回编程实现代码注入攻击的基本原理与过程为:恶意软件根据自身恶意功能需求,选择可信目标进程中的代码片段,并设置代码片段执行结束后的返回地址进一步地执行其它代码片段,由此通过地址调用的方式间接调用这些可信目标进程中的代码片段,并将这些代码片段连接起来运行,构建起一个代码执行链,依此实现自身预定的恶意功能。其基本原理与过程如图2所示。从图2中可以看出,这种采用面向返回编程方式实现代码注入攻击的过程有以下特点:
37.(1)恶意软件中实现恶意功能的代码片段可能分布在同一个进程地址空间的不同位置,或者分布在不同进程的地址空间中;
38.(2)这些程序片段之间通过地址调用方式实现执行流程的连接,由此形成一个完整的攻击过程;
39.(3)恶意软件会精心修改每一个程序片段的返回地址(即return地址),实现对程序执行流程的控制;
40.(4)恶意软件为了隐蔽其初始程序片段,也会精心挑选一个可信进程,然后将其初始程序片段隐蔽存放到可信进程的共享地址空间中。
41.所以,要想实现对采用面向返回编程实现代码注入攻击的自动化检测,就需要对上述过程中的这几个关键环节进行监测分析,以发现其隐藏的恶意攻击行为,需要重点解决以下几个问题:
42.(1)在某一个进程内部,其共享空间中是否通过地址分配拷入了新的代码?
43.(2)对于一个进程内部的某一段程序,是否被其它进程所调用?是否调用了其它进程中的函数例程?
44.(3)对于一个进程地址空间中的一个函数例程,执行结束后的返回地址是否存在人为修改的情况?此现象可以证明,程序执行过程被人为控制。
45.(4)对于一个进程地址空间中的一个函数例程,如何发现其执行范围超出了当前进程的地址空间?即当前进程的执行过程是否调用了其它进程中的函数例程?
46.(5)综合上述分析因素,系统分析进程之间是否存在交叉调用行为?即是否存在一个通过设置函数返回地址实现代码注入攻击链的攻击过程?
47.如果发生了上述几个有代表性的事件,就可以认定发生了面向返回编程的代码注入攻击行为。上述过程的检测原理如图3所示。
48.基于图3所示的检测原理,针对通过面向返回编程实现代码注入攻击的检测过程的总体流程如图4所示,具体步骤如下:
49.步骤1,枚举系统当前的进程列表;
50.步骤2,对每一个当前运行的进程,分析该进程的共享节basenamedobjects;
51.步骤3,对于各个共享节,检查其中是否发生了地址分配和内容拷贝操作。即检查是否执行了如下操作:
52.①
分配地址空间allocatememory;
53.②
创建线程createremotethread;
54.③
植入代码writeprocessmemory。
55.如果未发生上述操作过程,则证明不存在攻击行为,结束检测。如果发生了上述操作过程,证明该进程的共享节中被植入了代码,则进一步分析该进程共享节的地址范围,然后执行步骤4;
56.其中对于进程共享节中植入的初始代码,分析其是否后续执行了其它代码。因为共享节的安全属性被设置为数据执行保护(dep,data execution protected),所以,如果该植入的代码要继续后续的恶意性操作,必须要调用超出该共享节地址范围的代码。通过解析该进程的结构,获取该进程共享节的地址范围。
57.步骤4,分析共享节中植入代码中return指令的调用地址,并判断该地址是否在该共享节的地址范围内;
58.如果未超出共享节的地址范围,则证明本次调用过程仅发生在该进程内部。由此,进一步地分析该调用地址的函数例程,并构建此次代码注入攻击的攻击链,结束检测。
59.如果超出了共享节的地址范围,则证明该共享节中植入的代码调用了其它进程空间中的代码,同时证明植入到共享节的代码片段存在恶意性,执行步骤5;
60.步骤5,基于代码的调用地址,确定该调用地址所属的进程及该地址具体对应的函数例程;
61.步骤6,分析当前函数例程中是否存在返回地址调用情况。通常,攻击者通过人为修改指定返回地址的地址寄存器的值实现对特定代码的调用,即实现对预定地址的返回地址调用,因此分析函数例程中是否存在修改寄存器地址的行为判断是否存在返回地址调用情况。如发生,则证明该函数例程中存在人为设置函数返回地址的情况,执行步骤7,否则构建此次代码注入攻击的攻击链,结束检测。
62.步骤7,分析步骤6中人为设置函数返回地址对应的进程和函数例程;
63.步骤8,判断所述返回地址是否超出了当前进程的地址空间范围;
64.如果超出了当前进程的地址空间范围,则将人为设置函数返回地址对应的函数例程作为当前函数例程,转回步骤6;
65.如果未超出当前进程的地址空间范围,则分析该调用地址的函数例程,并构建此次代码注入攻击的攻击链,结束检测。分析该调用地址的函数例程,并构建此次代码注入攻
击的攻击链的具体方式为:按照地址找到所调用的当前进程中的代码片段,基于前述过程涉及的进程和函数例程,构建面向返回编程的代码注入攻击链。
66.在此检测过程中,不会出现因进程之间连续不断的交叉调用而导致陷入死循环的情况。因为:(1)通过修改函数地址寄存器的值以实现函数返回地址人为修改的过程实现难度较大,需要躲避操作系统安全防护机制的监测;(2)人为设定的返回地址所对应的进程空间通常是由攻击者所精心设计的程序片段,该程序片段的执行同样也要躲避操作系统安全防护机制的监测。实现上述两点既需要攻击者具备较高的技术水平,同时又要求被攻击目标系统上的安全防护存在漏洞,所以实际情况中不会出现连续不断的通过修改返回地址实现代码注入攻击的实例。
67.由此,可以构建起本次基于面向返回编程实现代码注入攻击的完整攻击链,并最终实现对面向返回编程实现代码注入攻击的自动化检测。
68.综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1