著录项信息
专利名称 | 一种防止远程线程启动的方法 |
申请号 | CN200710162450.0 | 申请日期 | 2007-10-15 |
法律状态 | 暂无 | 申报国家 | 中国 |
公开/公告日 | 2009-04-22 | 公开/公告号 | CN101414340 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/56 | IPC分类号 | G;0;6;F;2;1;/;5;6查看分类表>
|
申请人 | 北京瑞星国际软件有限公司 | 申请人地址 | 北京市海淀区中关村大街22号中科大厦1301室
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京瑞星网安技术股份有限公司 | 当前权利人 | 北京瑞星网安技术股份有限公司 |
发明人 | 周军 |
代理机构 | 永新专利商标代理有限公司 | 代理人 | 王英 |
摘要
本发明提供了一种防止远程线程启动的方法,包括以下步骤:监视用于创建线程的请求;当监视到用于创建线程的请求时,判断要创建的线程是本地线程还是远程线程;如果要创建的线程是远程线程,则阻止创建该线程。通过本发明的方法,克服了常规技术中对于线程监视个数的限制,以及在线程创建后再通过修改代码推出线程,而不是直接阻止创建线程的弊端。
1.一种防止远程线程启动的方法,包括以下步骤:
通过创建与用于创建线程的函数相关联的钩子来监视用于创建线程的请求;
当监视到用于创建线程的请求时,通过判断所述函数所指定的用于创建所述要创建的线程的目标进程与当前发起者进程是否一致,判断要创建的线程是本地线程还是远程线程;
如果要创建的线程是远程线程,则阻止创建该线程。
2.如权利要求1所述的方法,其中,如果用于创建所述要创建的线程的进程与当前发起者进程不一致,则判断所述要创建的线程是远程线程。
3.如权利要求2所述的方法,其中,所述函数包括用于创建线程的NtCreateThread函数。
4.如权利要求1所述的方法,还包括:
当判断所述要创建的线程是远程线程时,在阻止创建该线程之前,询问用户是否阻止该线程的创建,并根据用户的指示阻止或允许该线程的创建。
一种防止远程线程启动的方法\n技术领域\n[0001] 本发明涉及软件安全,尤其涉及防止远程线程启动的方法。\n[0002] 技术背景\n[0003] 计算机及网络技术的迅猛发展极大地促进了信息交互。但是,与此同时,计算机病毒也伴随技术的发展而不断地演化更新,时至今日,计算机病毒已经严重威胁到了人们对计算机的正常使用。由此,如何防范病毒侵袭已然成为人们关注的一个焦点。\n[0004] 随着互联网的发展,病毒技术也呈现出多样化。当前的病毒技术利用了诸如挂钩、远程线程等技术,例如,通过远程线程进行进程保护、监视文件等功能。这些技术的应用为反病毒工作者带来了一定的困难。\n[0005] 针对病毒利用远程线程的问题,现有的一些安全软件通过Windows NT提供的PsSetCreateThreadNotifyRoutine线程创建通知例程来实现对线程的监控,通过该通知例程来实现监控有以下几点不足:(1)可注册的通知例程数量最多为8个,因此这种方法监控线程的能力有限;(2)当得到该通知例程的通知时,线程已经创建成功,所以这种方法不能拒绝创建线程,只能通过修改线程代码来退出该线程。\n[0006] 因此,需要一种不受线程通知例程数量限制,并且能有效地监控并阻止恶意程序创建远程线程的技术。\n发明内容\n[0007] 本发明提供了一种防止远程线程启动的方法,该方法包括:监视用于创建线程的请求;当监视到用于创建线程的请求时,判断要创建的线程是本地线程还是远程线程;如果要创建的线程是远程线程,则阻止创建该线程。\n[0008] 本发明还提供了一种防止远程线程启动的方法,该方法包括:监视用于创建远程线程的请求;当监视到用于创建远程线程的请求时,阻止创建该远程线程。\n[0009] 利用上述技术方案,本发明不需要Windows NT提供的PsSetCreateThreadNotifyRoutine线程创建通知例程来实现对线程的监控,因此克服了常规技术中注册通知例程数量有限的缺点,进一步的,本发明通过挂钩技术监视对线程创建的请求,在远程线程创建之前就能够发现它,从而阻止远程线程的创建,与常规方法中得到远程线程创建通知然后退出该线程相比,能够更有效地防止恶意软件的动作。\n附图说明\n[0010] 通过以下结合附图的详细描述,将更清楚地看到本发明的各种特征和优点。\n[0011] 图1示出了防止远程线程启动的方法的总体流程图;\n[0012] 图2示出了防止远程线程启动的方法的一个具体实施例的流程图;\n[0013] 图3示出了防止远程线程启动的方法的另一个具体实施例的流程图。\n具体实施方式\n[0014] 一般而言,创建远程线程是通过调用用于创建远程线程或线程的函数来实现的,因此,通过监视恶意软件调用这种函数的动作,并在该函数创建远程线程前将其阻止,就能够防止恶意软件启动远程线程。\n[0015] 图1示出了防止远程线程启动的方法的总体流程图。在步骤S1中,通过挂钩来监视用于创建线程或远程线程的请求。在步骤S2中,当用于创建线程或远程线程的函数被调用时,首先跳转到该钩子处理例程中,通过执行该钩子处理例程判断是否监视到创建远程线程的请求。在步骤S2中监视到创建远程线程的请求后,在步骤S3中阻止创建该远程线程,从而使得远程线程无法启动。\n[0016] 下面结合图2的流程图描述用于防止远程线程启动的方法的一个具体实施例。例如,该过程可以通过下面的伪代码表示:\n[0017] bool hook_CreateRemoteThread(target_process,...)\n[0018] {\n[0019] if(ask_user()==deny_remote_thread)\n[0020] return false;\n[0021] return real_CreateRemoteThread(target_process,...);\n[0022] }\n[0023] 在步骤S21中,通过挂钩来监视远程线程创建请求。在WindowsNt环境下,恶意软件可以通过例如CreateRemoteThread函数来创建远程线程。本发明通过挂钩该函数来监视对该函数的调用。当CreateRemoteThread函数被调用时,在步骤S22,该钩子处理例程能够监视到该函数被调用的动作,并在调用之前跳转到钩子处理例程进行处理。此时,钩子处理函数监视到某个软件正在试图创建远程线程,作为可选但非必要的步骤,在步骤S23询问用户是否阻止该远程线程的创建。如果用户命令拒绝创建该远程线程,则在步骤S24返回表示创建失败的假值,阻止对CreateRemoteThread函数的调用,从而阻止创建远程线程;如果用户命令允许创建该远程线程,则在步骤S25允许创建该远程线程,例如通过调用真实的CreateRemoteThread函数创建远程线程。这里,虽然以CreateRemoteThread函数为例描述了本发明的优选实施例,但是本发明不限于对该函数的监视,任何现有的或将来可能出现的用于创建远程线程的函数的监视都在本发明的实质和范围之内。\n[0024] 实际操作中,恶意软件有可能绕开上述用于创建远程线程的CreateRemoteThread函数,而直接通过更低层的线程创建函数NtCreateThread来实现远程线程的创建。实际上,用于创建远程线程的CreateRemoteThread函数本身也是通过线程创建函数NtCreateThread来实现远程线程创建的。因此,优选地,还可以通过拦截用于创建线程的请求来实现对远程线程创建的监控,以及阻止创建远程线程。\n[0025] 以下结合图3的流程图详细描述通过监视用于创建线程的请求来阻止远程线程创建的方法的一个具体实施例。例如,该过程可以用以下伪代码表示:\n[0026] bool hook_NtCreateThread(target_process,...)\n[0027] {\n[0028] if(get_current_process()!=target_process){\n[0029] /*this is a remote thread*/\n[0030] if(ask_user()==denyremote_thread)\n[0031] return false;\n[0032] }\n[0033] return real_NtCreateThread(target_process,...);\n[0034] }\n[0035] 在步骤S31中,通过挂钩来监视线程创建请求。在WindowsNt环境下,恶意软件可以通过例如NtCreateThread函数来创建线程。本实施例通过挂钩该函数来监视对该函数的调用。当NtCreateThread函数被调用时,在步骤S32,该钩子处理例程能够监视到该函数被调用的动作,并在调用之前跳转到钩子处理例程,执行钩子处理例程中的步骤。此时,钩子处理函数监视到某个软件正在试图通过NtCreateThread函数创建线程,因此在拦截到该线程创建请求后,需要判断该线程是否为一个远程线程。通过研究NtCreateThread函数的功能可知,该函数可以指定创建线程的目标进程,例如指定恶意程序的进程来创建远程线程。同时,创建线程的代码一定运行于当前发起者进程中,也就是运行在当前发起者进程空间中,所以,如果所指定的创建目标线程的进程与当前发起者进程不是同一个进程,那么这个线程就是一个远程线程。因此,基于上述原理,在步骤S33中,判断要创建的线程是本地线程还是远程线程,具体而言,判断当前发起者进程与目标进程是否一致。如果一致,说明请求创建的是本地线程,则在步骤S36中允许创建该线程,例如通过调用真实的NtCreateThread函数来创建该线程。如果不一致,则说明请求创建的是一个远程线程,作为可选但非必要的步骤,在步骤S34中,询问用户是否阻止该线程的创建。如果用户命令拒绝创建该线程,则在步骤S35返回表示创建失败的假值,从而阻止对NtCreateThread函数的调用,阻止创建远程线程。如果用户命令允许创建该线程,则在步骤S36允许创建该线程,例如通过调用真实的NtCreateThread函数来创建该线程。这里,虽然以NtCreateThread函数为例描述了本发明的优选实施例,但是本发明不限于对该函数的监视,任何现有的或将来可能出现的用于创建线程的函数的监视都在本发明的实质和范围之内。\n[0036] 上面详细描述了用于阻止远程线程启动的方法,通过使用本发明的方法,对于远程线程创建的监视不受线程数量限制,并且在创建线程之前就阻止线程的创建,在实现上更加简单有效。本发明的方法可以应用于需要实现远程线程监控的各类程序。\n[0037] 本领域技术人员应该理解,上述具体实施例的描述只是用于说明的目的,而不能将本发明的保护范围仅仅限制于具体描述的实施例。例如,本发明是在WindowsNT系统的上下文中,并具体以CreateRemoteThread和NtCreateThread函数为例进行阐述的,而例如在其它已有版本或未来版本的Windows系统、Linux系统等中,也存在类似的线程或远程线程创建函数,本领域技术人员在本发明原理的启示下,可以对上述实施例作出各种修改,这些修改都包含在权利要求所限定的本发明的范围之内。
法律信息
- 2018-03-16
专利权人的姓名或者名称、地址的变更
专利权人由北京瑞星信息技术股份有限公司变更为北京瑞星网安技术股份有限公司
地址由100190 北京市海淀区中关村大街22号中科大厦1301室变更为100190 北京市海淀区中关村大街22号中科大厦1301室
- 2016-05-11
专利权人的姓名或者名称、地址的变更
专利权人由北京瑞星信息技术有限公司变更为北京瑞星信息技术股份有限公司
地址由100190 北京市海淀区中关村大街22号中科大厦1301室变更为100190 北京市海淀区中关村大街22号中科大厦1301室
- 2015-12-02
- 2010-12-01
实质审查的生效
IPC(主分类): G06F 21/22
专利申请号: 200710162450.0
申请日: 2007.10.15
- 2010-05-19
专利申请权的转移
登记生效日: 2010.04.13
申请人由北京瑞星国际软件有限公司变更为北京瑞星信息技术有限公司
地址由100080 北京市中关村大街22号中科大厦1305室变更为100190 北京市海淀区中关村大街22号中科大厦1301室
- 2009-04-22
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2007-06-20
|
2006-07-21
| | |
2
| |
2007-07-25
|
2006-11-27
| | |
3
| |
2005-06-08
|
2003-12-05
| | |
4
| |
2001-06-06
|
1999-02-18
| | |
5
| |
2006-12-27
|
2004-09-03
| | |
6
| |
2004-08-11
|
2003-01-22
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |