Contents

防止Bash Fork炸弹

1. 概述

在本教程中,我们将了解 Bash 分叉炸弹的工作原理以及我们如何防止它。

2. 它是如何工作的

Bash分叉炸弹 是一系列 Bash 命令运行一个永无止境的递归函数 ,导致系统资源的失控消耗最终使系统变得无响应甚至崩溃。

创建fork炸弹最常见的方法是定义一个函数,在后台创建相同函数的子进程

# Warning: don't run this command on your computer unless you want it to crash.
$ :(){ :|: & };:

这是一个名为“:”的函数的定义,它将自行执行,通过管道 将结果返回到后台执行的另一个自身实例。然后第一次调用该函数,并在行尾使用 :

我们还可以用更易读的方式编写这个 Bash 分叉炸弹:

forkbomb() { 
    forkbomb | forkbomb & 
};forkbomb

我们可以看到这个函数每次都调用自己两次,并且没有办法终止自己。这最终会导致系统崩溃。

3. 缓解技术

分叉炸弹不是 Bash 独有的,许多其他语言都可以实现它们。

发生分叉炸弹的原因主要有两个:

  • 一个软件错误,在某些时候会创建太多进程,导致计算机崩溃
  • 恶意黑客攻击,黑客找到一种方法在受害者的系统上运行他们的代码并实施分叉炸弹,以便在该计算机上执行拒绝服务

我们可以通过限制用户可以运行的进程数来防止 Bash fork 炸弹使我们的系统崩溃。

我们可以通过编辑具有 root 权限的*/etc/security/limits.conf*文件并为用户设置最大进程数来实现这一点:

user_name hard nproc number_of_processes

现在的问题是,将多少进程设置为限制

知道一个好数字的一个简单方法是打开我们通常同时使用的尽可能多的程序,然后在终端中计算它们

$ ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1

然后我们应该取这个数字并乘以 2 以保持保守。我们这样做是因为如果我们将数字设置得太低,我们可能会在日常使用中遇到一些问题。

之后,我们可以完成对*/etc/security/limits.conf*文件的编辑,最后重新启动系统以应用新配置。

4. 有用的用例

事实证明,叉形炸弹实际上在攻击者之外有其用途。

例如,系统管理员经常使用 Bash 分叉炸弹来测试他们是否正确配置了服务器或对其系统执行压力测试。

Bash fork 炸弹还可用于测试系统死机时**Watchdog 是否会正确重启 Linux 嵌入式板。**