先决条件:C语言中的fork()
Fork Bomb是一个程序,它会由于内存不足而损坏系统。它无限分叉进程以填充内存。分支炸弹是针对基于Linux的系统的拒绝服务(DoS)攻击的一种形式。
一旦在系统中激活成功的前叉炸弹,就可能无法在不重新启动系统的情况下恢复正常操作,因为前叉炸弹的唯一解决方案是销毁它的所有实例。
叉子炸弹的C程序
// C program Sample for FORK BOMB
// It is not recommended to run the program as
// it may make a system non-responsive.
#include
#include
int main()
{
while(1)
fork();
return 0;
}
叉子炸弹的打击脚本
注意:除非您已准备好崩溃和/或强制重新引导系统,否则请不要运行此命令以对其进行“测试”。另外,它不需要root即可运行。
如果使用终端,则bash脚本用于fork()炸弹脚本,如下所示。
:(){ :|: & };:
脚本的逐步说明:
- :()表示您正在定义一个称为的函数:
- {:|:&}表示运行函数:并将其输出再次发送到:函数,然后在后台运行。
-
- : –将’:’函数的另一个副本加载到内存中
- | –并将其输出通过管道传输到
- : –’:’函数的另一个副本,必须将其加载到内存中
- 因此,只要调用“:”, “:|:”就简单地加载了“:”的两个副本。
- & –取消功能,如果第一个’:’被杀死,则不应自动终止已启动的所有功能
- } –当我们说“:”时该做什么的结尾
- ;命令分隔符
- :第一次运行函数
本质上,您正在创建一个函数,该函数每次调用都会调用两次,并且没有任何方法可以终止自身。在您用尽系统资源之前,它将不断加倍。
这个怎么运作
叉式炸弹的运行既通过在分叉过程中消耗CPU时间,又可以通过使操作系统的进程表饱和来进行。叉子炸弹的基本实现是一个无限循环,该循环反复启动其自身的新副本。
为了使系统不起作用,他们依赖于这样的假设:可以在计算机上同时执行的程序和进程的数量。 fork()会生成新进程,但是如果您将此进程放入true循环中,则会创建许多进程,并且当超过限制时,系统将崩溃。防止fork()炸弹的方法
- 避免在可能导致无限循环的任何语句中使用fork。
- 您可以按如下方式限制fork的过程:
只需以root用户身份登录,然后编辑此文件,即可添加用户并配置其限制。# vi /etc/security/limits.conf
将文件编辑为:
your_user_name hard nproc 10
现在your_user_name可以创建10个进程
- 如果要运行该命令,可以尝试在Virtualbox中运行该命令。
- 万一您已运行系统,而又找不到解决方法,请直接关闭系统电源。
参考:
- 维基百科
- 询问ubuntu
想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。