Come proteggere Ubuntu dalla bomba a forcella


72

Ho sentito qualcuno parlare di una bomba a forcella, ho fatto delle ricerche e ho trovato alcune informazioni terribili su alcuni personaggi dall'aspetto strano che le persone possono farti scrivere sulla riga di comando e di conseguenza fanno cose brutte sul computer. Certamente non darei comandi che non capisco ma non si sa mai cosa può succedere.

Ho sentito che alcuni sistemi operativi consentono all'amministratore di porre un limite ai processi degli utenti per mitigare gli effetti delle bombe a forcella, questa protezione in Ubuntu è di default o una persona con privilegio sudo dovrebbe impostare questo? Se é cosi, come?

Risposte:


73

Puoi facilmente limitare la quantità di processi che possono essere generati in Ubuntu e nella maggior parte delle altre distribuzioni Linux modificando /etc/security/limits.conf

sudoedit /etc/security/limits.conf

Quindi aggiungi questa riga alla fine di quel file:

*    hard     nproc     nnn

dove:

  • hard imposta il limite a livello di kernel in modo che non possa essere modificato senza riavviare.
  • nproc è il numero massimo di processi per utente.
  • nnn è un numero che dovresti calcolare per il tuo sistema:

    ps aux -L | cut --delimiter=" " --fields=1 | sort | uniq --count | sort --numeric-sort | tail --lines=1
    

Il comando sopra elencherà tutti i processi per tutti gli utenti inclusi i thread , li sommerà ed elencherà il nome utente con il maggior numero di processi. Per essere al sicuro, apri tutte le applicazioni che ti servono normalmente prima di eseguire il comando sopra e quindi raddoppia quel numero per sicurezza.

Dopo aver impostato questo limite, dovrai riavviare, ma avrà effetto su ogni utente non root sul sistema. Quindi se una bomba a forcella viene eseguita da qualsiasi utente non root avrà quel limite duro.

I limiti di gruppo e jolly non si applicano all'utente root per impostazione predefinita . Utilizzare il nome utente letterale rootnelle regole se si desidera applicare una regola al superutente.

Inoltre, se non stai cercando di riavviare presto, puoi usare ciò sudo ulimit -u 800che metterà la limitazione solo sulla sessione di corsa ma può essere facilmente aggirato da una bomba a forcella con sudoprivilegi!

Dopo il riavvio, /etc/security/limits.confverrà utilizzato tutto ciò che è in .

Alcune informazioni aggiuntive sulle bombe a forcella: non sono malware o qualcosa di terribile. Generalmente consistono in qualcosa di semplice come uno script che si chiama due volte, aumentando così la sua presenza sulla macchina in modo esponenziale. Anche se hanno un ingombro di memoria ridotto dato il ritmo rapido che moltiplicano, riempiono rapidamente tutta la RAM disponibile e la macchina si blocca o si riavvia. L'unico pericolo è perdere informazioni non salvate. Classificherei un forkbomb molto più come uno scherzo che come un software dannoso.

Un promemoria importante:

Raramente dovresti mai eseguire nulla nella riga di comando quando non sei sicuro al 98% della sua azione. Se non riesci a leggere i comandi che stai eseguendo, non farlo. Questo vale doppio per i pezzi illeggibili di caratteri hex / base64, che possono essere usati per oscurare ogni sorta di cattiveria. Se non sei sicuro di un comando, puoi sempre cercare le sue azioni nelle Manpage di Ubuntu ed essere più cauto quando lo usi sudopoiché verrà eseguito come utente root.


@MarcoCeppi: il tuo numero non era lontano per un tipico utente Unity: l'output del calcolo è attualmente 404 per il mio sistema ...
Fabby

1
Se, per esempio, inserisco qualcosa di simile alias ":(){ :|: & };:"="echo 'No.'"nel mio .bashrc, eseguirà ogni accesso?
UniversallyUniqueID,

C'è uno svantaggio nel scegliere un limite nproc più alto? Sembra che non ci sia molto spazio con un limite o addirittura il doppio dell'attuale numero di processi, un limite molto più alto, anche di 10.000 o più, sarebbe ancora efficace contro una bomba a forcella? A proposito di quanti ram consuma ogni fork / processo? Forse c'è un limite derivato dalla RAM più universale?
Xen2050

1

Un modo semplice che mi piace è creare un alias anche se gli alias non sono sempre applicati, controlla la risposta sopra.

alias :="echo No."

Adesso

$ :(){ :|: & };:
bash: syntax error near unexpected token `('

22
sicuramente, questa è una soluzione comune; come fa questo si ferma a(){ a|a & };a? (o qualsiasi altro nome di funzione?)
cat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.