跳至內容

Fork炸彈

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

fork 炸彈(英語:fork bomb), 佇電腦領域內底是一種利用系統調用 fork(抑是其他的等效的方式)進行的阻斷服務攻擊。佮病毒佮擽蟲無仝款的是,fork 炸彈無傳染性,而且 fork 炸彈會使有行程 / 程式限制的系統無法度駛起新工作階段,對無限制行程數的系統使使停止回應。以 fork 炸彈為代表的自我複製程式有時亦被稱為 wabbit。

原理佮影響

fork 炸彈以極緊的速度建立大量的行程(行程數呈以二為底數的指數增長趨勢), 閣愛消磨系統分配予行程會使用空間來使行程講飽和,啊若系統佇咧行程表飽和了後就無法度執行新程式,除非行程表中的某一行程終止;毋過因為 fork 炸彈程式所建立的所有的實例攏會不斷探測空欠的行程槽而且試用以建立新行程,就算佇某行程終止了嘛有基本無可能執行新行程。fork 炸彈成做的子程式佇咧消磨行程表空間的同時嘛會占用 CPU 佮記憶體,對這款致使系統佮這馬執行速度放予慢,回應時間嘛會隨之大幅增加,致使無法度正常完成任務,對而且使系統的正常運作受著嚴重影響。

除了惡意觸發 fork 炸彈破壞的狀況以外,軟體開發中有時陣也會不慎佇咧程式中樞入去 fork 炸彈,如在用監聽網路通訊端並列使客戶捀-侍服器結構系統奉服器捀職責的應用程式內底可能需要無限地進行迴圈(loop)佮衍生(fork)操作(類似下節範例程式所示), 佇咧這款情形下原始碼內的細細錯誤就可能佇咧測試「引爆」fork 炸彈。

範例

以下程式段就是由著 Jaromil 所做的佇類似 UNIX 系統的 shell 環境下觸發 fork 炸彈的 shell 指令碼代碼,總共干焦用十三字元(包括空格):

註解如下:

其中函式名「:」只是簡省的一例,實際上會當隨意設定,一个較𠢕理解(將函式名替換做「forkbomb」)如何的版本如下:

Windows 下則會使批次處理命令如下實作:

POSIX 標准下的 C 佮 C + + 的實作:

Perl 語言的實作:

「熄火」

佇系統中成功「引爆」fork 炸彈了後,會當重新啟動來使系統恢復正常執行;若是欲用手動的方法使 fork 炸彈「熄火」,彼陣咧講就是講著愛刣死 fork 炸彈產生的所有的行程。咱會當考慮使用程式來刣死 fork 炸彈產生的行程,毋過因為這一般需要建立新行程,而且因為 fork 炸彈一直咧探測佮占用行程槽佮記憶體空間,因為這一方法無簡單實現,雖罔用 ` kill ` 命令刣死行程了後,釋放出的行程會予下跤的 fork 炸彈執行緒所產生的新行程占用,但是會使用迴圈刣死所有的行程,猶毋過嘛會共無關係的行程刣死佇 Windows 落,使用者會當登出當前使用者對談的方式使系統恢復正常,毋過這法奏效的前提是 fork 炸彈是佇該使用者的特定對談內觸發的。

預防

因為 fork 炸彈透過不斷的開新行程來半遂系統,一个防止其嚴重影響系統的方法就是限定一个使用者會當建立的行程數的上限,佇咧 Linux 系統上,會當透過 ulimit 這个指令達到相應的效果,比如講:ulimit-Hu 三十這个指令會當限制每一个使用者上濟干焦會當建立三十个行程,閣會當通過修改設定檔 / etc / security / limits . conf 來限制通生的上大行程數來避開這枚炸彈。而且 FreeBSD 系統的話系統管理者會當佇 / etc / login . conf 下底的設定檔做相關的設定

參考資料

參見

  • 無限迴圈
  • Fork ( 作業系統 )
  • 行程管理 ( 電腦科學 )
  • 邏輯炸彈本條目部份抑是全部內容出自以 GFDL 授權發佈的《自由線上電腦詞典》(FOLDOC)。