Linux 中可怕的 fork 炸彈
什麼是 Linux 中的 Fork 炸彈
Linux 中的 Fork 炸彈(Fork Bomb)是一種拒絕服務攻擊的形式,它利用了操作系統中的 “fork()” 系統調用。 Fork()系統調用用於創建新進程,該進程是調用進程的副本。 Fork 炸彈利用此係統調用創建大量的子進程,以消耗系統資源,例如內存和 CPU 時間,從而使系統不可用。
要實現 Fork 炸彈,可以使用以下代碼:
:(){ :|:& };:
該代碼使用了一個稱爲 “鏡像遞歸” 的技術,其中一個進程通過創建另一個進程來反覆複製自身,以迅速創建大量進程。管道符號(|)使進程從一個進程傳遞到另一個進程,以在更快的時間內創建更多的進程。 “:”和 “;” 字符分別定義了 shell 函數和結束該函數的語法。
一旦 Fork 炸彈被激活,它會快速生成許多進程,消耗系統資源,導致系統崩潰或變得不可用。爲了避免這種攻擊,Linux 系統管理員可以限制每個用戶創建進程的數量,或者禁用 fork()系統調用。
Fork Bomb 基本上就是創建 fork 的過程,無限地創建 fork,直到您的系統沒有剩餘的資源。
Fork 炸彈命令解析
-
:()
定義了一個名稱爲:
的函數,不接受任何參數。 -
{}
是函數開始和結束的地方。簡而言之,它包含最終會崩潰您的機器的命令。 -
:|:
是遞歸開始的地方 (調用自身的函數)。更準確地說,它會將一個:
函數加載到內存中,將其輸出管道 (|
) 其自身的輸出到另一個已加載到系統內存中的:
函數。 -
&
將執行整個函數後臺,以便不會殺死任何子進程。 -
;
將每個子函數從多個執行的鏈中分離。 -
:
運行最近創建的函數,因此鏈式反應開始了!
如何預防
限制登錄用戶可以運行的最大進程數量, 先查看當前用戶可以使用的最大進程數量
ulimit -u
然後編輯
/etc/security/limits.conf
文件
vim /etc/security/limits.conf
@wheel hard nproc 5000
rumenz hard nproc 5000
這樣,這些用戶的最大進程數量將被限制在 5000 個進程以內,這有助於防止 Fork Bomb 對系統造成太大的影響。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/CcKw9-fpM_T5lgSpBwLaTA