
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
:(){:|:&};:
![]() |
![]() | |||
| ||||
![]() | ![]() |







Trackback e pingback
[...] Come evitare i fork bomb su Linux [...]
[...] Come evitare i fork bomb su Linux [...]
[...] Come evitare i fork bomb su Linux [...]
[...] 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!