Nei sistemi operativi Unix il fork è una funzione in cui, un processo definito come “padre”, genera diverse copie di sé stesso, definite come processi “figli” tramite repliche multiple.
La funzione permette sia al processo padre che ai processi figli di eseguire diversi task in contemporanea.
I processi figli sono esattamente identici al processo padre, ad eccezione del codice ID. Il forking può tornare particolarmente utile per le operazioni di multitasking, oppure se si vuole mandare in crash un computer.
In questo caso si ha a che fare con il fork bomb (chiamato anche bad rabbit virus), un attacco di tipo Denial of Service (DoS) presente da decine di anni, ma tutt’ora in azione.

Vediamo dunque di cosa si tratta.

  1. Cos’è esattamente fork bomb
  2. Come viene eseguito fork bomb
  3. Metodi da applicare per prevenire l’attacco
Fork Bomb linux

Cos’è esattamente fork bomb

A differenza di altri attacchi DoS che tentano di sovraccaricare il dispositivo o la rete “dall’esterno”, fork bomb opera all’interno dello stesso dispositivo.
Il suo obiettivo è quello di prosciugare le risorse del sistema in modo tale che nessun altro servizio possa operare su di esso.
Il tempo necessario per raggiungere questo obiettivo varia in base alle risorse che possiede il sistema colpito.

Sostanzialmente, viene creato un processo che non fa altro che duplicarsi in continuazione.
Il processo viene creato attraverso una fork system call, da qui il nome fork bomb.

Una volta lanciato l’attacco, il sistema si blocca del tutto, rendendo inutilizzabile perfino mouse e tastiera.
Non si è in grado nemmeno di creare altri processi per cercare di interrompere quello avviato da fork bomb. Il rischio maggiore è quello di perdere i dati salvati nel dispositivo. Si è pertanto costretti a ricorrere ad un reset hardware per far ripartire la macchina.

I sistemi operativi più vulnerabili a questo tipo di attacco sono Linux e tutti gli altri sistemi basati su di esso, come:

  • Debian
  • RedHat
  • AIX.

Fork bomb può essere eseguito anche in ambienti Windows, ma il processo d’implementazione è diverso: bisogna creare un nuovo insieme di processi, il che richiede un’operazione di codifica più complessa rispetto a quella utilizzata per i sistemi Linux.

Come viene eseguito fork bomb

L’attacco è costituito da una semplice linea di codice: “:(){ :|: & }; :”.
Si tratta di un semplice comando per Bash, la shell di Linux più usata e diffusa con la quale è possibile interagire con il sistema operativo.
Il comando non ha nemmeno bisogno di alcun privilegio root ed è composto da una sequenza di caratteri, ciascuna con un compito diverso:

  • :() è una semplice definizione di funzione.
    In questo caso, il nome della funzione è semplicemente “:”, e non accetta alcun parametro;
  • { inizia a definire la funzione vera e propria;
  • :|: Chiama la funzione e la convoglia alla funzione stessa. Sostanzialmente, si tratta di una semplice tecnica di ricorsione;
  • & manda in background il processo, così i processi figli non vengono terminati, in modo da poter iniziare a consumare le risorse del dispositivo;
  • } termina la definizione della funzione;
  • : chiama la funzione fork bomb.

Fork bomb può essere eseguito utilizzando anche alcuni tra i più famosi linguaggi di programmazione, come:

  • C;
  • C++;
  • Java;
  • Ruby;
  • Perl;
  • Go;
  • PHP.

Prevenire l’attacco fork bomb: le strategie disponibili

Come detto in precedenza, l’unico modo per bloccare un attacco fork bomb è attraverso un reset della macchina, con tutti i disagi che ne conseguono. L’alternativa è quindi cercare in tutti modi di prevenire l’attacco. Esistono diversi metodi che si possono applicare.

Limitare il numero di processi

Uno di essi consiste semplicemente nello stabilire una soglia massima di processi che l’utente può creare, attraverso il comando “ulimit”.
Ad esempio, “ulimit =30” limita il numero massimo di processi che l’utente può iniziare a trenta. È bene tenere a mente però, che ogni volta che viene riavviato il dispositivo, bisogna di nuovo lanciare il comando, rendendo questa misura di prevenzione piuttosto tediosa e macchinosa.
Si può anche modificare il file/etc/security/limits.conf per impostare il numero massimo di processi che possono essere avviati per ciascun profilo di utente. Questo metodo, tuttavia, può rivelarsi del tutto inefficace nel caso in cui un utente disponga di elevati privilegi o nel caso di un processo con privilegi di root.

Gestire l’utilizzo della memoria

Un altro metodo, invece, è quello di stabilire una soglia massima per l’utilizzo di memoria da parte dei processi.
Se un processo ha bisogno di più memoria di quella che gli viene concessa, allora il processo termina la sua esecuzione. Il problema di questo metodo di prevenzione è che non sempre si conosce la quantità di memoria massima che un processo deve usare per poter funzionare correttamente. Se un processo dovesse avere effettivamente bisogno di più memoria, gli verrebbe comunque negata la sua esecuzione.

fork (processo padre)

Monitorare i nomi dei processi

Esiste anche un approccio basato sui nomi dei processi.
Vengono create due liste, una exception list ed una detection list.
L’utente può inserire il nome di un processo nella exception list, se è convinto che il processo in questione non necessita di essere controllato dal sistema. Pertanto, può essere eseguito senza problemi. I nomi dei processi di cui si ha il sospetto che possano essere in realtà degli attacchi fork bomb vengono invece inseriti nella lista di rilevamento. Una volta dentro quella lista, ulteriori processi futuri che riportano quel nome vengono immediatamente bloccati. Il problema è che i processi inseriti nella lista di rilevamento non possono essere più rimossi. Quindi, se un altro processo innocuo porta lo stesso nome di un processo inserito nella detection list, questo viene terminato sul nascere, nonostante si tratti di un processo del tutto sicuro.

Limitare le risorse per mitigare l’attacco

Infine, esiste un metodo che non previene un attacco fork bomb, ma cerca di mitigare il suo effetto.
Infatti, in questo caso, il sistema operativo non termina il processo, ma pone un limite alle risorse che vengono utilizzate. Se il processo alla fine si rivela innocuo, allora il limite viene rimosso, e può essere eseguito normalmente. Questo approccio è stato sviluppato per impedire che si verifichino falsi positivi.

L’articolo che avete appena letto dimostra come anche un semplice script è in grado di mandare in tilt il proprio dispositivo.
È bene, dunque tenersi costantemente informati su come tenere al sicuro la vostra macchina, a volte basta soltanto prendere delle semplici precauzioni.



    Dichiaro di aver letto e compreso l'Informativa sul trattamento dei dati