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.
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
.
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.