經(jīng)典的Fork炸彈

Jaromil在2002年設(shè)計了最為精簡的一個Linux Fork炸彈,整個代碼只有13個字符迅栅,在shell中運行后幾秒后系統(tǒng)就會宕機:

:() { :|:& };:

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

:()
{
    :|:&
};
:

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

bomb()
{
    bomb|bomb&
};
bomb

因為shell中函數(shù)可以省略function關(guān)鍵字,所以上面的十三個字符是功能是定義一個函數(shù)與調(diào)用這個函數(shù)姐浮,函數(shù)的名稱為:,主要的核心代碼是:|:&窖壕,可以看出這是一個函數(shù)本身的遞歸調(diào)用钠糊,通過&實現(xiàn)在后臺開啟新進(jìn)程運行锡凝,通過管道實現(xiàn)進(jìn)程呈幾何形式增長,最后再通過來調(diào)用函數(shù)引爆炸彈.因此垢啼,幾秒鐘系統(tǒng)就會因為處理不過來太多的進(jìn)程而死機窜锯,解決的唯一辦法就是重啟。

Bomb一下

秉著不作不死的心態(tài)芭析,我們也來運行一下锚扎,于是我將矛頭指向云主機,我使用了國內(nèi)的一個2G內(nèi)存的云主機馁启,首先在本地開啟兩個終端驾孔,在一個終端連接云主機后運行炸彈芍秆,幾秒后再嘗試用另外一個終端登錄,效果可以看下面Gif圖:

看翠勉,運行一段時間后直接報出了-bash: fork: Cannot allocate memory妖啥,說明內(nèi)存不足了。并且我在二號終端上嘗試連接也沒有任何反應(yīng)对碌。因為是虛擬的云主機荆虱,所以我只能通過主機服務(wù)商的后臺來給主機斷電重啟。然后才能重新登錄:

炸彈危害

Fork炸彈帶來的后果就是耗盡服務(wù)器資源朽们,使服務(wù)器不能正常的對外提供服務(wù)怀读,也就是常說的DoS(Denial of Service)。與傳統(tǒng)1v1骑脱、通過不斷向服務(wù)器發(fā)送請求造成服務(wù)器崩潰不同菜枷,F(xiàn)ork炸彈有種坐山觀虎斗,不費一兵一卒斬敵人于馬下的感覺叁丧。更嚇人的是這個函數(shù)是不需要root權(quán)限就可以運行的啤誊。看到網(wǎng)上有帖子說某些人將個性簽名改為Fork炸彈歹袁,結(jié)果果真有好奇之人中槍坷衍,試想如果中槍的人是在公司服務(wù)器上運行的話,oh条舔,枫耳!

預(yù)防方式

當(dāng)然,F(xiàn)ork炸彈沒有那么可怕孟抗,用其它語言也可以分分鐘寫出來一個迁杨,例如,python版:

import os
while True: 
    os.fork()

Fork炸彈的本質(zhì)無非就是靠創(chuàng)建進(jìn)程來搶占系統(tǒng)資源凄硼,在Linux中铅协,我們可以通過ulimit命令來限制用戶的某些行為,運行ulimit -a可以查看我們能做哪些限制:

ubuntu@10-10-57-151:~$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file 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) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7782
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

可以看到摊沉,-u參數(shù)可以限制用戶創(chuàng)建進(jìn)程數(shù)狐史,因此,我們可以使用ulimit -u 20來允許用戶最多創(chuàng)建20個進(jìn)程说墨。這樣就可以預(yù)防bomb炸彈骏全。但這樣是不徹底的,關(guān)閉終端后這個命令就失效了尼斧。我們可以通過修改/etc/security/limits.conf文件來進(jìn)行更深層次的預(yù)防姜贡,在文件里添加如下一行(ubuntu需更換為你的用戶名):

ubuntu           -       nproc           20

這樣,退出后重新登錄棺棵,就會發(fā)現(xiàn)最大進(jìn)程數(shù)已經(jīng)更改為20了楼咳,

這個時候我們再次運行炸彈就不會報內(nèi)存不足了熄捍,而是提示-bash: fork: retry: No child processes,說明Linux限制了炸彈創(chuàng)建線程母怜。

參考

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

本文地址:http://blog.saymagic.cn/2015/03/25/fork-bomb.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末余耽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子糙申,更是在濱河造成了極大的恐慌宾添,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柜裸,死亡現(xiàn)場離奇詭異缕陕,居然都是意外死亡,警方通過查閱死者的電腦和手機疙挺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門扛邑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铐然,你說我怎么就攤上這事蔬崩。” “怎么了搀暑?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵沥阳,是天一觀的道長。 經(jīng)常有香客問我自点,道長桐罕,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任桂敛,我火速辦了婚禮功炮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘术唬。我一直安慰自己薪伏,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布粗仓。 她就那樣靜靜地躺著嫁怀,像睡著了一般。 火紅的嫁衣襯著肌膚如雪借浊。 梳的紋絲不亂的頭發(fā)上眶掌,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音巴碗,去河邊找鬼。 笑死即寒,一個胖子當(dāng)著我的面吹牛橡淆,可吹牛的內(nèi)容都是我干的召噩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼逸爵,長吁一口氣:“原來是場噩夢啊……” “哼具滴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起师倔,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤构韵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后趋艘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體疲恢,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年瓷胧,在試婚紗的時候發(fā)現(xiàn)自己被綠了显拳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡搓萧,死狀恐怖杂数,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情瘸洛,我是刑警寧澤揍移,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站反肋,受9級特大地震影響那伐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜囚玫,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一喧锦、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抓督,春花似錦燃少、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至定铜,卻和暖如春阳液,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揣炕。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工帘皿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畸陡。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓鹰溜,卻偏偏與公主長得像虽填,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子曹动,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容