當前位置: 妍妍網 > 碼農

Linux惡作劇之源,看這個只有13字元的經典Fork炸彈~

2024-03-02碼農

關註上方 浩道Linux ,回復 資料 ,即可獲取海量 L inux Python 網路通訊、網路安全 等學習資料!

前言

大家好,這裏是 浩道Linux ,主要給大家分享 L inux P ython 網路通訊、網路安全等 相關的IT知識平台。

今天浩道跟大家分享一個可以用來搞惡作劇的Linux經典Fork炸彈,雖然這個惡意指令碼只有13字元,卻可以跑掛你的Linux系統,一起看看吧!

文章來源:

作者:Saymagic

來源:https://blog.saymagic.tech/2015/03/25/fork-bomb.html

Jaromil在2002年設計了最為精簡的一個Linux Fork炸彈,整個程式碼只有13個字元,在shell中執行後幾秒後系統就會宕機:

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

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

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

Bomb一下

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

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

炸彈危害


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

預防方式

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

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

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

ubuntu - nproc 20

這樣,結束後重新登入,就會發現最大行程數已經更改為20了,

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

參考

http://en.wikipedia.org/wiki/Fork_bomb

更多精彩

關註公眾號 浩道Linux

浩道Linux ,專註於 Linux系統 的相關知識、 網路通訊 網路安全 Python相關 知識以及涵蓋IT行業相關技能的學習, 理論與實戰結合,真正讓你在學習工作中真正去用到所學。同時也會分享一些面試經驗,助你找到高薪offer,讓我們一起去學習,一起去進步,一起去漲薪!期待您的加入~~~ 關註回復「資料」可 免費獲取學習資料 (含有電子書籍、視訊等)。

喜歡的話,記得 點「贊」 「在看」