CN1818822A - 缓冲区溢出攻击的检测方法 - Google Patents
缓冲区溢出攻击的检测方法 Download PDFInfo
- Publication number
- CN1818822A CN1818822A CN 200510007681 CN200510007681A CN1818822A CN 1818822 A CN1818822 A CN 1818822A CN 200510007681 CN200510007681 CN 200510007681 CN 200510007681 A CN200510007681 A CN 200510007681A CN 1818822 A CN1818822 A CN 1818822A
- Authority
- CN
- China
- Prior art keywords
- return address
- buffer zone
- overflow
- buffer
- detection method
- 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.)
- Pending
Links
Landscapes
- Executing Machine-Instructions (AREA)
Abstract
本发明涉及计算机缓冲区溢出攻击的检测方法,即,通过建立勾挂函数,检查线程所建立的堆栈帧的返回地址,并根据该返回地址判断是否发生缓冲区溢出,并在发现缓冲区溢出后,将引起该缓冲区溢出的线程结束。利用本发明的缓冲区溢出攻击的检测方法,不但可以高效、准确的检查出恶意程序的缓冲区溢出攻击,而且避免了现有技术中的杀毒软件对新生病毒特征代码获取的滞后性,和防火墙系统使用时的繁琐以及给计算机知识很少的用户带来的麻烦。即使对于新生的缓冲区溢出攻击的病毒、木马也可以准确、高效的进行拦截。
Description
技术领域
本发明涉及计算机缓冲区溢出攻击的检测方法,更具体的说,是通过勾挂系统API函数调用,对压入堆栈后返回地址的判断,实现对计算机缓冲区攻击的检测。
背景技术
一直以来,对计算机的入侵和反入侵的斗争都在激烈地进行着,随着计算机越来越广泛地使用,这种斗争的激烈程度也上升到一个新的高度。缓冲区溢出是近期呈上升趋势的一种攻击方法,攻击者在系统当中发现可产生缓冲区溢的缺陷程序,并针对该缺陷编写代码,使其运行攻击者的指定代码,攻击者可借助此种方法获得系统特权,指示计算机破坏文件,改变数据,泄露敏感信息,产生后门访问点,感染或者攻击其他计算机。
目前并没有有效避免缓冲区溢出的方法,而主要的方法就是通过给系统打补丁,对已发现的存在缓冲区漏洞的程序进行修补。但是,对于更多的尚未被发现的系统漏洞仍然存在着受到缓冲区溢出攻击的危险。例如,著名的“冲击波”、“震荡波”蠕虫病毒,就是利用系统漏洞,进行缓冲区溢出攻击的最好实例。
并且,现有的杀毒软件也对于新生的利用缓冲区溢出进行攻击的病毒、木马的有害程序无可奈何,因为其只能通过对病毒特征代码进行比较来做出判断,因而存在着严重的滞后性。
而且,对于现有的系统防护工具来说,并没有能够有效检测缓冲区溢出攻击的方法,即使是技术领先的防火墙系统,也需要用户可能是缓冲区溢出后所执行的网络操作进行判断。然而,对于众多计算机知识较少的用户来说,这种判断不但繁琐,在不知情的情况下没有办法做出有效且准确的判断,因此,在实用性的方面存在着很大的不足。
发明内容
本发明就是为了解决上述种种现有技术的不足而产生的。其目的在于提供一种针对于缓冲区溢出攻击的有效、简便且准确的检测方法。
本发明根据缓冲区溢出的一般原理,勾挂系统关键API函数,以检查程序活动期间的动作是否在溢出状态执行,实时检测溢出行为并阻止该行为的发生,进而从根本上避免了利用缓冲区溢出方法的攻击行为发生。
通过建立勾挂函数,检查线程所建立的堆栈帧的返回地址,并根据该返回地址判断是否发生缓冲区溢出,并在发现缓冲区溢出后,将引起该缓冲区溢出的线程结束。
本发明的缓冲区溢出攻击的检测方法,包括如下步骤:
2.1)通过所述勾挂系统API函数调用;
2.2)检查返回地址;
2.3)判断返回地址的位置;返回地址的位置如果是在堆栈范围以内,则判断为发生了栈溢出;
2.4)判断返回地址的属性;返回地址的属性如果是可写,则判断为发生了堆溢出;
如上所述缓冲区溢出攻击的检测方法,其原理是,当某一段写缓冲区指令执行完毕后,需要返回到返回地址处继续执行,但当缓冲区溢出后,不但写入了缓冲区,而且改写了该段缓冲区的返回地址,如果是恶意攻击的程序,将把返回地址改写为刚刚写入的缓冲区地址,从而执行刚刚写入的恶意代码。并且,该恶意代码执行时,一定出现特定的系统API函数调用。由于本发明的方法勾挂(Hook)了该系统API函数(步骤2.1);因此,可以在其执行该函数调用之前,检查其返回地址(步骤2.2);如果不是恶意攻击的程序,其返回地址将返回到程序区继续执行,但是对于恶意攻击的程序,却将返回地址返回到了其刚刚写入的缓冲区,因此通过对该返回地址进行判断,就可以实现有效的检测缓冲区溢出攻击的目的。
如上所述,如果返回地址的位置是在堆栈范围内,就可以判断发生了栈溢出;如果返回地址的属性是可写,则判断为发生了堆溢出。
因此,通过本发明的缓冲区溢出攻击的检测方法,不但可以准确、高效的检测出缓冲区溢出的发生,而且不需要用户对其进行判断,对于众多的计算机知识很少的用户来说,免去了繁琐的判断,使用起来更加方便,具有更高的实用价值。
在本发明的缓冲区溢出攻击的检测方法中,如果所述步骤2.3)判断结果为发生栈溢出,或所述步骤2.4)判断结果为发生堆溢出,则通过调用系统API函数,将引起该缓冲区溢出的线程结束。
因此,可以在缓冲区溢出发生后,还没有造成严重的后果之前,将该恶意程序结束,有效的保护了系统的安全。
本发明的缓冲区溢出攻击的检测方法中,所述勾挂的API函数,包括:创建进程、加载动态库、分配内存空间、查找关键API函数地址等。前述这些API函数是进行缓冲区溢出攻击的恶意代码开始执行时必须调用的API函数,因此,只需对于这些关键的API函数调用进行勾挂,就能准确的识别出缓冲区溢出攻击。
另外,可以将本发明的缓冲区溢出攻击的检测方法内置于病毒防护系统中,对于计算机防护系统来说,实现了根本性的改变,具有很高的实用价值。
附图说明
图1为本发明的缓冲区溢出攻击检测方法流程图。
具体实施方式
下面参照附图,并普遍使用的微软Windows操作系统,对本发明的具体实施例进行详细说明。
通过建立勾挂函数,检查线程所建立的堆栈帧的返回地址,并根据该返回地址判断是否发生缓冲区溢出,并在发现缓冲区溢出后,将引起该缓冲区溢出的线程结束。
如图1所示,本发明的缓冲区溢出攻击的检测方法,包括如下步骤:
2.1)通过所述勾挂系统API函数调用;
2.2)检查返回地址;
2.3)判断返回地址的位置;返回地址的位置如果是在堆栈范围以内,则判断为发生了栈溢出;
2.4)判断返回地址的属性;返回地址的属性如果是可写,则判断为发生了堆溢出;
如上所述缓冲区溢出攻击的检测方法,其原理是,当某一段写缓冲区指令执行完毕后,需要返回到返回地址处继续执行。但当缓冲区溢出后,不但写入了缓冲区,而且改写了该段缓冲区的返回地址,如果是恶意攻击的程序,则将返回地址改写为刚刚写入的缓冲区地址,从而在返回后,执行刚刚写入的恶意代码。并且,该恶意代码执行时,一定出现特定的系统API函数调用。由于本发明的方法勾挂(Hook)了该系统API函数(步骤2.1);因此,可以在其执行该函数调用之前,检查其返回地址(步骤2.2);如果不是恶意攻击的程序,其返回地址将返回到程序区继续执行,但是对于恶意攻击的程序,确将返回地址返回到了其刚刚写入的缓冲区,因此通过对该返回地址进行判断,就可以实现有效的检测缓冲区溢出攻击的目的。
如上所述,如果返回地址的位置是在堆栈范围内,就可以判断发生了栈溢出;如果返回地址的属性是可写,则判断为发生了堆溢出。
因此,通过本发明的缓冲区溢出攻击的检测方法,不但可以准确、高效的检测出缓冲区溢出的发生,而且不需要用户对其进行判断,对于众多的计算机知识很少的用户来说,免去了繁琐的判断,使用起来更加方便,具有更高的实用价值。
在本发明的缓冲区溢出攻击的检测方法中,如果所述步骤2.3)判断结果为发生栈溢出,或所述步骤2.4)判断结果为发生堆溢出,则通过调用系统API函数,将引起该缓冲区溢出的线程结束。
因此,可以在缓冲区溢出发生后,还没有造成严重的后果之前,将该恶意程序结束,有效的保护了系统的安全。
下面结合利用微软Windows操作系统中LSASS服务漏洞进行攻击的“震荡波”病毒,对本发明的具体实施例作详细说明。
LSASS服务是微软Windows操作系统中本地安全验证子系统服务,提供了一个用于管理本地安全、域身份验证和Active Directory进程的接口,用于处理客户端和服务器的身份验证。它还包含一些用于支持Active Directory实用程序的功能。振荡波病毒利用LSASS服务中漏洞,构造畸形认证包,利用Lsass.exe在将消息传递到缓冲区之前并不验证消息长度的缺陷,使缓冲区溢出,并改写返回地址,使该线程跳转至畸形包内所携带的ShellCode入口处执行。
执行ShellCode代码时,当首先调用GetProcAddress来找winsock.dll的引出函数的时候,会被我们的勾挂函数截获,经过判断,发现返回地址,是在堆栈中,据此判断发生了栈溢出。然后,通过调用ExitThread函数来结束该线程,从而中止了其下载主体代码的动作,从而导致这次攻击失败。
如果将本发明的缓冲区溢出攻击的检测方法应用于微软Windows操作系统中,其勾挂的API函数,包括:
创建进程:CreateProcessA、CreateProcessW及WinExec;
加载动态库:LoadLibraryA、LoadLibraryW;
分配内存空间:HeapAllocate;
查找关键API函数地址:GetProcAddress等。
前述这些API函数是进行缓冲区溢出攻击的恶意代码开始执行时必须调用的API函数,因此,只需对于这些关键的API函数调用进行勾挂,就能准确的识别出缓冲区溢出攻击。
另外,可以将本发明的缓冲区溢出攻击的检测方法内置于病毒防护系统中,对于计算机防护系统来说,实现了根本性的改变,具有很高的实用价值。
综上所述,利用本发明的缓冲区溢出攻击的检测方法,不但可以高效、准确的检查出恶意程序的缓冲区溢出攻击,而且避免了现有技术中的杀毒软件对新生病毒特征代码获取的滞后性,和防火墙系统使用时的繁琐以及给计算机知识很少的用户带来的麻烦。因此,本发明给计算机防护系统带来了革命性的进步,即使对于未知的恶意程序的缓冲区溢出攻击,也可以准确、及时的发现,并在其还没有对系统造成危害的时候,将其终止。
通过上述的说明内容,本领域相关工作人员完全可以在不偏离本项发明技术思想的范围内,进行多样的变更以及修改。因此,本项发明的技术性范围并不局限于说明书上的内容,必须要根据权利范围来确定其技术性范围。
Claims (5)
1、一种缓冲区溢出攻击的检测方法,其特征在于:通过建立勾挂函数,检查线程所建立的堆栈帧的返回地址,并根据该返回地址判断是否发生缓冲区溢出,并在发现缓冲区溢出后,将引起该缓冲区溢出的线程结束。
2、按照权利要求1所述拦缓冲区溢出攻击的检测方法,其特征在于,包括如下步骤:
2.1)通过所述勾挂系统API函数调用;
2.2)检查返回地址;
2.3)判断返回地址的位置;返回地址的位置如果是在堆栈范围以内,则判断为发生了栈溢出;
2.4)判断返回地址的属性;返回地址的属性如果是可写,则判断为发生了堆溢出。
3、按照权利要求1或2所述缓冲区溢出攻击的检测方法,其特征在于,还包括如下步骤:如果所述步骤2.3)判断结果为发生栈溢出,或所述步骤2.4)判断结果为发生堆溢出,则通过调用系统API函数,将引起该缓冲区溢出的线程结束。
4、按照权利要求2所述缓冲区溢出攻击的检测方法,其特征在于,所述勾挂的API函数,包括:创建进程、加载动态库、分配内存空间、查找关键API函数地址。
5、按照权利要求1或2所述缓冲区溢出攻击的检测方法,其特征在于:可以将本发明的缓冲区溢出拦截方法内置于病毒防护系统中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200510007681 CN1818822A (zh) | 2005-02-07 | 2005-02-07 | 缓冲区溢出攻击的检测方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200510007681 CN1818822A (zh) | 2005-02-07 | 2005-02-07 | 缓冲区溢出攻击的检测方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1818822A true CN1818822A (zh) | 2006-08-16 |
Family
ID=36918867
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200510007681 Pending CN1818822A (zh) | 2005-02-07 | 2005-02-07 | 缓冲区溢出攻击的检测方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1818822A (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101211388B (zh) * | 2006-12-27 | 2010-05-19 | 财团法人资讯工业策进会 | 产生及利用特征码以监测程序的装置及方法 |
CN101158891B (zh) * | 2007-11-19 | 2010-07-21 | 中国科学院计算技术研究所 | 在非cisc处理器上进行浮点栈溢出检查的装置和方法 |
CN101241464B (zh) * | 2007-02-05 | 2010-08-18 | 中兴通讯股份有限公司 | 一种检测堆栈帧破坏的方法 |
CN101206692B (zh) * | 2006-12-20 | 2011-04-27 | 联想(北京)有限公司 | 检测进程的方法及设备 |
CN101694686B (zh) * | 2009-09-21 | 2011-07-20 | 北京工业大学 | 基于逻辑隔离的缓冲区溢出动态度量方法 |
CN102394859A (zh) * | 2011-07-27 | 2012-03-28 | 哈尔滨安天科技股份有限公司 | 基于线程行为的木马窃取文件检测方法和系统 |
CN102737188A (zh) * | 2012-06-27 | 2012-10-17 | 北京奇虎科技有限公司 | 检测恶意网页的方法及装置 |
CN103150521A (zh) * | 2013-03-07 | 2013-06-12 | 周海林 | 一种高性能微处理器寄存器及其内存地址弹性保护方法 |
CN103559439A (zh) * | 2013-11-19 | 2014-02-05 | 浪潮(北京)电子信息产业有限公司 | 一种缓冲区溢出检测方法及系统 |
CN103984898A (zh) * | 2014-05-29 | 2014-08-13 | 北京神州绿盟信息安全科技股份有限公司 | 一种喷射模式攻击的检测方法和装置 |
CN104809391A (zh) * | 2014-01-26 | 2015-07-29 | 华为技术有限公司 | 缓冲区溢出攻击检测装置、方法和安全防护系统 |
CN105678168A (zh) * | 2015-12-29 | 2016-06-15 | 北京神州绿盟信息安全科技股份有限公司 | 一种基于栈异常的shellcode检测方法及装置 |
CN107851157A (zh) * | 2015-06-27 | 2018-03-27 | 迈可菲有限责任公司 | 恶意软件的检测 |
CN109426501A (zh) * | 2017-06-27 | 2019-03-05 | 比亚迪股份有限公司 | 堆栈自检方法和装置 |
CN109799992A (zh) * | 2018-12-05 | 2019-05-24 | 交控科技股份有限公司 | 一种城市轨道交通信号系统软件缓冲区范围检查方法 |
-
2005
- 2005-02-07 CN CN 200510007681 patent/CN1818822A/zh active Pending
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101206692B (zh) * | 2006-12-20 | 2011-04-27 | 联想(北京)有限公司 | 检测进程的方法及设备 |
CN101211388B (zh) * | 2006-12-27 | 2010-05-19 | 财团法人资讯工业策进会 | 产生及利用特征码以监测程序的装置及方法 |
CN101241464B (zh) * | 2007-02-05 | 2010-08-18 | 中兴通讯股份有限公司 | 一种检测堆栈帧破坏的方法 |
CN101158891B (zh) * | 2007-11-19 | 2010-07-21 | 中国科学院计算技术研究所 | 在非cisc处理器上进行浮点栈溢出检查的装置和方法 |
CN101694686B (zh) * | 2009-09-21 | 2011-07-20 | 北京工业大学 | 基于逻辑隔离的缓冲区溢出动态度量方法 |
CN102394859B (zh) * | 2011-07-27 | 2014-05-14 | 哈尔滨安天科技股份有限公司 | 基于线程行为的木马窃取文件检测方法和系统 |
CN102394859A (zh) * | 2011-07-27 | 2012-03-28 | 哈尔滨安天科技股份有限公司 | 基于线程行为的木马窃取文件检测方法和系统 |
CN102737188A (zh) * | 2012-06-27 | 2012-10-17 | 北京奇虎科技有限公司 | 检测恶意网页的方法及装置 |
CN103150521A (zh) * | 2013-03-07 | 2013-06-12 | 周海林 | 一种高性能微处理器寄存器及其内存地址弹性保护方法 |
CN103150521B (zh) * | 2013-03-07 | 2015-05-13 | 周海林 | 一种高性能微处理器寄存器及其内存地址弹性保护方法 |
CN103559439A (zh) * | 2013-11-19 | 2014-02-05 | 浪潮(北京)电子信息产业有限公司 | 一种缓冲区溢出检测方法及系统 |
US20160335430A1 (en) * | 2014-01-26 | 2016-11-17 | Huawei Technologies Co., Ltd. | Apparatus and Method for Detecting Buffer Overflow Attack, and Security Protection System |
CN104809391A (zh) * | 2014-01-26 | 2015-07-29 | 华为技术有限公司 | 缓冲区溢出攻击检测装置、方法和安全防护系统 |
CN103984898A (zh) * | 2014-05-29 | 2014-08-13 | 北京神州绿盟信息安全科技股份有限公司 | 一种喷射模式攻击的检测方法和装置 |
CN103984898B (zh) * | 2014-05-29 | 2017-02-01 | 北京神州绿盟信息安全科技股份有限公司 | 一种喷射模式攻击的检测方法和装置 |
CN107851157A (zh) * | 2015-06-27 | 2018-03-27 | 迈可菲有限责任公司 | 恶意软件的检测 |
CN105678168A (zh) * | 2015-12-29 | 2016-06-15 | 北京神州绿盟信息安全科技股份有限公司 | 一种基于栈异常的shellcode检测方法及装置 |
CN109426501A (zh) * | 2017-06-27 | 2019-03-05 | 比亚迪股份有限公司 | 堆栈自检方法和装置 |
CN109799992A (zh) * | 2018-12-05 | 2019-05-24 | 交控科技股份有限公司 | 一种城市轨道交通信号系统软件缓冲区范围检查方法 |
CN109799992B (zh) * | 2018-12-05 | 2022-07-19 | 交控科技股份有限公司 | 一种城市轨道交通信号系统软件缓冲区范围检查方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1818822A (zh) | 缓冲区溢出攻击的检测方法 | |
US8397292B2 (en) | Method and device for online secure logging-on | |
US6412071B1 (en) | Method for secure function execution by calling address validation | |
US8161552B1 (en) | White list creation in behavior monitoring system | |
CN103065092B (zh) | 一种拦截可疑程序运行的方法 | |
US8375451B1 (en) | Security for scanning objects | |
KR101265173B1 (ko) | 비실행 파일 검사 장치 및 방법 | |
CN101826139B (zh) | 一种非可执行文件挂马检测方法及其装置 | |
CN1834978A (zh) | 访问控制装置以及访问控制方法 | |
US8122507B1 (en) | Efficient scanning of objects | |
US7797702B1 (en) | Preventing execution of remotely injected threads | |
US7607122B2 (en) | Post build process to record stack and call tree information | |
EP2038753A1 (en) | Identifying malware in a boot environment | |
CN1731310A (zh) | Windows环境下的主机入侵检测方法 | |
US9910983B2 (en) | Malware detection | |
US11416611B2 (en) | Countering malware detection evasion techniques | |
CN102004882A (zh) | 远程线程注入型木马的检测和处理的方法和装置 | |
CN115840940A (zh) | 一种无文件木马检测方法、系统、介质及设备 | |
JP2003515219A (ja) | アプリケーションプログラムインターフェースを阻害する方法及びシステム | |
US9483645B2 (en) | System, method, and computer program product for identifying unwanted data based on an assembled execution profile of code | |
CN111191244A (zh) | 一种漏洞修复方法 | |
GB2543813A (en) | Improved malware detection | |
JP2003515218A (ja) | 呼び出しアドレスの確認による安全な機能実行の方法 | |
CN111259392B (zh) | 一种基于内核模块的恶意软件拦截方法及装置 | |
KR101421630B1 (ko) | 코드 인젝션된 악성코드 탐지 시스템 및 방법 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Open date: 20060816 |