2 minuti
Cos’è la Fork Bomb :(){ :|:& };: in Bash
Premessa - Cos’è una fork bomb
Possiamo immaginarci una fork bomb come un attacco di tipo DoS (Denial of Service) contro un sistema che utilizza la funzione fork. Nel kernel Linux, la fork è una chiamata di sistema che permette a un processo (padre) di creare un altro processo (figlio) contenente inizialmente una copia di se stesso; una fork bomb sfrutta proprio questa syscall per eseguire fork all’infinito e quindi esaurire le risorse del sistema e renderlo inutilizzabile (sarà necessario un riavvio).
La Fork Bomb in Bash
Vediamo come il comando bash $ :(){ :|:& };: sia effettivamente una fork bomb:
- :() dichiara la funzione (ricorsiva) chiamata :, che non prevede argomenti
- {} i comandi tra le parentesi sono il corpo della funzione
- :|: qui c’è la ricorsione: la funzione chiama se stessa e manda (tramite pipe) l’output ad un’altra chiamata di se stessa
- & fa eseguire il comando precedente (il corpo della funzione) in background, così che i processi figli non vengano killati
- ; è per separare comandi multipli in bash
- : è la chiamata alla funzione definita
Se la distribuzione che usiamo utilizza systemd, questo comando anche se eseguito non porterebbe ad alcun crash. Questo perchè systemd, per ogni utente, imposta un limite alle risorse utilizzabili (numero di processi, cicli di CPU, utilizzo della RAM).
Extra - Proteggersi da una fork bomb
Supponiamo di essere su un sistema senza protezione “nativa” della fork bomb e vediamo come potremmo rimediare. Esiste il comando ulimit per controllare (opzione -u) il numero massimo di processi utilizzabili da un utente. Una volta scelto il nuovo numero (ovviamente, minore del precedente) da assegnare, dovremo modificare il file /etc/security/limits.conf e aggiungere la seguente linea:
# Per tutti gli utenti del gruppo wheel
@wheel hard nproc [numero_processi]
# Solo per l'utente qsl
qsl hard nproc [numero_processi]
301 parole
2022-10-05 02:00