HowtoSicurezza Informatica

Cosa è una Fork Bomb ? Esempio di Fork Bomb.

Fork Bomb

Una “fork bomb” è un tipo di programma malevolo o potrebbe essere anche scherzoso che può causare problemi gravi a un sistema informatico. In termini semplici, una fork bomb è uno script o un programma che genera ripetutamente nuovi processi, creando una quantità eccessiva di processi figli all’interno del sistema operativo. Questo può sovraccaricare rapidamente la capacità di elaborazione del sistema, portando a un rallentamento significativo o addirittura a un blocco completo del computer.

Il termine “fork” si riferisce al processo di creazione di una copia identica di un processo esistente. Una fork bomb sfrutta questa funzionalità per creare in modo continuo nuovi processi figli senza fine. Ogni nuovo processo figlio genera ulteriori processi figli, creando una crescita esponenziale del numero di processi attivi nel sistema. Questo può esaurire le risorse del sistema, come la memoria e il tempo di CPU, impedendo al sistema di eseguire normalmente.

Le F.B., quindi,  sono spesso create come scherzi di cattivo gusto. Poiché potrebbero causare gravi problemi al sistema, è importante evitarle e proteggere il tuo sistema da possibili attacchi di questo tipo. I sistemi operativi di solito hanno misure di sicurezza per limitare la creazione di processi in eccesso e per prevenire fork bomb (da questo momento F.B.)

Ma come è fatta ?

ForkBomb
ForkBomb

: ( ) { : | : & } ;:  Questa  è in realtà una fork bomb !

Le Fork-Bomb operano sia consumando tempo di CPU nel processo di biforcazione, che saturando la tabella dei processi del sistema operativo.  Un’implementazione base di una Fork Bomb è un ciclo infinito che lancia ripetutamente lo stesso processo.

Fork Bomb
Fork Bomb

Nei sistemi operativi Unix-like, le F.B. sono generalmente scritte per usare la chiamata di sistema “fork”.  Questa chiamata ha l’effetto di provocare una crescita esponenziale dei  processi: 1->2>4>8>16 etc. Poiché i sistemi Unix moderni usano generalmente copy-on-write quando si biforcano nuovi processi,  una F.B. generalmente non farà saturare la memoria del sistema.

Non provate ! o si ?

Da non provare mai in una pagina web …

"<script>
setInterval(function() {
  var w = window.open();
  w.document.write(document.documentElement.outerHTML||document.documentElement.innerHTML);
}, 10);
</script>"

0 .. in Java script

"(function f() { require('child_process').spawn(process.argv[0], ['-e', '(' + f.toString() + '());']); }());"

o in VB.net
"Do
    System.Diagnostics.Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location)
Loop While True"

Ricapitoliamo

Le F.B. operano sia consumando tempo di CPU nel processo di biforcazione, sia saturando la tabella dei processi del sistema operativo. Un’implementazione di base di una F.B.  un ciclo infinito che lancia ripetutamente nuove copie di se stesso.
Per rendere inoperativo un sistema, si basano sul presupposto che ci sia un numero infinito di programmi e processi che possono essere eseguiti simultaneamente su un computer.

Come prevenire in Linux ?

Basta accedere come root, e modificare questo file, per aggiungere utenti e configurare il loro limite.

sudo nano /etc/security/limits.conf

All’interno del file, puoi definire i limiti globali. Per limitare il numero massimo di processi per tutti gli utenti, puoi aggiungere linee come queste:

* hard nproc 100
* soft nproc 100

  • Il carattere asterisco *  indica che questi limiti si applicano a tutti gli utenti.
  • “hard” rappresenta il limite massimo rigido, che non può essere superato.
  • “soft” rappresenta il limite massimo flessibile, che l’utente può temporaneamente superare ma che non può superare il limite “hard”.

Nel caso sopra, si sono impostati limiti di 100 processi massimi sia per “hard” che “soft”. Puoi personalizzare il numero di processi in base alle tue esigenze.

Al posto dell’asterisco, potresti utilizzare il nome_utente

Salva le modifiche e chiudi l’editor di testo. Ad esempio, con “nano,” premi Ctrl+O per salvare, quindi premi Invio e infine Ctrl+X per uscire dall’editor.

Per rendere effettive le modifiche, è necessario riavviare il sistema o eseguire il comando sudo sysctl -p  per applicare i cambiamenti senza riavviare:

Ricorda,  non inserire valori bassi se tratti tutti gli utenti * …. il sistema potrebbe bloccarsi al primo riavvio e non saresti più in grado di modificare il file … 🙁