如何保护 Ubuntu 免受 fork 炸弹的攻击

dbl*_*ang 78 security command-line

我听到有人在谈论叉子炸弹,我做了一些研究,发现了一些可怕的信息,关于人们可以让你在命令行输入一些看起来很奇怪的字符,结果在计算机上做坏事。我当然不会发出我不明白的命令,但人们永远不知道会发生什么。

我听说有些操作系统允许管理员对用户进程设置一些限制以减轻 fork 炸弹的影响,默认情况下是 Ubuntu 中的这种保护还是具有 sudo 权限的人必须设置它?如果是这样,如何?

Mar*_*ppi 77

您可以通过修改来轻松限制可以在 Ubuntu 和大多数其他 Linux 发行版中生成的进程数量 /etc/security/limits.conf

sudoedit /etc/security/limits.conf
Run Code Online (Sandbox Code Playgroud)

然后将此行添加到该文件的底部:

*    hard     nproc     nnn
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • hard 在内核级别设置限制,以便在不重新启动的情况下无法更改它。
  • nproc 是每个用户的最大进程数。
  • nnn 是您应该通过以下方式为您的系统计算的数字:

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    
    Run Code Online (Sandbox Code Playgroud)

上面的命令将列出所有用户的所有进程,包括线程,汇总并列出进程数最多的用户名。为了安全起见,请在运行上述命令之前打开您通常需要的尽可能多的应用程序,然后为了安全起见将该数量加倍。

设置此限制后,您需要重新启动,但这会影响系统上的每个非 root用户。因此,如果任何非 root 用户执行 fork 炸弹,它将具有该硬限制。

默认情况下,组和通配符限制不适用于 root 用户root如果要将规则应用于超级用户,请在规则中使用文字用户名。

此外,如果您不希望很快重新启动,您可以使用sudo ulimit -u 800which 将限制仅放在正在运行的会话上,但可以通过具有sudo特权的 fork 炸弹轻松规避!

重新启动后,/etc/security/limits.conf将使用其中的任何内容。

关于分叉炸弹的一些附加信息:它们不是恶意软件或任何可怕的东西。它们通常由一些基本的东西组成,比如一个两次调用自身的脚本——从而以指数方式增加它在机器上的存在。尽管由于速度快,它们占用的内存很小,但它们会迅速填满所有可用的 RAM,并且机器会冻结或重新启动。唯一的危险是丢失未保存的信息。我会将叉形炸弹归类为恶作剧而不是恶意软件。

一个重要的提醒:

当您不能 98% 确定其操作时,您应该很少在命令行中执行任何操作。如果您无法阅读正在执行的命令,请不要这样做。这适用于不可读的 hex/base64 字符块,这可以用来掩盖各种肮脏的东西。如果您不确定某个命令,您可以随时在Ubuntu 手册页中搜索它的操作,并且在使用时要格外小心,sudo因为它将以 root 用户身份执行。