一种基于污点分析的缓冲区溢出检测方法

2012-04-13 11:37
科技视界 2012年24期
关键词:污点缓冲区攻击者

孙 峰

(中国民航信息网络股份有限公司 中国 北京 100010)

一种基于污点分析的缓冲区溢出检测方法

孙 峰

(中国民航信息网络股份有限公司 中国 北京 100010)

缓冲区溢出占据了目前网络攻击的90%以上,给信息安全造成了巨大的威胁。本文提出了一种针对基于污点分析的动态分析方法,该方法追踪网络数据在系统内的传播过程,并在网络数据被非法使用的时候报警,能够有效检测到各类缓冲区溢出攻击。

缓冲区溢出攻击;网络攻击;信息安全

0 简介

缓冲区溢出是目前最常见的软件安全漏洞之一,接近90%的网络攻击都是通过缓冲区溢出漏洞达成的。通过精心构造程序输入,攻击者可以通过缓冲区溢出覆盖几乎任何他想覆盖的目标,并在这个过程中植入shellcode[1]。这样,当应用程序对输入数据进行处理的时候,其控制流将会被篡改,从而执行攻击者所期望执行的恶意代码。从1988年的Morris蠕虫开始,直到2010年对伊朗核工业设施造成巨大破坏的“震网”病毒,一直到最近的危害更胜“震网”的“超级火焰”病毒,当中都利用了缓冲区溢出攻击技术。可见,缓冲区溢出是目前最重要的网络安全威胁之一。

传统的缓冲区溢出分为静态分析和动态分析两种方法。静态分析能够覆盖更多的程序执行路径,具有更高的覆盖率,但需要程序的源代码,如Stack Guard[2];动态分析方法根据软件的实际执行来对缓冲区溢出进行检测,更贴近软件真实行为,但只能覆盖单一的执行路径,如CRED[3]。因此,静态分析和动态分析方法两者各有所长,不能互相取代。本文提出了一种基于污点分析[4]的动态分析方法来检测基于网络的缓冲区溢出攻击,它的基本思想是:首先通过将网络数据打标标记为污点数据,然后利用模拟器如QEMU[5]等跟踪污点数据在系统内的传播过程。一旦污点数据被非法使用,则说明可能发生了缓冲区溢出攻击,系统报警。

1 缓冲区溢出原理及其分类

根据缓冲区溢出的不同,分为如下三种形式:栈溢出、堆溢出和BSS溢出。

1)栈溢出

栈是在函数调用的时候建立的,它包含以下信息:函数参数信息;函数返回地址信息;栈顶和栈底信息;局部变量的信息等。栈的生长方向是从内存高地址向低地址生长的,其数据的压入和弹出操作由PUSH和POP完成,并且遵循后进先出的原则。当函数被调用时,其函数参数、函数返回地址、栈帧信息和局部变量依次压入到堆栈当中。这样,通过向栈中压入超长的数据,就有可能改变函数的返回地址,从而使得函数在返回的时候执行攻击者所期望执行的代码。例如:假设函数存在某个数组参数s[20],则当执行strcpy(s,attackstr)时,只要 attackstr的长度足够长(>20),就会覆盖函数返回地址IP。通过精心构造attackstr字符串,就可以从而达到攻击目的。

2)堆溢出

在C语言中,使用malloc()可以动态分配一段内存,并向用户返回一个内存地址,而实际上这个地址前面通常还有8Bytes的内部结构,用来记录分配的块长度以及一些标志,如图1所示。

显然,在malloc分配的用户数据后面,紧接着的是本堆的数据(4B)和上一堆的字节数(4B)。这样,当用户输入的数据超长,超过了malloc的参数指定的长度时,本堆的字节数和上一堆的字节数就可以被覆盖,从而实现了堆溢出。

图1 堆分配示意图

3)BSS 溢出

BSS和静态全局变量相关。例如,假设有如下定义:

static char buf1[10],buf2[12];

则buf1和but2两个数组位于BSS段。如果buf1写入的数据足够长(>10),例如12个字节,则会覆盖buf2的内容。利用这点,攻击者可以通过改写BSS中的指针或函数指针等方式,改变程序原先的执行流程,使指针跳转到特定的内存地址并执行攻击者指定的操作。

从以上分析可以知道,对于缓冲区溢出攻击,其发生的根本原因是类C语言不对缓冲区做边界检查,从而使得攻击者可以通过输入超长的数据(超过缓冲区的长度)来覆盖某些内存单元,进而达到控制程序流程的目的。

2 基于污点分析的缓冲区溢出检测方法

