CN100568255C - 一种网页防挂马的方法 - Google Patents

一种网页防挂马的方法 Download PDF

Info

Publication number
CN100568255C
CN100568255C CN 200810198999 CN200810198999A CN100568255C CN 100568255 C CN100568255 C CN 100568255C CN 200810198999 CN200810198999 CN 200810198999 CN 200810198999 A CN200810198999 A CN 200810198999A CN 100568255 C CN100568255 C CN 100568255C
Authority
CN
China
Prior art keywords
function
page
crucial
interception
enter step
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
Application number
CN 200810198999
Other languages
English (en)
Other versions
CN101388057A (zh
Inventor
李成科
程虎
陈志强
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Zhuhai Kingsoft Software Co Ltd
Original Assignee
Zhuhai Kingsoft Software Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Zhuhai Kingsoft Software Co Ltd filed Critical Zhuhai Kingsoft Software Co Ltd
Priority to CN 200810198999 priority Critical patent/CN100568255C/zh
Publication of CN101388057A publication Critical patent/CN101388057A/zh
Application granted granted Critical
Publication of CN100568255C publication Critical patent/CN100568255C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

本发明涉及一种防御网页挂马方法。网页防挂马的方法包括如下步骤:A、监视JavaScript的内存分配情况,判断被分配的堆是否覆盖到了0x0A0A0A0A、0x0C0C0C0C或0x0D0D0D0D;是,进入B,否,进入H;B、挂接一些API函数;C、判断API函数的返回地址是否跟0x0A0A0A0A或0x0C0C0C0C或0x0D0D0D0D在同一个内存内;是,进入D,否,进入E;D、进入步骤G;E、判断该内存块属性的Type是否为MEM_IMAGE;是,进F,否,进D;F、比较存中的数据和磁盘文件数据;相同,进H,不同,进D;G、拦截有危害的操作;H、对原始函数放行。上述方法可以进一步精确地检测网页挂马行为。

Description

一种网页防挂马的方法
技术领域
本发明涉及计算机病毒防治领域,尤其涉及一种防御网页挂马方法。
背景技术
所谓挂马行为,就是有目的利用第三方软件的漏洞,构造能够触发漏洞的包含危险代码的数据,使得能够下载执行病毒。常见的利用大多存在于浏览器或浏览器控件中。而第三方软件的漏洞基本上都是由于程序员在编写程序时的一些不谨慎造成的,主要表现为:对输入的字符串没有做正确的长度检查,这多半会导致栈溢出;对指针的处理不正确,比如释放了某个指针指向的内存,但是忘记将该指针设置为NULL,随后又错误使用这个指针,这可能会导致堆的数据被破坏;无符号数和有符号数的不正确转换,这很有可能会导致整数溢出。总结一下,导致漏洞的原因主要是:栈溢出、整数溢出、堆数据的破坏等。
当前,检测第三方软件漏洞导致的挂马行为,主要是网页防挂马方法。
现有网页防挂马方法的主要思想就是通过拦截IE浏览器的一些操作(比如下载文件,创建进程等等),对这些操作涉及到的文件进行数字签名验证,可信验证等一系列的验证,如果验证不通过,则提示用户,让用户来决定是否要执行对应的操作。
上述网页防挂马的方法有如下优缺点:优点是,这种网页防挂马能够拦截绝大多数的挂马行为。缺点是,拦截过于广泛,缺乏针对性,所有拦截到的操作都需要用户来决定是否继续,拦截的精确度太低,大部分的工作还要由用户来做。
发明内容
本发明克服了现有技术中的不足,提供一种更加精确的网页防挂马的方法。
为了解决上述技术问题,通过以下技术方案实现:一种网页防挂马的方法,包括如下步骤:
A、监视JavaScript的内存分配情况,判断被分配的堆是否覆盖到了0x0A0A0A0A、0x0C0C0C0C、0x0D0D0D0D三个地址之一;如果是,进入步骤B,如果否,进入步骤H;
B、挂接一些网络API函数和恶意代码常用或者必须用到的API函数,进入步骤C;
C、当所述API函数被调用时,判断API函数的返回地址是否跟0x0A0A0A0A、0x0C0C0C0C、0x0D0D0D0D三个地址之一在同一个内存块内;如果是,进入步骤D,如果否,进入步骤E;
D、网页已经被挂马,进入步骤G;
E、调用VirtualQuery来获取返回地址所在内存块的属性,判断该内存块属性的Type是否为MEM_IMAGE;如果是,进入步骤F,如果否,进入步骤D;
F、将返回地址所在模块的内存中的数据与该模块对应磁盘文件的数据进行比较;如果相同,进入步骤H,如果不相同,进入步骤D;
G、挂接的API函数返回失败,拦截挂马使用所述API函数对应的原始函数进行的有危害的操作,达到防御的目的;
H、未检测到网页被挂马,步骤B中挂接的API函数对原始函数放行,即调用原始函数完成相应的功能。
上述方法的理论基础是:检测第三方软件是否被挂马,等同于检测是否有第三方软件的漏洞被触发。现有的利用第三方软件漏洞挂马行为绝大多数都使用了JavaScript的HeapSpray技术。而上述方法可以精确、有效检测使用了JavaScript的HeapSpray技术所进行的漏洞利用,因此,上述方法可以进一步精确地检测网页挂马行为。
进一步的技术方案是:
执行完所述步骤H后进入步骤I,
I、拦截一些关键函数,判断其返回地址是否在栈空间里;如果是,拦截挂马使用所述关键函数进行的有危害的操作,达到防御的目的,如果否,对所拦截的关键函数放行。
通过上述步骤I的检测,可以再进一步检测是否有栈溢出漏洞被利用,使检测网页挂马的广度得以提高。
再进一步的技术方案是:
执行完所述步骤H后执行步骤I’,
I’、拦截若干关键函数,判断其返回地址是否在栈空间里;如果是,拦截挂马使用所述关键函数进行的有危害的操作,达到防御的目的,如果否,对所拦截的关键函数放行,并进入步骤J;
J、拦截若干关键函数,判断其返回地址的页属性是否含有PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、PAGE_EXECUTE_WRITECOPY中的任意一个;如果是,对该步骤J中所拦截的关键函数放行,如果否,拦截挂马使用所拦截关键函数进行的有危害的操作,达到防御的目的。
通过上述步骤J的检测,可以更进一步根据内存页属性来判断是否有漏洞被利用,使检测网页挂马的广度再次提高。
附图说明
图1是本发明网页防挂马方法的流程图。
下面结合附图和实施例具体介绍本发明网页防挂马的方法。
具体实施方式
一般来说,漏洞可分为两个大类:第一类是通过破坏内存数据来触发的漏洞,比如栈溢出,堆数据破坏等等;第二类是组件本身就提供下载任意文件的接口。本申请的网页防挂马方法主要是针对第一类漏洞的触发检测。而在第一类漏洞的漏洞利用代码中,绝大部分都使用了JavaScript的HeapSpray技术。所以,检测并拦截利用HeapSpray的恶意代码是非常有必要的。在使用HeapSpray的时候,一般会将EIP指向堆区的0x0C0C0C0C位置,然后用JavaScript申请大量堆内存,并用包含着0x90和shellcode的“内存片”覆盖这些内存。通常,JavaScript会从内存低址向高址分配内存,因此申请内存超过200MB(200MB=200×1024×1024=0x0C800000>0x0C0C0C0C)后,0x0C0C0C0C将被含有shellcode的内存片覆盖。只要内存片中的0x90能够命中0x0C0C0C0C的位置,shellcode就能最终得到执行。也就是说,在HeapSpray的恶意代码中,都有以下这么几个共同的特点:
1、都会分配大量相同的、含有shellcode的堆内存。
2、这些堆内存会覆盖0x0A0A0A0A、0x0C0C0C0C、0x0D0D0D0D三个地址之一。
3、就功能上来看,这些恶意代码都是为了下载木马到本地执行。
根据前文所述的造成漏洞的原因以及HeapSpray技术的特点,本发明具体实现防御网页挂马的技术方案如下,结合图1:
A、监视JavaScript的内存分配情况,判断被分配的堆覆是否盖到了0x0A0A0A0A、0x0C0C0C0C、0x0D0D0D0D三个地址之一;如果是,进入步骤B,如果否,进入步骤H。JavaScript通过JScript.dll来解释并执行脚本,JScript.dll通过调用SysAllocStringByteLen来为字符串分配内存;所以只需挂接SysAllocStringByteLen就可以监视JavaScript的内存分配了。
B、挂接一些网络API函数和恶意代码常用或者必须用到的API函数,进入步骤C。从平常分析木马下载器的经验来看,病毒下载文件无非使用三个系列的API函数:Socket系列函数、URLDownloadToFileA,WinINet系列函数。如果利用socket系列函数下载,则WSAStartup是其必须调用的函数,如果使用WinINet系列函数下载,InternetOpen是其必须调用的函数。所以,挂接并拦截WSAStartup、URLDownloadToFileA以及InternetOpen就可以监视到shellcode是否要下载文件。另外,除了这些网络API函数,一些shellcode常用或者说必须用的API函数也可以监视,比如LoadLibraryA。
C、当被挂接的API函数被调用时,判断API函数的返回地址是否跟0x0A0A0A0A、0x0C0C0C0C、0x0D0D0D0D三个地址之一在同一个内存块内;如果是,进入步骤D,如果否,进入步骤E。通过对一些shellcode的研究发现,目前已知shellcode的执行有两种方式:一是直接执行,二是将自己拷贝到其它的内存区域,然后跳过去执行。对于第一种执行方式,其返回地址肯定是跟0x0A0A0A0A、0x0C0C0C0C、0x0D0D0D0D三个地址之一在同一个内存块内,因此,在此步骤中,如果是,进入步骤D。对于第二种执行方式,内存拷贝的目的内存有两种可能:一是,这块内存不属于任何模块;二是,这块内存属于某一个模块。为了解决这个问题,我们可以调用VirtualQuery来获取返回地址所在内存块的属性,如果该内存块属性的Type不为MEM_IMAGE,那可以肯定是shellcode调用了被我们挂接的API,网页已经被挂马。如果Type是MEM_IMAGE,我们可以将返回地址所在模块的内存中的数据与磁盘上的数据进行比较,如果不相同,那可以肯定是shellcode调用了被我们挂接的API,网页已经被挂马,如下述步骤E、F所述。
D、网页已经被挂马,进入步骤G。
E、调用VirtualQuery来获取返回地址所在内存块的属性,判断该内存块属性的Type是否为MEM_IMAGE;如果是,进入步骤F,如果否,进入步骤D。
F、将返回地址所在模块的内存中的数据与该模块对应磁盘文件的数据进行比较;如果相同,进入步骤H,如果不相同,进入步骤D。
G、挂接的API函数返回失败,拦截挂马使用所述API函数对应的原始函数进行的有危害的操作,达到防御的目的。此步骤完成对已发现的木马进行拦截。例如挂接API函数为MYURLDownloadToFile、MYLoadLibrary等,则挂接API函数直接返回失败,拦截挂马使用原始函数URLDownloadToFile、LoadLibrary等进行的有危害的操作。
H、未检测到网页被挂马,步骤B中挂接的API函数对原始函数进行放行,即调用原始函数完成相应的功能。
如该具体实施方式部分第一段中所述,步骤A-H的执行可以针对HeapSpray漏洞利用进行检测。为了进一步提高防挂马的检测广度,还可以进一步针对栈溢出漏洞进行检测和防御,以及根据内存页属性进行防御,具体步骤是:
执行完所述步骤H后进入步骤I,
I、拦截一些关键函数,判断其返回地址是否在栈空间里;如果是,拦截挂马使用所述关键函数进行的有危害的操作,达到防御的目的,如果否,对所拦截的关键函数放行。
执行完上述步骤I可以选择再进入步骤J,根据内存页属性进行防御。当然也可以不再执行步骤J。该步骤J是在上述步骤I中执行完“对所拦截的关键函数放行”后执行。
J、拦截一些关键函数,判断其返回地址的页属性是否含有PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、PAGE_EXECUTE_WRITECOPY中的任意一个;如果是,对该步骤J中所拦截的关键函数放行,如果否,拦截挂马使用所拦截关键函数进行的有危害的操作,达到防御的目的。
上述步骤I和步骤J中所说的关键函数一般包括WSAStartup、URLDownloadToFileA、InternetOpen或者LoadLibraryA等等。
当然,也可以不执行上述步骤I,而直接根据内存页属性进行防御。也就是,执行完所述步骤H后进入步骤J’,
J’、拦截一些关键函数,判断其返回地址的页属性是否含有PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、PAGE_EXECUTE_WRITECOPY中的任意一个;如果是,对该步骤J中所拦截的关键函数放行,如果否,拦截挂马使用所拦截关键函数进行的有危害的操作,达到防御的目的。
最后,为了更准确的拦截网页挂马行为,如果上述方法没有检测到网页挂马,可以在执行完本发明的网页防挂马方法以后,在利用现有的网页防挂马方法进行检测,这样一来,网页防挂马的精确性会更高。
以上步骤仅用以说明而非限制本发明的技术方案。不脱离本发明精神和范围的任何修改或局部替换,应涵盖在本发明的权利要求范围当中。

Claims (7)

1、一种网页防挂马的方法,其特征在于,包括如下步骤:
A、监视JavaScript的内存分配情况,判断被分配的堆是否覆盖到了0x0A0A0A0A、0x0C0C0C0C、0x0D0D0D0D三个地址之一;如果是,进入步骤B,如果否,进入步骤H;
B、挂接若干网络API函数和恶意代码常用或者必须用到的API函数,进入步骤C;
C、当所述被挂接的API函数被调用时,判断API函数的返回地址是否跟0x0A0A0A0A、0x0C0C0C0C、0x0D0D0D0D三个地址之一在同一个内存块内;如果是,进入步骤D,如果否,进入步骤E;
D、网页已经被挂马,进入步骤G;
E、调用VirtualQuery来获取返回地址所在内存块的属性,判断该内存块属性的Type是否为MEM_IMAGE;如果是,进入
步骤F,如果否,进入步骤D;
F、将返回地址所在模块的内存中的数据与该模块对应磁盘文件的数据进行比较;如果相同,进入步骤H,如果不相同,进入步骤D;
G、挂接的API函数返回失败,拦截挂马使用所述API函数对应的原始函数进行的有危害的操作,达到防御的目的;
H、未检测到网页被挂马,步骤B中挂接的API函数对原始函数放行,即调用原始函数完成相应的功能。
2、根据权利要求1所述的网页防挂马的方法,其特征在于,执行完所述步骤H后进入步骤I,
I、拦截若干关键函数,判断其返回地址是否在栈空间里;如果是,拦截挂马使用所述关键函数进行的有危害的操作,达到防御的目的,如果否,对所拦截的关键函数放行。
3、根据权利要求1所述的网页防挂马的方法,其特征在于,执行完所述步骤H后执行步骤I’,
I’、拦截若干关键函数,判断其返回地址是否在栈空间里;如果是,拦截挂马使用所述关键函数进行的有危害的操作,达到防御的目的,如果否,对所拦截的关键函数放行,并进入步骤J;
J、拦截若干关键函数,判断其返回地址的页属性是否含有PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、PAGE_EXECUTE_WRITECOPY中的任意一个;如果是,对该步骤J中所拦截的关键函数放行,如果否,拦截挂马使用所拦截关键函数进行的有危害的操作,达到防御的目的。
4、根据权利要求1所述的网页防挂马的方法,其特征在于,执行完所述步骤H后进入步骤J’,
J’、拦截若干关键函数,判断其返回地址的页属性是否含有PAGE_EXECUTE、PAGE_EXECUTE_READ、PAGE_EXECUTE_READWRITE、PAGE_EXECUTE_WRITECOPY中的任意一个;如果是,对该步骤J’中所拦截的关键函数放行,如果否,拦截挂马使用所拦截关键函数进行的有危害的操作,达到防御的目的。
5、根据权利要求2-4中任意一项所述的网页防挂马的方法,其特征在于,
所述关键函数包括WSAStartup、URLDownloadToFileA、InternetOpen或者LoadLibraryA。
6、根据权利要求1-4中任意一项所述的网页防挂马的方法,其特征在于,
步骤A中,通过挂接SysAllocStringByteLen监视JavaScript的内存分配。
7、根据权利要求1-4中任意一项所述的网页防挂马的方法,其特征在于,
所述原始函数包括WSAStartup、URLDownloadToFileA、InternetOpen或者LoadLibraryA。
CN 200810198999 2008-10-07 2008-10-07 一种网页防挂马的方法 Active CN100568255C (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 200810198999 CN100568255C (zh) 2008-10-07 2008-10-07 一种网页防挂马的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 200810198999 CN100568255C (zh) 2008-10-07 2008-10-07 一种网页防挂马的方法

Publications (2)

Publication Number Publication Date
CN101388057A CN101388057A (zh) 2009-03-18
CN100568255C true CN100568255C (zh) 2009-12-09

Family

ID=40477473

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 200810198999 Active CN100568255C (zh) 2008-10-07 2008-10-07 一种网页防挂马的方法

Country Status (1)

Country Link
CN (1) CN100568255C (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102651060A (zh) * 2012-03-31 2012-08-29 北京奇虎科技有限公司 一种漏洞检测的方法和系统

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120192155A1 (en) * 2011-01-20 2012-07-26 Microsoft Corporation Code advisor for web compatibility and interoperability
CN102034050A (zh) * 2011-01-25 2011-04-27 四川大学 基于虚拟机和敏感Native API调用感知的恶意软件动态检测方法
CN102737188A (zh) * 2012-06-27 2012-10-17 北京奇虎科技有限公司 检测恶意网页的方法及装置
US9213839B2 (en) 2013-03-14 2015-12-15 Huawei Technologies Co., Ltd. Malicious code detection technologies
CN104298922A (zh) * 2013-07-16 2015-01-21 腾讯科技(深圳)有限公司 一种阻止漏洞利用的方法及装置
CN104021343B (zh) * 2014-05-06 2016-08-24 南京大学 一种基于堆访问模式的恶意程序监控方法和系统
US9513671B2 (en) 2014-08-01 2016-12-06 Microsoft Technology Licensing, Llc Peripheral retention device
US10191986B2 (en) 2014-08-11 2019-01-29 Microsoft Technology Licensing, Llc Web resource compatibility with web applications
US9705637B2 (en) 2014-08-19 2017-07-11 Microsoft Technology Licensing, Llc Guard band utilization for wireless data communication
US9397723B2 (en) 2014-08-26 2016-07-19 Microsoft Technology Licensing, Llc Spread spectrum wireless over non-contiguous channels
US9424048B2 (en) 2014-09-15 2016-08-23 Microsoft Technology Licensing, Llc Inductive peripheral retention device

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102651060A (zh) * 2012-03-31 2012-08-29 北京奇虎科技有限公司 一种漏洞检测的方法和系统
CN102651060B (zh) * 2012-03-31 2015-05-06 北京奇虎科技有限公司 一种漏洞检测的方法和系统

Also Published As

Publication number Publication date
CN101388057A (zh) 2009-03-18

Similar Documents

Publication Publication Date Title
CN100568255C (zh) 一种网页防挂马的方法
US11657152B2 (en) Methods for behavioral detection and prevention of cyberattacks, and related apparatus and techniques
US10896253B2 (en) Processor trace-based enforcement of control flow integrity of a computer system
US10284591B2 (en) Detecting and preventing execution of software exploits
US10528735B2 (en) Malicious code protection for computer systems based on process modification
US10310992B1 (en) Mitigation of cyber attacks by pointer obfuscation
CN104217157B (zh) 一种漏洞防利用方法及系统
US6412071B1 (en) Method for secure function execution by calling address validation
AU2006210698B2 (en) Intrusion detection for computer programs
CN103679032B (zh) 防御恶意软件的方法和装置
US8539578B1 (en) Systems and methods for defending a shellcode attack
US20150213260A1 (en) Device and method for detecting vulnerability attack in program
CN101005497A (zh) 一种阻止恶意代码入侵的系统及方法
US8990116B2 (en) Preventing execution of tampered application code in a computer system
US11055168B2 (en) Unexpected event detection during execution of an application
US10289570B2 (en) Detecting data corruption by control flow interceptions
CN103714292A (zh) 一种漏洞利用代码的检测方法
Dai et al. Behavior-based malware detection on mobile phone
US10025930B2 (en) Hardware assisted branch transfer self-check mechanism
Liu et al. Research on the technology of iOS jailbreak
GB2543813A (en) Improved malware detection
CN105631317A (zh) 一种系统调用方法及装置
CA2390862A1 (en) Method for secure function execution by calling address validation
CN105809029A (zh) 一种拦截驱动程序运行的方法及装置
Yang et al. Risk analysis of exposed methods to javascript in hybrid apps

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
C56 Change in the name or address of the patentee
CP01 Change in the name or title of a patent holder

Address after: Jinshan computer Building No. 8 Jingshan Hill Road, Lane 519015 Zhuhai Jida Lianshan Guangdong city of Zhuhai Province

Patentee after: Zhuhai Kingsoft Software Co.,Ltd.

Address before: Jinshan computer Building No. 8 Jingshan Hill Road, Lane 519015 Zhuhai Jida Lianshan Guangdong city of Zhuhai Province

Patentee before: Zhuhai Kingsoft Software Co.,Ltd.

EE01 Entry into force of recordation of patent licensing contract

Application publication date: 20090318

Assignee: BEIJING KINGSOFT INTERNET SECURITY SOFTWARE Co.,Ltd.

Assignor: Zhuhai Kingsoft Software Co.,Ltd.

Contract record no.: 2014990000718

Denomination of invention: Method for preventing Trojan for web page

Granted publication date: 20091209

License type: Common License

Record date: 20140826

LICC Enforcement, change and cancellation of record of contracts on the licence for exploitation of a patent or utility model