alphasec academy

_(){ _|_& };_ - bashowa fork bomba pozwalająca sprawdzić poprawność konfiguracji systemów Unix/Linux

Dodatkowe informacje

Prawdopodobnie zamiast
_(){ _|_& };_
, dla wielu z Was znane jest to bardziej w formie
:(){ :|:& };:
, bo wygląda to jeszcze bardziej enigmatycznie. Co tu się dzieje? Tworzymy funkcję o nazwie
_
lub w drugim wypadku
:
(tak, bash na takie nazwy funkcji pozwoli), która uruchamia samą siebie, przekazując jej wyjście na wejście znów dla samej siebie, uruchamiając to jako nowy proces. Następnie uruchamiamy tę funkcję, by wystartować fork bombę.
Jeśli chcielibyśmy to rozpisać bardziej czytelnie, moglibyśmy zmienić nazwę funkcji na
bomba
, uzyskując:
bomba(){ bomba|bomba& };bomba
, a jeszcze bardziej czytelnie:
 
       bomba() {  
           bomba | bomba &
       };
       bomba 
Jeśli nie ma w sytemie żadnych limitów, wszystkie zasoby zostaną zużyte, skutkując atakiem klasy lokalny DoS (Denial of Service), który prawdopodobnie zakończy się restartem systemu.

Co powstrzyma fork bombę?

Wystarczy ustawić limit procesów na użytkownika. Żeby go sprawdzić, można użyć polecenia
ulimit
, np.:
🐉 drg@dhq[~]$ ulimit -u
2784
🐉 drg@dhq[~]$
Do testów można ustawić soft limit dla aktualnej sesji za pomocą np.:
ulimit -S -u 1000
.

Subskrybuj

Jeśli chcesz otrzymywać nowe, mięsiste protipy na maila, a także zostać czasem powiadomiony o wartościowych wydarzeniach - dołącz do subskrybentów.