經典的 Fork 炸彈解析

2021-07-26 11:17:45 字數 2996 閱讀 2454

jaromil在2023年設計了最為精簡的乙個linux fork炸彈,整個**只有13個字元,在shell中執行後幾秒後系統就會宕機:

:();:

這樣看起來不是很好理解,我們可以更改下格式:

:();

:

更好理解一點的話就是這樣:

bomb

();

bomb

因為shell中函式可以省略function關鍵字,所以上面的十三個字元是功能是定義乙個函式與呼叫這個函式,函式的名稱為:,主要的核心**是:|:&,可以看出這是乙個函式本身的遞迴呼叫,通過&實現在後台開啟新程序執行,通過管道實現程序呈幾何形式增長,最後再通過:來呼叫函式引**彈.因此,幾秒鐘系統就會因為處理不過來太多的程序而宕機,解決的唯一辦法就是重啟。

秉著不作不死的心態,我們也來執行一下,於是我將矛頭指向雲主機,,我使用了國內的乙個2g記憶體的雲主機,首先在本地開啟兩個終端,在乙個終端連線雲主機後執行炸彈,幾秒後再嘗試用另外乙個終端登入,效果可以看下面gif圖:

看,執行一段時間後直接報出了-bash: fork: cannot allocate memory,說明記憶體不足了。並且我在二號終端上嘗試連線也沒有任何反應。因為是虛擬的雲主機,所以我只能通過主機服務商的後台來給主機斷電重啟。然後才能重新登入:

fork炸彈帶來的後果就是耗盡伺服器資源,使伺服器不能正常的對外提供服務,也就是常說的dos(denial of service)。與傳統1v1、通過不斷向伺服器傳送請求造成伺服器崩潰不同,fork炸彈有種坐山觀虎鬥,不費一兵一卒斬敵人於馬下的感覺。更嚇人的是這個函式是不需要root許可權就可以執行的。看到網上有帖子說某些人將個性簽名改為fork炸彈,結果果真有好奇之人中槍,試想如果中槍的人是在公司伺服器上執行的話,oh,!

當然,fork炸彈沒有那麼可怕,用其它語言也可以分分鐘寫出來乙個,例如,python版:

import

os

while

true

:os

.fork

()

fork炸彈的本質無非就是靠建立程序來搶占系統資源,在linux中,我們可以通過ulimit命令來限制使用者的某些行為,執行ulimit -a可以檢視我們能做哪些限制:

ubuntu@10-10

-57-151

:~$ ulimit

-acore

file

size

(blocks,-c)0

data seg

size

(kbytes,-

d)unlimited

scheduling priority (-e

)0file

size

(blocks,-

f)unlimited

pending signals (-i

)7782

max locked memory

(kbytes,-

l)64

max memory

size

(kbytes,-

m)unlimited

open files (-n

)1024

pipe

size

(512

bytes,-p)8

posix message queues

(bytes,-

q)819200

real

-time

priority (-r

)0stack

size

(kbytes,-

s)8192

cpu

time

(seconds,-

t)unlimited

max user processes (-u

)7782

virtual

memory

(kbytes,-

v)unlimited

file

locks (-x

)unlimited

可以看到,-u引數可以限制使用者建立程序數,因此,我們可以使用ulimit -u 20來允許使用者最多建立20個程序。這樣就可以預防bomb炸彈。但這樣是不徹底的,關閉終端後這個命令就失效了。我們可以通過修改/etc/security/limits.conf檔案來進行更深層次的預防,在檔案裡新增如下一行(ubuntu需更換為你的使用者名稱):

ubuntu 

-nproc

20

這樣,退出後重新登入,就會發現最大程序數已經更改為20了,

這個時候我們再次執行炸彈就不會報記憶體不足了,而是提示-bash: fork: retry: no child processes,說明linux限制了炸彈建立程序。

Shell指令碼經典之Fork炸彈

一 什麼是fork炸彈 即 二 開發如何防禦 由於fork炸彈透過不斷的開新程序來癱瘓系統,乙個防止其嚴重影響系統的方法就是限定乙個使用者能夠建立的程序數的上限,在linux系統上,可以透過ulimit這個指令達到相應的效果,例如 ulimit hu 30 這個指令可以限制每乙個使用者最多只能建立3...

linux指令碼 fork炸彈

分類 作業系統之linux linux shell 2013 07 21 18 22 100人閱讀收藏 舉報fork炸彈 fork炸彈是一種利用系統呼叫 fork 進行拒絕服務攻擊。與病毒或蠕蟲不同,fork 炸彈沒有傳染性。在類unix 系統的shell 程式設計下觸發 fork 炸彈的shell...

使用python建立跨平台的fork 炸彈

程序炸彈執行截圖 這是乙個用python實現的最簡單的fork炸彈 import os while true os.以下程式僅供學習之用,為避免對系統的造成損傷,已經進行了延時處理 from multiprocessing import process import os import time g...