对于基于网络攻击的缓冲区溢出而言,根据上面的分析,攻击者必须通过网络从远程将(超长)数据传入到应用程序的缓冲区以篡改程序的控制流。换句话说,当缓冲区溢出发生时,一定是攻击者通过网络传入的攻击数据被使用了。从这个结论出发,如果能够监控应用程序对数据的使用,一旦发现EIP寄存器或者JMP系列机器指令使用的是网络数据,则意味着很可能发生了缓冲区溢出攻击(因为通常的缓冲区是数据而不是指令,因而不会被EIP寄存器或者JMP指令使用)。而为了监控网络数据的时候,可以采用污点分析的方法,将网络数据打上污点标记,并利用硬件模拟器如QEMU等对机器指令的执行进行模拟即可。整个系统的流程如图2所示。

从图2可以看到,基于污点分析的缓冲区溢出攻击检测有三个大的步骤:

1)标记污点数据。这是通过将网络数据打上污点标记完成的。通过在QEMU内部的“影子内存”,将网络传入的数据打上污点标记。进行污点标记时,可以使用一个bit的影子内存标记一个字节的网络数据,显然,这种方式只能说明某个字节是否是网络数据。如果需要记录更多的信息,可以使用更多的bit来标记一个字节的网络数据。

2)跟踪污点传播。QEMU硬件模拟器将采用软件方式来模拟机器指令的执行。这使得我们可以利用QEMU来跟踪污点数据的传播。其基本过程是:根据不同的机器指令,当源操作数是污点数据时,则目的操作数也应该打上污点标记。例如:对于“MOV AX,DX”,若DX存储的污点数据,则AX也应该打上污点标记标明为污点数据。这一部分需要根据机器指令的分类:算术指令、单操作数、双操作数、三操作数指令等来实现不同的跟踪。

图2 基于污点分析的缓冲区溢出攻击检测

3)检测溢出攻击。当QEMU的指令模拟发现JMP指令的操作数是污点数据,或者EIP寄存器内部存储的是污点数据,则说明发生了缓冲区溢出攻击。事实上,上述规则是最低限的普遍规则。根据不同的场景,检测规则可以更加复杂。例如:可以检测函数调用参数,当某些函数调用参数是污点数据时,可能发生了其他类型的溢出攻击等等。

3 结论

缓冲区溢出是一种危害非常大的攻击方式。针对基于网络的缓冲区溢出攻击特点:当攻击发生时,一定使用了网络传入的、攻击者精心设计的网络数据流,本文提出了一种基于污点分析的缓冲区溢出检测方法。它通过监控网络数据的传入,并通过打标跟踪网络数据在系统内的传播和使用过程,实现了缓冲区溢出攻击的检测。实验证明我们的方法是有效的。

[1]林志强,王逸,茅兵,等.SafeBird:一种动态和透明的运行时缓冲区溢出防御工具集[J].电子学报,2007,35(5):882-889.

[2]C.Cowan,C.Pu,D.Maier,et al.StackGuard:Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks[C].Proceedings of the 7th USENIX Security Symposium,1998.

[3]O.Ruwase,M.S.Lam.A Practical Dynamic Buffer Overflow Detector[C].Proceedings of the 11th Annual Network and Distributed System Security Symposium,2004.

[4]J.Newsome,D.Song.Dynamic Taint Analysis for Automatic Detection,Analysis,and Signature Generation of Exploits on Commodity Software[R].CMU-CS-04-140,2004.

[5]QEMU WiKi[EB/OL].[2012-07-24].http://wiki.qemu.org/Main_Page.

A Buffer Overflow Detection Method based on Taint Analysis

SUN Feng
(Travel Sky Technology Limited,Beijing,100010,China)

Buffer overflow is the one of the most often-seen attacks,and nearly 90%of the network attacks are cause by it.To address this issue,a dynamic analysis approach is introduced.The approach uses the taint analysis to track the propagation of network data flow,and throws an alarm when the abnormal use of network data is detected.Experimental results show that it can efficiently detect a variety of buffer overflow attacks.

Buffer overflow attack;Network attack;Information security

孙峰(1977—),男,吉林长春人,硕士研究生,就职于中国民航信息网络股份有限公司,研究方向为软件测试与信息安全。

尹雪梅]

猜你喜欢
污点缓冲区攻击者
基于代码重写的动态污点分析
基于微分博弈的追逃问题最优策略设计
正面迎接批判
嫩江重要省界缓冲区水质单因子评价法研究
使用Lightroom污点去除工具清理照片中的瑕疵
有限次重复博弈下的网络攻击行为研究
我国“污点证人”刑事责任豁免制度的构建
关键链技术缓冲区的确定方法研究
地理信息系统绘图缓冲区技术设计与实现
AVS标准中的视频码流缓冲区校验模型分析