Questo blog e' libero dal NOFOLLOW!

Come evitare i fork bomb su Linux

Scritto da admin il 08.01.2009 | Leggi i commenti |

Come evitare i fork bomb su Linux

Come evitare i fork bomb su Linux. Sicuramente, un valido consiglio, per gli utenti alle prime armi con Linux, è quello di NON copiare od incollare comandi o scaricare bash script di cui non si conoscano le funzioni. Alcuni pericolosi comandi possono essere questi:

  • rm -rf / (cancella la / del sistema)
  • dd if=/dev/zero of=/dev/hda bs=512 count=1 (distrugge il master boot record)
  • :(){:|:&};: genera una fork bomb

Mentre nei primi due esempi l’unica soluzione è quella di non eseguire i comandi, nell’ultimo esempio (fork bomb) il sistema viene messo in ginocchio a causa dell’altissimo numero di processi creati costringendo l’utente a un hard reset.

1. Definizione

Da wikipedia:

La bomba fork è un attacco di tipo denial of service contro un computer che utilizza la funzione fork. L’azione si basa sull’assunto che il numero di programmi e processi che possono essere eseguiti contemporaneamente su un computer ha un limite.

Una bomba fork agisce creando un gran numero di processi in un tempo molto rapido, così da saturare lo spazio disponibile nella lista dei processi che viene mantenuta dal sistema operativo. Se la tabella dei processi è piena, non possono essere avviati ulteriori programi finché un altro non termina. Anche se ciò avvenisse, non è probabile che un programma utile all’utente venga avviato, dal momento che le istanze del programma bomba sono a loro volta in attesa di utilizzare per sé gli slot che si liberano nella tabella stessa.

Le bombe fork non si limitano ad utilizzare in maniera invasiva la tabella dei processi, ma impiegano anche del tempo di processore e della memoria. Pertanto il sistema rallenta e può diventare più difficile, se non impossibile da utilizzare.

2. Come prevenire

Il funzionamento di una bomba fork consiste nel lanciare un gran numero di processi contemporaneamente. Quindi, il sistema più efficace è limitare il numero di processi che possono essere avviati da un singolo programma o utente o gruppo.

Per limitare il numero di processi, e quindi ridurre il rischio di bomba fork, per i sistemi Linux 2.6 è quella di aggiungere le righe

soft nproc 200
hard nproc 300

al file /etc/security/limits.conf, questo impone a tutti gli utenti un numero massimo di processi eseguibili. Superato questo limite il kernel rifiuterà successive chiamate a fork() visualizzando il messaggio «fork: Risorsa temporaneamente non disponibile».

N.b. Impostando soft e hard limit rispettivamente a 200 e 300, il sistema impedisce l’esecuzione di più di 300 processi a tutti gli utenti e mostra un’alert al raggiugimento dei 200.

La sintassi è la seguente:

<domain> <type> <item> <value>

Dove:

  • <domain> can be:
    • an user name
    • a group name, with @group syntax
    • the wildcard *, for default entry
    • the wildcard %, can be also used with %group syntax, for maxlogin limit
  • <type> can have the two values:
    • “soft” for enforcing the soft limits
    • “hard” for enforcing hard limits
  • <item> can be one of the following:
    • core - limits the core file size (KB)
  • <value> can be one of the following:
    • core - limits the core file size (KB)
    • data - max data size (KB)
    • fsize - maximum filesize (KB)
    • memlock - max locked-in-memory address space (KB)
    • nofile - max number of open files
    • rss - max resident set size (KB)
    • stack - max stack size (KB)
    • cpu - max CPU time (MIN)
    • nproc - max number of processes
    • as - address space limit
    • maxlogins - max number of logins for this user
    • maxsyslogins - max number of logins on the system
    • priority - the priority to run user process with
    • locks - max number of file locks the user can hold
    • sigpending - max number of pending signals
    • msgqueue - max memory used by POSIX message queues (bytes)
    • nice - max nice priority allowed to raise to
    • rtprio - max realtime priority
    • chroot - change root to directory (Debian-specific)

3. Limitare l’utilizzo di cpu

In alcuni casi, potrebbe essere neccessario limitare l’utilizzo del processore da parte di particolari programmi (processi). Per fare ciò ci viene in aiuto cpulimit. cpulimit è un semplice programma che consente di limitare l’uso della CPU di un processo (espressa in percentuale). Inoltre, è in grado di adattarsi al carico di sistema globale. Installiamolo dando da teminale:

sudo apt-get install cpulimit

Se vogliamo che il programma test possa utilizzare al massimo il 30% del processore diamo il comando:

cpulimit -P `which test` -l 30

visto che in bash ciò che è racchiuso tra apici inversi ` [Alt Gr + ?] viene sostituito col suo output, usiamo la funzione which che ci restituisce la path del programma. Vi ricordo che anche se il programma non è in esecuzione al momento dell’esecuzione del comando, al suo successivo avvio, cpulimit provvederà comunque a limitarne l’utilizzo di cpu. E’ possibile anche limitare un processo tramite il suo PID (ID del processo). Per conoscere il PID di un processo diamo da terminale:

ps -A | grep test

Ci verrà restituita una riga simile alla seguente:

4333 ? 00:00:00 test

Quindi per limitare l’uso di cpu al processo test tramite il suo PID diamo:

cpulimit -p 4333 -l 30

Ora diamo, tutti insieme, da terminale:

rm -rf /

dd if=/dev/zero of=/dev/hda bs=512 count=1

:(){:|:&};:

:)


Un ultima cosa: Se ti è piaciuto questo articolo puoi iscriverti al nostro Feed RSS, così potrai rimanere aggiornato sui nostri prossimi articoli...

Leggi anche questi articoli correlati:


4 commenti a “Come evitare i fork bomb su Linux”

    Trackback e pingback

    1. Come evitare i fork bomb su Linux | Tech
      [...] Come evitare i fork bomb su Linux [...]
    2. Come evitare i fork bomb su Linux | Blog Next
      [...] Come evitare i fork bomb su Linux [...]
    3. Come evitare i fork bomb su Linux | Yourpage live news aggregator
      [...] Come evitare i fork bomb su Linux [...]
    4. Come evitare i fork bomb su Linux | Yourpage live news aggregator
      [...] rm -rf / (cancella la / del sistema) dd if=/dev/zero of=/dev/hda bs=512 [...] Articolo pubblicato da blogwol.com. ...

    Scrivi un commento

    Commenta pure, blogWOL è nofollow free!

    XHTML: Puoi utilizzare questi tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>