preoccupazione per la sicurezza del comando bash inviato dall'utente

1

Recentemente sto costruendo un servizio web che l'input dell'utente verrà utilizzato per eseguire un comando bash sul lato server. Quali sono i problemi di sicurezza di cui devo occuparmi?

In questo momento trovo che l'utente possa inviare cose come pipe come valid thing | something bad e il mio server ha eseguito quel something bad ! Principalmente utilizzo nodejs e exec da shelljs per creare il server.

    
posta qqibrow 23.03.2015 - 01:31
fonte

2 risposte

3

Se si autorizzano i comandi della shell ad essere eseguiti dal browser, ciò che si sta effettivamente facendo è consentire all'utente di accedere ed eseguire comandi sul proprio sistema come utente sul quale è in esecuzione il server web. Chiediti se è questo che vuoi fare? La risposta è decisamente no. Non c'è modo. No, non mai. In effetti, gli hacker trascorrono molto tempo cercando di capire come fare in modo efficace quello che hai progettato nel tuo sistema.

Puoi provare a "sanitizzare" l'input, ma poi tutto ciò che stai facendo è chiedere agli hacker di provare e trovare modi per aggirare il tuo disinfettante. Sono probabilmente più intelligenti di te.

Potresti provare ad eseguire i comandi come utente con autorizzazioni limitate. Quindi stai consentendo a chiunque di accedere come tale utente ed eseguire comandi su quel sistema. Il meccanismo delle autorizzazioni UNIX potrebbe proteggerti un po '.

Infine, potresti provare a usare chroot per creare un ambiente molto ristretto in cui eseguire i comandi di bash. È un lavoro piuttosto lungo, e c'è ancora la possibilità che i trojan vengano inseriti nell'ambiente ristretto. Se si pianifica questa opzione, è possibile cercare il comando makejail: makejail .

L'ultima opzione è di non consentire agli utenti di eseguire comandi bash arbitrari, ma di fornire invece un elenco di comandi preconfigurati che consentono loro di eseguire, che sai essere sicuri.

Inoltre, potresti essere vulnerabile al bug Shellshock Shellshock

    
risposta data 23.03.2015 - 16:15
fonte
2

La cosa principale che l'abilitazione è un problema è l'apertura della shell alle subshell. E.A. l'esecuzione di un comando come / bin / bash consentirebbe a un utente malintenzionato di accedere al proprio server.

Se vuoi davvero continuare a eseguire un servizio come questo ti suggerisco di limitare le opzioni che gli utenti finali (e un utente malintenzionato) possono utilizzare, consentendo solo comandi che sai essere "sicuri" e non eseguirli mai direttamente. Utilizza una sub shell indirettamente e solo dopo averla spogliata di tutte le parti pericolose. (come "|").

Fai attenzione anche al cattivo uso, rubando la connessione. SSH funziona abbastanza bene utilizzando entrambi i meccanismi di controllo della crittografia e della sessione. Quindi il dirottamento è difficile e spesso si traduce in una connessione chiusa. Perché reinventare la ruota se non ce n'è bisogno;)

se trovi che devi eseguire comandi come questo, ti consiglio di eseguirli attraverso la shell bash ristretta. (rsh) previene la maggior parte delle cose "cattive" di cui ti preoccupi (ma non tutte)

    
risposta data 23.03.2015 - 02:46
fonte

Leggi altre domande sui tag