| Linux esplode | Hack 3 :: Attack 3 |
|
|
|
| Scritto da Edoardo |
![]() Forse questo articolo può essere utile per smorzare un po' i toni apologetici con cui si decanta l'inossidabile sistema operativo GNU/Linux: esiste infatti una sequenza di pochi caratteri che, se digitata nel terminale, manda l'intero sistema in tilt. Ecco a voi il codice incriminato... : () { : | : & };: Com'è possibile che questa breve ed enigmatica stringa possa creare tanto scompiglio? In realtà ciò che succede è abbastanza normale e la spiegazione, per chi ha un'alfabetizzazione di bash script, è la seguente. Le funzioni in bash. Le funzioni, in bash, vengono dichiarate con la sintassi: nomeFunzione() { comando1; comando2; ... comandoN; } e vengono invocate scrivendo il loro nome, come dei normali comandi. Quindi, ad esempio, il seguente codice: saluta(){ echo "ciao"; };saluta non fa che dichiarare la funzione saluta, la quale stampa sul terminale la parola ciao, ed invocarla. Nel codice incriminato la funzione si chiamava : (due punti). Ebbene sì: nonostante sia particolarmente esotico è un nome legale per una funzione bash. Come si potrà osservare ora, alla luce di quanto detto, la funzione (una volta invocata) richiama sè stessa e reindirizza il proprio output in un'altra invocazione di sè stessa tramite la pipe (barra verticale). Se non conoscete le pipe, su cui non è il caso di soffermarsi approfonditamente ai fini della spiegazione (e su cui si trova ampia documentazione in giro), basti sapere che hanno l'effetto di aprire in parallelo i due comandi tra cui compaiono; quindi il codice : | : che figura nel corpo della funzione invocherà due volte e parallelamente la funzione stessa, dando vita ad una (doppia) ricorsione. In ultimo, la & posta alla fine del comando ha l'effetto di eseguirlo in background. Dunque: quando la funzione viene lanciata, invoca sè stessa due volte in parallelo creando quindi una biforcazione (fork), ognuna delle due biforcazioni si sdoppia a sua volta, e via discorrendo. Il fatto che le funzioni vengano lanciate in background garantisce che terminandone una (ad esempio con il comando kill), quelle da lei create (quindi le due biforcazioni e le loro discendenti) non verranno terminate a loro volta come avverrebbe normalmente. Questo inarrestabile avvio di funzioni, che procede esponenzialmente, finisce per saturare le risorse (CPU e memoria) e dopo un po' di tempo sopraggiunge il congelamento del sistema. img http://upload.wikimedia.org/ L'antidoto. Per i più timorosi: l'antidoto per queste fork bomb esiste e consiste semplicemente nel porre un limite al numero di processi avviabili da un utente. |
| Ultimo aggiornamento Giovedì 17 Giugno 2010 09:27 |

















