📜  叉子炸弹

📅  最后修改于: 2021-05-25 18:27:18             🧑  作者: Mango

先决条件: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()炸弹脚本,如下所示。

:(){ :|: & };:

脚本的逐步说明:

  1. :()表示您正在定义一个称为的函数:
  2. {:|:&}表示运行函数:并将其输出再次发送到:函数,然后在后台运行。
    • –将’:’函数的另一个副本加载到内存中
    • | –并将其输出通过管道传输到
    • –’:’函数的另一个副本,必须将其加载到内存中
    • 因此,只要调用“:”, “:|:”就简单地加载了“:”的两个副本。
    • –取消功能,如果第一个’:’被杀死,则不应自动终止已启动的所有功能
    • } –当我们说“:”时该做什么的结尾
  3. ;命令分隔符
  4. 第一次运行函数

    本质上,您正在创建一个函数,该函数每次调用都会调用两次,并且没有任何方法可以终止自身。在您用尽系统资源之前,它将不断加倍。

    这个怎么运作

    叉式炸弹的运行既通过在分叉过程中消耗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基础课程》。