0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

最为精简的一个Linux Fork***解析

Linux爱好者 来源:博客 作者:Saymagic 2021-09-07 16:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

转自: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限制了***创建线程。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217989
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73151

原文标题:解析超经典的 Fork 炸弹

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Labview 解析dxf文件并显示<

    /WSfacf1429558a55de185c428100849a0ab7-5f35.htm 下图是我做的文件解析,涵盖了常用的些图元对象,有单线段、多段线、表格、文字、标注、云
    发表于 11-14 22:45

    电磁干扰防护与屏蔽系统软件平台精简解析

    电子发烧友网站提供《电磁干扰防护与屏蔽系统软件平台精简解析.doc》资料免费下载
    发表于 10-16 16:56 1次下载

    电磁兼容与电磁干扰快速评估平台系统解析(精简版)

    电磁兼容与电磁干扰快速评估平台系统解析(精简版)
    的头像 发表于 09-15 21:36 461次阅读
    电磁兼容与电磁干扰快速评估平台系统<b class='flag-5'>解析</b>(<b class='flag-5'>精简</b>版)

    复杂电磁环境构建与测试软件系统解析(精简版)

    复杂电磁环境构建与测试软件系统解析(精简版)
    的头像 发表于 09-15 21:05 459次阅读
    复杂电磁环境构建与测试软件系统<b class='flag-5'>解析</b>(<b class='flag-5'>精简</b>版)

    电磁环境数据库管理系统平台软件解析

    电磁环境数据库管理平台软件解析(精简版)
    的头像 发表于 09-15 21:00 130次阅读
    电磁环境数据库管理系统平台软件<b class='flag-5'>解析</b>

    电磁脉冲防护系统平台全面解析精简版)

    电磁脉冲防护系统平台全面解析精简版)
    的头像 发表于 09-15 17:19 740次阅读
    电磁脉冲防护系统平台全面<b class='flag-5'>解析</b>(<b class='flag-5'>精简</b>版)

    电磁干扰防护与屏蔽系统平台解析精简版)

    电磁干扰防护与屏蔽系统平台解析精简版)
    的头像 发表于 09-15 17:17 660次阅读
    电磁干扰防护与屏蔽系统平台<b class='flag-5'>解析</b>(<b class='flag-5'>精简</b>版)

    电磁兼容与雷达隐身技术测试系统解析

    电磁兼容与雷达隐身技术测试系统解析精简版)
    的头像 发表于 09-15 17:11 327次阅读
    电磁兼容与雷达隐身技术测试系统<b class='flag-5'>解析</b>

    【HZ-T536开发板免费体验】—— linux 进程创建

    Linux进程通信方式有这几种: 1。管道 2。信号量 3。消息队列 4。共享内存 在本帖子中,我会讲解fork(),exit()系统调用的实践。通过应用编程来实现系统调用。 1,进程创建 打开
    发表于 09-01 20:49

    Linux权限体系解析

    你真的了解Linux权限吗?大多数人只知道rwx,但Linux的权限体系远比你想象的复杂和强大。今天我们深入探讨Linux的12位权限体系,这是每个运维工程师都应该掌握的核心知识。
    的头像 发表于 07-23 16:57 595次阅读

    文掌握Linux命令

    作为名运维工程师,熟练掌握Linux命令是基本功中的基本功。无论是日常工作中的系统维护,还是面试时的技术考核,Linux命令都是绕不开的核心技能。本文将从实战角度出发,系统梳理运维工程师必须掌握的
    的头像 发表于 07-22 15:23 448次阅读

    怎么结合嵌入式,Linux,和FPGA三方向达到均衡发展?

    在嵌入式领域,不少人都怀揣着让嵌入式、Linux 和 FPGA 三方向实现均衡发展的梦想,然而实践中却面临诸多挑战。就像备受瞩目的全栈工程师稚晖君,他从大学玩单片机起步,凭借将智能算法融入嵌入式而
    的头像 发表于 06-25 10:08 653次阅读
    怎么结合嵌入式,<b class='flag-5'>Linux</b>,和FPGA三<b class='flag-5'>个</b>方向达到<b class='flag-5'>一</b><b class='flag-5'>个</b>均衡发展?

    深度解析Linux中的DNS服务

    dns,Domain Name Server,它的作用是将域名解析为 IP 地址,或者将IP地址解析为域名。
    的头像 发表于 04-09 16:13 689次阅读

    从零开始驯服Linux):ZYNQ-Linux启动文件构建全解析

    本帖最后由 jf_85110202 于 2025-3-20 17:42 编辑 从零开始驯服Linux):ZYNQ-Linux启动文件构建全解析 ZYNQ系列芯片集成了ARM
    发表于 03-20 16:48

    Linux系统中最重要的三命令

    Linux三剑客是Linux系统中最重要的三命令,它们以其强大的功能和广泛的应用场景而闻名。这三工具的组合使用几乎可以完美应对Shell中的数据分析场景,因此被统称为
    的头像 发表于 03-03 10:37 804次阅读