转自:http://blog.saymagic.cn/2015/03/25/fork-bomb.html
jaromil在2002年设计了最为精简的一个linux fork炸弹,整个代码只有13个字符,在shell中运行后几秒后系统就会宕机:
:() { :|:& };:
这样看起来不是很好理解,我们可以更改下格式:
:()
{
:|:&
};
:
更好理解一点的话就是这样:
bomb()
{
bomb|bomb&
};
bomb
因为shell中函数可以省略function关键字,所以上面的十三个字符是功能是定义一个函数与调用这个函数,函数的名称为:,主要的核心代码是:|:&,可以看出这是一个函数本身的递归调用,通过&实现在后台开启新进程运行,通过管道实现进程呈几何形式增长,最后再通过:来调用函数引爆炸弹。因此,几秒钟系统就会因为处理不过来太多的进程而死机,解决的唯一办法就是重启。
bomb一下
秉着不作不死的心态,我们也来运行一下,于是我将矛头指向云主机,我使用了国内的一个2g内存的云主机,首先在本地开启两个终端,在一个终端连接云主机后运行炸弹,几秒后再尝试用另外一个终端登录,效果可以看下面gif图:
看,运行一段时间后直接报出了-bash: fork: cannot allocate memory,说明内存不足了。并且我在二号终端上尝试连接也没有任何反应。因为是虚拟的云主机,所以我只能通过主机服务商的后台来给主机断电重启。然后才能重新登录:
炸弹危害
fork炸弹带来的后果就是耗尽服务器资源,使服务器不能正常的对外提供服务,也就是常说的dos(denial of service)。与传统1v1、通过不断向服务器发送请求造成服务器崩溃不同,fork炸弹有种坐山观虎斗,不费一兵一卒斩敌人于马下的感觉。更吓人的是这个函数是不需要root权限就可以运行的。看到网上有帖子说某些人将个性签名改为fork炸弹,结果果真有好奇之人中枪,试想如果中枪的人是在公司服务器上运行的话,oh,!
预防方式
当然,fork炸弹没有那么可怕,用其它语言也可以分分钟写出来一个,例如,python版:
import os
while true:
os.fork()
fork炸弹的本质无非就是靠创建进程来抢占系统资源,在linux中,我们可以通过ulimit命令来限制用户的某些行为,运行ulimit -a可以查看我们能做哪些限制:
ubuntu@10-10-57-151:~$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 7782
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
posix message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 7782
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
可以看到,-u参数可以限制用户创建进程数,因此,我们可以使用ulimit -u 20来允许用户最多创建20个进程。这样就可以预防bomb炸弹。但这样是不彻底的,关闭终端后这个命令就失效了。我们可以通过修改/etc/security/limits.conf文件来进行更深层次的预防,在文件里添加如下一行(ubuntu需更换为你的用户名):
ubuntu - nproc 20
这样,退出后重新登录,就会发现最大进程数已经更改为20了,
这个时候我们再次运行炸弹就不会报内存不足了,而是提示-bash: fork: retry: no child processes,很棒,此时说明linux限制了炸弹创建线程。
vivo X23将采用美人尖式的全面屏,四周边框极窄
短波红外在工业中的应用有哪些?
LPWAN处于黄金年代 NB-IoT将获得高增长率
数字电路中逻辑门的电路符号图
索尼Xperia1还未发布多久,Xperia2的渲染图就在网上曝光了
最为精简的一个Linux Fork炸弹解析
电源适配器测试之检测好坏的方法
小米Note4X定了!亮相工信部:内存升级+十核处理器!
美国医疗保险公司Anthem正在使用区块链技术来保护医疗数据
小米6最新消息!不用抢?!小米出啥事了?为啥都现货了
资本追逐的14个人工智能细分领域详解
单相的220V如何变成380V的三相电
MAXHUB会议平板如何助力前途汽车走向更好的“前途”
人群预防系统利用智能杆打造更安全的海滩
数字货币公司Coinbase正式宣布已全面支持比特币现金
变压器继电保护的检查与处理
蜂窝电话功率放大器 天线接口的自适应调谐
英特尔将请求欧盟法院撤销14亿美元罚款
深圳市深化“5G+AI+8K”等应用,全面构建5G应用生态体系
木质台钻详细制作教程