CN102081720B - 一种实时防护中检测进程创建的方法及系统 - Google Patents
一种实时防护中检测进程创建的方法及系统 Download PDFInfo
- Publication number
- CN102081720B CN102081720B CN2010105603350A CN201010560335A CN102081720B CN 102081720 B CN102081720 B CN 102081720B CN 2010105603350 A CN2010105603350 A CN 2010105603350A CN 201010560335 A CN201010560335 A CN 201010560335A CN 102081720 B CN102081720 B CN 102081720B
- Authority
- CN
- China
- Prior art keywords
- newly
- built
- application layer
- built process
- driver
- 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.)
- Active
Links
Images
Abstract
本发明公开了一种实时防护中检测进程创建的方法,新建进程后,驱动程序将应用层进行检测时所需要的新建进程的相关信息上报给应用层,通知应用层进行扫描检测;在应用层根据新建进程的相关信息进行扫描检测时将新建进程挂起。本发明还公开了一种实时防护中检测进程创建的系统,系统中的进程挂起单元用于在应用层进行扫描检测时,驱动程序将新建进程挂起。采用本发明的方法及系统,无需中断创建者进程,也能实现对新建进程的检测。
Description
技术领域
本发明涉及进程创建的检测技术,尤其涉及一种实时防护中检测进程创建的方法及系统。
背景技术
目前,各种实时防护类软件都会监控进程的创建,所应用的场景有两种:一、记录进程ID和进程路径等相关信息,用于之后主动防御进行事件拦截时可以很容易的根据进程ID找到进程的相关信息;二、在进程创建时用于应用层对进程的执行环境、系统内存等进行扫描检测,当经检测确认进程安全时才允许进程继续执行,否则将会阻止进程的启动。针对第二种应用场景而言,现有技术中一般都是在进程被创建时由驱动程序通知应用层进行扫描检测,在驱动程序等待应用层的检测结果的这段时间内,会中断创建者进程的继续执行,当应用层将检测结果通知驱动程序或等待超时发生时,才继续创建者进程的执行。
采用现有技术所存在的缺点是:在驱动程序等待应用层检测结果的这段时间内,由于需中断创建者进程的执行,而作为所有用户进程创建者的创建者进程是所有用户进程的父进程,因此,作为父进程的创建者进程一旦被中断执行,会导致其所控制进程的一系列连锁反应,比如容易出现桌面花屏、无法再新建进程等问题。
发明内容
有鉴于此,本发明的主要目的在于提供一种实时防护中检测进程创建的方法及系统,无需中断创建者进程,也能实现对新建进程的检测。
为达到上述目的,本发明的技术方案是这样实现的:
一种实时防护中检测进程创建的方法,该方法包括:新建进程后,驱动程序将应用层进行检测时所需要的新建进程的相关信息上报给应用层,通知应用层进行扫描检测;在应用层根据所述新建进程的相关信息进行扫描检测时将所述新建进程挂起;
将所述新建进程挂起具体包括:所述驱动程序通过调用Windows内核未导出的用于新建进程挂起的应用编程接口(API),将所述新建进程挂起。
其中,该方法还包括:所述应用层将检测结果返回所述驱动程序,当所述检测结果为安全时,所述驱动程序将所述新建进程恢复。
其中,进行所述上报前,该方法还包括:所述驱动程序加载时注册进程创建的回调通知函数,每当新进程创建时会调用已注册的所述进程创建的回调通知函数。
其中,将所述新建进程挂起后,该方法还包括:退出所述进程创建的回调通知函数。
其中,将所述新建进程恢复具体包括:所述驱动程序通过调用Windows内核未导出的用于新建进程恢复的API,将之前被挂起的新建进程重新恢复,并继续执行所述新建进程。
一种实时防护中检测进程创建的系统,该系统包括:上报单元、检测单元、进程挂起单元;其中,
所述上报单元,用于新建进程后,驱动程序将应用层进行检测时所需要的新建进程的相关信息上报给应用层,通知应用层进行扫描检测;
所述检测单元,用于应用层根据所述新建进程的相关信息进行扫描检测;
所述进程挂起单元,用于在应用层进行扫描检测时,所述驱动程序将所述新建进程挂起;
所述进程挂起单元,进一步用于所述驱动程序通过调用Windows内核未导出的用于新建进程挂起的API,将所述新建进程挂起。
其中,该系统还包括:进程恢复单元,用于所述应用层将检测结果返回所述驱动程序,当所述检测结果为安全时,所述驱动程序将所述新建进程恢复。
其中,所述进程恢复单元,进一步用于所述驱动程序通过调用Windows内核未导出的用于新建进程恢复的API,将之前被挂起的新建进程重新恢复,并继续执行所述新建进程。
本发明新建进程后,驱动程序将应用层进行检测时所需要的新建进程的相关信息上报给应用层,通知应用层进行扫描检测;在应用层根据新建进程的相关信息进行扫描检测时将新建进程挂起。
采用本发明,由于是将新建进程挂起,而不是一直等待直到应用层返回检测结果,因此,不像现有技术需在等待的这段时间中断创建者进程的执行,而是在新建进程挂起的这段时间内可以确保创建者进程的继续执行。从而,无需中断创建者进程,也能实现对新建进程的检测。
附图说明
图1为本发明方法实施例的实现流程示意图;
图2为本发明系统实施例的组成结构示意图。
具体实施方式
本发明的基本思想是:新建进程后,驱动程序将应用层进行检测时所需要的新建进程的相关信息上报给应用层,通知应用层进行扫描检测;在应用层根据新建进程的相关信息进行扫描检测时将新建进程挂起。
为使本发明的目的、技术方案和优点更加清楚明白,以下举实施例并参照附图,对本发明进一步详细说明。
以下将现有技术和本发明进行对比阐述,以更好地体现本发明相对于现有技术的优点。
就现有技术而言,目前在实时防护中,通常都会通过驱动程序先向Windows内核注册进程创建的回调通知函数,从而每当有新进程创建时,Windows内核就会通知已注册的该进程创建的回调通知函数,使得监控程序有机会检测新创建的进程。当驱动程序收到进程创建通知时,把新建进程的一些信息,如进程ID、路径等上报给应用层进行扫描,以执行安全检测,在驱动程序等待应用层的检测结果的这段时间内,会中断创建者进程的继续执行;应用层收到驱动程序上报的这些信息后,根据自身的规则对系统内存环境、新建进程的目录等进行扫描检测,确认安全或危险后,将检测结果告知驱动程序,驱动程序停止等待,继续执行之前中断的创建者进程,根据应用层的检查结果放行或杀死新建进程,即当检查结果为安全时,放行新建进程,允许新建进程的启动;当检查结果为危险时,杀死新建进程,阻止新建进程的启动。
由于Windows系统中所有用户进程的创建者都是它的父进程,也就是说创建者进程是作为父进程存在的,该进程创建的回调通知函数也是在父进程创建子进程的过程中被调用的,因此,在该进程创建的回调通知函数中的一切动作都是发生在父进程的线程执行环境中。
综上所述,可以看到现有技术中进程创建的检测方案存在以下几个很明显的缺点:
1、由于进程创建的回调通知函数,其调用者是新建进程的父进程,因此,在进程创建的回调通知函数里等待应用层的检查结果会导致父进程被卡住,如果父进程是Windows Explorer或者是其他的界面进程,则在检测新建进程的这段时间内移动或刷新窗口都会导致很明显的屏幕变花,体验很差。更为重要的是,如果父进程尤其是Windows Explorer被卡住,用户将不能在桌面上进行任何操作,windows自身也无法进行消息通知,必须等到应用层检查结束之后才能继续,严重降低了系统性能。
2、由于进程创建的回调通知函数保存在Windows内核的一个数据结构中,Windows内核在访问进程创建的回调通知函数之前会申请加锁进行保护,因此,如果在进程创建的回调通知函数里等待应用层的检查结果,这个数据结构将会长时间处于加锁状态,如果此时再有新建进程启动,系统将会因为申请不到对该数据结构访问的锁而无法立即启动新建进程,导致系统卡死,需要直到等待结束、退出进程创建的回调通知函数,锁被释放了新建进程才能得以成功创建。
区别于现有技术需在驱动程序等待应用层检测结果的这段时间内中断创建者进程的执行,本发明由于无需等待,因此也就无需中断创建者进程的执行。从而在无需中断创建者进程执行的前提下也能实现对新建进程的检测,进而根据检测结果对新建进程进行放行或拦截,能有效的避免屏幕变花、无法再新建进程导致系统卡死的问题。本发明是在进程创建的回调通知函数里不进行等待操作,而是驱动程序把新进程的信息上报给应用层后,通过驱动程序调用Windows内核未导出的一个应用编程接口(API)将新建进程暂时挂起(Suspend),然后就可以退出进程创建的回调通知函数了,不发生等待操作能够避免发生不必要的线程切换,不中断当前的指令流,丝毫不会影响到系统的总体性能和界面表现。当应用层检测完成把检测结果通知驱动程序之后,如果该进程的创建是安全的,则驱动程序再通过调用Windows内核未导出的另一个API将刚刚被挂起的新建进程恢复(Resume),使得它得以继续执行;如果是危险的,就直接杀掉进程。这里需要指出的是:由于在将新建进程暂时挂起时,此时新建进程还未得以执行,因此,此时把新建进程挂起是安全的,不会影响到新建进程的任何内部逻辑。新建进程被挂起后,其父进程的执行也不会受到影响而得以继续执行。也就是说,本发明由于无需等待而是采用挂起的方式,因此也就无需中断作为父进程的创建者进程的执行。
以下对本发明进行具体阐述。
一种实时防护中检测进程创建的方法,该方法主要包括以下内容:
一、驱动程序将应用层进行检测时所需要的新建进程的相关信息,上报给应用层,通知应用层进行扫描检测。
这里,驱动程序是根据进程ID得到进程的Windows内核对象指针,从而得到应用层检测所需要的新建进程的相关信息并上报给应用层。
这里,上报前还包括:驱动程序加载时注册进程创建的回调通知函数,每当新进程创建时会调用已注册的该进程创建的回调通知函数。
二、驱动程序调用Windows内核未导出的用于新建进程挂起的API。
这里,调用时需先获知该用于新建进程挂起的API的调用地址,之后根据调用地址调用该用于新建进程挂起的API。
这里,该用于新建进程挂起的API可以命名为NtSuspendProcess。
这里,由于该用于新建进程挂起的API在系统服务分发表中存在对应的索引ID,因此,根据索引ID可以得到该用于新建进程挂起的API的调用地址。也就是说,可以根据该用于新建进程挂起的API在系统服务分发表的索引ID找到其对应的调用地址。
三、驱动程序采用该用于新建进程挂起的API,将新建进程挂起。
这里,将新建进程挂起后,就可以退出进程创建的回调通知函数,而无需像现有技术那样在进程创建的回调通知函数一直等待直至应用层返回检测结果。
这里,因为这时新建进程还未得以执行,因此这个时候把新建进程挂起是安全的,不会影响到新建进程的任何内部逻辑。新建进程被挂起后,其父进程的执行也未受影响而得以继续执行,从而不会出现系统或界面被卡住等情况。
四、应用层根据新建进程的相关信息进行扫描检测,应用层检测完毕把检测结果通知驱动程序。
这里,应用层收到驱动程序上报的新建进程的相关信息后,根据规则进行安全检测,比如系统内存检查、工作目录扫描等。其中,所述新建进程的相关信息包括路径、进程ID等信息。
五、驱动程序根据检测结果执行放行或拦截新建进程启动的操作。
这里,如果检测结果是安全的,则驱动程序再通过调用Windows内核未导出的用于新建进程恢复的API,将之前被挂起的新建进程重新恢复,并使新建进程得以继续执行;如果检测结果是危险的,则驱动程序直接杀死这个新建进程,即执行拦截新建进程启动的操作。
这里,调用时需先获知该用于新建进程恢复的API的调用地址,之后根据调用地址调用用于新建进程恢复的API。
这里,该用于新建进程恢复的API可以命名为NtResumeProcess。
这里,由于该用于新建进程恢复的API在系统服务分发表中存在对应的索引ID,因此,根据索引ID可以得到该用于新建进程恢复的API的调用地址。也就是说,可以根据该用于新建进程恢复的API在系统服务分发表的索引ID找到其对应的调用地址。
方法实施例:本实施例为一个新建进程后对该新建进程进行检测的实例。
如图1所示,本实施例包括以下步骤:
步骤101、判断是否能获取到新建进程的相关信息,如果是,则将新建进程的相关信息上报给应用层,执行步骤102;否则,执行步骤106。
这里,是根据进程ID取得进程的Windows内核对象,从而获取新建进程的相关信息并上报给应用层。如果没有成功获取到新建进程的相关信息,则对新建进程放行,不做检测。
步骤102、判断是否获取到未导出API函数NtSuspendProcess的调用地址,如果是,则执行步骤103;否则,执行步骤106。
这里,是根据该API函数NtSuspendProcess在系统服务分发表的索引号找到其对应的函数地址。
步骤103:采用NtSuspendProcess挂起新建进程。
这里,由于是采用NtSuspendProcess挂起新建进程,而不是进行等待操作,因此,不影响新建进程的父进程的继续执行。
步骤104:应用层将根据新建进程的相关信息获得的检测结果通知驱动程序。
这里,应用层获取新建进程的相关信息后,根据配置的规则对新建进程进行检测,把检测结果通知给驱动程序。
步骤105:驱动程序根据检测结果判断是否对新建进程做出放行处理,如果是,则执行步骤106;否则,对新建进程进行拦截。
这里,根据应用层的检测结果,驱动程序执行恢复新建进程的操作;或者,执行杀死新建进程的拦截操作。
步骤106、新建进程继续执行。
一种实时防护中检测进程创建的系统,该系统包括:位于驱动程序侧的上报单元、位于应用层侧的检测单元、位于驱动程序侧的进程挂起单元。其中,上报单元用于新建进程后,驱动程序将应用层进行检测时所需要的新建进程的相关信息上报给应用层,通知应用层进行扫描检测。检测单元用于应用层根据所述新建进程的相关信息进行扫描检测。进程挂起单元用于在应用层进行扫描检测时,所述驱动程序将所述新建进程挂起。
这里,该系统还包括:位于驱动程序侧的进程恢复单元,进程恢复单元用于应用层将检测结果返回驱动程序,当检测结果为安全时,驱动程序将新建进程恢复。
这里,进程挂起单元进一步用于驱动程序通过调用Windows内核未导出的用于新建进程挂起的API,将新建进程挂起。
这里,进程恢复单元进一步用于驱动程序通过调用Windows内核未导出的用于新建进程恢复的API,将之前被挂起的新建进程重新恢复,并继续执行新建进程。
系统实施例:本实施例为本发明系统的一个优选实施例,如图2所示,该系统包括:驱动程序侧相连的上报单元、进程挂起单元及进程恢复单元,还包括应用层侧的检测单元。其中,上报单元用于新建进程后,驱动程序将应用层进行检测时所需要的新建进程的相关信息上报给应用层,通知应用层进行扫描检测;检测单元用于应用层根据新建进程的相关信息进行扫描检测。进程挂起单元用于在应用层进行扫描检测时,驱动程序通过调用Windows内核未导出的用于新建进程挂起的API,将新建进程挂起。进程恢复单元用于应用层将检测结果返回驱动程序,当检测结果为安全时,驱动程序通过调用Windows内核未导出的用于新建进程恢复的API,将之前被挂起的新建进程重新恢复,并继续执行新建进程。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (8)
1.一种实时防护中检测进程创建的方法,其特征在于,该方法包括:新建进程后,驱动程序将应用层进行检测时所需要的新建进程的相关信息上报给应用层,通知应用层进行扫描检测;在应用层根据所述新建进程的相关信息进行扫描检测时将所述新建进程挂起;
将所述新建进程挂起具体包括:所述驱动程序通过调用Windows内核未导出的用于新建进程挂起的应用编程接口(API),将所述新建进程挂起。
2.根据权利要求1所述的方法,其特征在于,该方法还包括:所述应用层将检测结果返回所述驱动程序,当所述检测结果为安全时,所述驱动程序将所述新建进程恢复。
3.根据权利要求2所述的方法,其特征在于,进行所述上报前,该方法还包括:所述驱动程序加载时注册进程创建的回调通知函数,每当新进程创建时会调用已注册的所述进程创建的回调通知函数。
4.根据权利要求3所述的方法,其特征在于,将所述新建进程挂起后,该方法还包括:退出所述进程创建的回调通知函数。
5.根据权利要求2至4中任一项所述的方法,其特征在于,将所述新建进程恢复具体包括:所述驱动程序通过调用Windows内核未导出的用于新建进程恢复的API,将之前被挂起的新建进程重新恢复,并继续执行所述新建进程。
6.一种实时防护中检测进程创建的系统,其特征在于,该系统包括:上报单元、检测单元、进程挂起单元;其中,
所述上报单元,用于新建进程后,驱动程序将应用层进行检测时所需要的新建进程的相关信息上报给应用层,通知应用层进行扫描检测;
所述检测单元,用于应用层根据所述新建进程的相关信息进行扫描检测;
所述进程挂起单元,用于在应用层进行扫描检测时,所述驱动程序将所述新建进程挂起;
所述进程挂起单元,进一步用于所述驱动程序通过调用Windows内核未导出的用于新建进程挂起的API,将所述新建进程挂起。
7.根据权利要求6所述的系统,其特征在于,该系统还包括:进程恢复单元,用于所述应用层将检测结果返回所述驱动程序,当所述检测结果为安全时,所述驱动程序将所述新建进程恢复。
8.根据权利要求7所述的系统,其特征在于,所述进程恢复单元,进一步用于所述驱动程序通过调用Windows内核未导出的用于新建进程恢复的API,将之前被挂起的新建进程重新恢复,并继续执行所述新建进程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105603350A CN102081720B (zh) | 2010-11-18 | 2010-11-18 | 一种实时防护中检测进程创建的方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010105603350A CN102081720B (zh) | 2010-11-18 | 2010-11-18 | 一种实时防护中检测进程创建的方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102081720A CN102081720A (zh) | 2011-06-01 |
CN102081720B true CN102081720B (zh) | 2013-01-02 |
Family
ID=44087678
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010105603350A Active CN102081720B (zh) | 2010-11-18 | 2010-11-18 | 一种实时防护中检测进程创建的方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102081720B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102413142A (zh) * | 2011-11-30 | 2012-04-11 | 华中科技大学 | 基于云平台的主动防御方法 |
CN102890641B (zh) * | 2012-08-30 | 2015-02-11 | 北京奇虎科技有限公司 | 一种进程行为控制的方法和装置 |
CN111800810B (zh) * | 2020-06-30 | 2022-09-13 | 展讯通信(上海)有限公司 | 智能设备及其wcn模块异常恢复的系统和方法 |
CN115794564A (zh) * | 2023-02-07 | 2023-03-14 | 北京江民新科技术有限公司 | 进程监视方法和计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1804806A (zh) * | 2006-01-16 | 2006-07-19 | 浙江大学 | Java操作系统中进程的实现和进程状态转换的方法 |
CN1900940A (zh) * | 2006-07-19 | 2007-01-24 | 谢朝霞 | 计算机安全启动的方法 |
CN101478407A (zh) * | 2008-01-03 | 2009-07-08 | 联想(北京)有限公司 | 在线安全登录的方法及装置 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040168157A1 (en) * | 2003-02-18 | 2004-08-26 | Robert Hundt | System and method for creating a process invocation tree |
US7185320B2 (en) * | 2003-06-27 | 2007-02-27 | Hewlett-Packard Development Company, L.P. | System and method for processing breakpoint events in a child process generated by a parent process |
US7836430B2 (en) * | 2006-07-21 | 2010-11-16 | Apple Inc. | Reversing execution of instructions in a debugger |
-
2010
- 2010-11-18 CN CN2010105603350A patent/CN102081720B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1804806A (zh) * | 2006-01-16 | 2006-07-19 | 浙江大学 | Java操作系统中进程的实现和进程状态转换的方法 |
CN1900940A (zh) * | 2006-07-19 | 2007-01-24 | 谢朝霞 | 计算机安全启动的方法 |
CN101478407A (zh) * | 2008-01-03 | 2009-07-08 | 联想(北京)有限公司 | 在线安全登录的方法及装置 |
Non-Patent Citations (1)
Title |
---|
孟庆倩,李清宝,魏珉.基于Windows环境进程监控的设计与实现.《信息工程大学学报》.2007,第8卷(第1期), * |
Also Published As
Publication number | Publication date |
---|---|
CN102081720A (zh) | 2011-06-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP6643128B2 (ja) | 仮想マシンイントロスペクションを通じたセキュリティ事象検出方法、装置、及び有形コンピュータ可読記憶媒体 | |
US10387649B2 (en) | Detecting malware when executing in a system | |
EP2427822B1 (en) | Exception raised notification | |
CN102081720B (zh) | 一种实时防护中检测进程创建的方法及系统 | |
US7934129B2 (en) | Network hang recovery | |
US20040025015A1 (en) | System and method for the managed security control of processes on a computer system | |
CN108664793B (zh) | 一种检测漏洞的方法和装置 | |
JP2015522874A (ja) | カーネルレベル・セキュリティ・エージェント | |
CN104615497A (zh) | 一种线程挂起的处理方法及装置 | |
CN102855430A (zh) | 基于Windows系统的进程黑白名单控制方法 | |
CN102890641B (zh) | 一种进程行为控制的方法和装置 | |
CN101388057A (zh) | 一种网页防挂马的方法 | |
WO2019067689A1 (en) | METHODS FOR PROTECTING SOFTWARE HOOKS, AND ASSOCIATED COMPUTER SECURITY SYSTEMS AND APPARATUS | |
CN115840938B (zh) | 一种文件监控的方法及装置 | |
CN109783311A (zh) | 断点行为的监控处理方法、装置、设备及可读存储介质 | |
CN102156834A (zh) | 实现进程防杀的方法 | |
CN104408110A (zh) | 数据请求的方法、装置及系统 | |
CN110012000B (zh) | 命令检测方法、装置、计算机设备以及存储介质 | |
KR101583545B1 (ko) | 상호 디버깅 감시를 이용한 모바일 단말기의 어플리케이션의 보안을 향상시키는 보안 제공 방법 | |
CN110955894B (zh) | 一种恶意内容检测方法、装置、电子设备及可读存储介质 | |
CN111901318A (zh) | 一种命令注入攻击检测的方法、系统及设备 | |
EP3831031B1 (en) | Listen mode for application operation whitelisting mechanisms | |
CN110209497B (zh) | 一种主机资源动态扩缩容的方法及系统 | |
CN109684826B (zh) | 应用程序沙箱反逃逸方法和电子设备 | |
CN113360909B (zh) | 勒索病毒防御方法、勒索病毒防御设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |