叉子炸弹背后的历史是什么?

叉子炸弹背后的历史是什么?

我已经阅读了有关其功能的其他问题——叉子炸弹通过在分叉过程中消耗 CPU 时间以及使操作系统的进程表饱和来进行操作。

分叉炸弹的基本实现是一个无限循环,重复启动相同的进程。

但我真的很想知道:这个命令的来历是什么?为什么是这个:(){ :|:& };:而不是另一个?

答案1

这不是什么新鲜事。它的历史可以追溯到 1970 年代推出的时候。

引用自这里,

Fork 炸弹最早的描述之一是 1969 年在华盛顿大学的 Burroughs 5500 上。它被描述为一个名为 RABBITS 的“黑客”,它在运行时会制作两个自身副本,而这两个副本会生成两个副本。每个副本都会产生更多副本,并且副本会继续制作更多副本,直到内存已满,从而导致系统崩溃。问:1972 年,厌世者使用 BASIC 编写了一个类似 Rabbit 的程序,当时他还在读 7 年级。耶鲁大学的 Jerry Leichter 描述了在他的母校普林斯顿听到的类似兔子或叉子炸弹的程序,并说考虑到他的毕业日期,这些程序一定来自1973 年或更早。 1974 年的一篇报道描述了一个实际上名为“兔子”的程序,该程序在一家大公司的 IBM 360 系统上运行,一名年轻员工因运行该程序而被解雇。

所以这:(){ :|:& };:只是在 shell 中实现 fork 炸弹的一种方法。如果您采用其他编程语言,您也可以使用这些语言来实现。例如,在 python 中,你可以将 fork 炸弹实现为:

 import os
 while True: 
     os.fork()

更多用不同语言实现 fork 炸弹的方法可以从维基百科关联。

如果您想了解语法,那非常简单。 shell 中的正常函数如下所示:

foo(){
    # function code goes here
}

炸弹fork()的定义如下:

:(){
 :|:&
};:

:|:- 接下来,它将使用称为递归的编程技术来调用自身,并将输出通过管道传输到函数的另一个调用:。最糟糕的部分是函数被调用两次来轰炸你的系统。

&- 将函数调用放在后台,这样子进程就不会死掉并开始消耗系统资源。

;- 终止函数定义

:- 调用(运行)该函数,也称为设置 fork() 炸弹。

这是更易于人类阅读的代码:

bomb() {
 bomb | bomb &
}; bomb

参考

http://www.cyberciti.biz/faq/understanding-bash-fork-bomb/

答案2

一位意大利黑客艺术家将其表述为一系列类似微笑的字符,并使其流行起来:https://jaromil.dyne.org/journal/forkbomb.html

毕竟,同样的 fork 炸弹可以用更容易理解的方式编写:

bomb() {
 bomb | bomb &
}
bomb

然而,雅罗米尔想以一种诗意的方式编码病毒,引用他的话:

在将源代码视为文学时,我将病毒描述为魏尔伦、兰波等人写的那种诗歌,反对那些将网络作为异性恋社会的安全区出售的人。 [...] 病毒是一个仍然极其庞大的社会的政治症状,禁止病毒并不能解决由此产生的问题。对于匿名和黑客攻击也是如此。

必须指出的是,雅罗米尔并未发明炸弹,而是将其作为匿名艺术作品提出。

相关内容