¿Cómo aseguro Apache contra la vulnerabilidad de Bash Shellshock?

43

Tengo un servidor web Apache en ejecución, y con las noticias recientes de la vulnerabilidad de Shellsock contra bash, me preguntaba si mi servidor web es vulnerable. No creo que lo sea, pero quiero asegurarme de que no estoy equivocado.

No uso ningún CGI de bash intencionalmente en el servidor, está ejecutando algunas cosas de PHP usando mod_php y un sitio WSGI de Python. Pero me gustaría asegurarme de que ninguno de los programas que se ejecutan en el servidor está usando CGI sin que yo lo espere.

¿Cómo puedo asegurarme de que mi servidor web no es vulnerable?

    
pregunta user56147 25.09.2014 - 09:56
fuente

4 respuestas

28

Además de CGI, un uso que se pasa por alto de sh está en las llamadas exec() , o mediante el uso de system() y popen() , en la mayoría de los sistemas Linux esto significa bash . La familia de llamadas exec() a menudo se usa con " /bin/sh -c " para proporcionar varias funciones como redirección de shell, tuberías o incluso solo expansión de argumentos cuando se invocan procesos.

Apache usa exactamente esto (a través de la APR, consulte el uso de %) en SHELL_PATH ) cuando usa registros canalizados, y también en otras circunstancias, como una salida externa Filtros (a través de apr/threadproc/unix/proc.c ) y procesamiento de ExtFilterDefine SSI incluye . Este comportamiento es casi seguro que también se aplica a muchos módulos de terceros.

Los mejores pasos a seguir para proteger su servidor web:

  • parche o actualice su paquete bash (si lo hace usted mismo, asegúrese de que no haya instancias extraviadas de #exec cmd , verifique sh en cualquier chroots configurados manualmente también)
  • ejecuta Apache en un chroot, usa un mínimo de sh si y solo si es necesario:

    • en Apache httpd 2.2 cambia de usar " /bin/sh " a " | " en registros canalizados , esto elimina la necesidad de || (disponible desde Apache 2.2.12)
    • en Apache httpd 2.4 asegúrese de que no está utilizando " /bin/sh " en registros entubados , esto vuelve al comportamiento httpd.2.2. 2.4 admite |$ y | , ninguno usa ||
  • asegúrese de que las secuencias de comandos CGI predeterminadas estén deshabilitadas, vuelva a verificar desde el nivel superior /bin/sh (por ejemplo, Options hacia abajo para <Directory />

  • considere ExecCGI si aún no lo está utilizando. Red Hat ha proporcionado algunas reglas que se pueden usar para registrar y limpiar el entorno en el artículo 1212303 de la KB .

También puede considerar el uso de " mod_security " en los scripts, esto obliga a bash en modo privilegiado , esto evita la importación de funciones del entorno (junto con otros cambios). Esto podría ayudar si tiene scripts CGI vulnerables en un sistema, pero no tiene parche ni compilador. Es posible que este no funcione en Debian y los sistemas derivados , así que verifique cuidadosamente.

(Además, si #!/bin/sh -p es /bin/sh , no lo reemplace ciegamente por otra cosa, podría afectar sus scripts de inicio).

Cualquier código de aplicación que se ejecute a través de CGI (aparte de los scripts de bash), o bajo los módulos de Apache (Python y PHP en su caso) puede también jugar un papel en esto. Si cualquier atacante puede controlar suficientemente cualquier variable (la codificación URI puede ser un desafío), y si la aplicación utiliza bash al invocar procesos, y si esas variables se conservan al hacerlo, es posible que tenga un problema.

Si está ejecutando un sistema Linux contemporáneo, pero no ha configurado un chroot o algún otro contenedor para apache, debería poder usar /bin/sh y un montaje de enlace para reemplazar unshare al iniciar Apache (o Cualquier otro servicio).

unshare -m -- sh -c "mount --bind /usr/local/bin/bash /bin/sh && 
    /usr/local/apache2/bin/apachectl start"

Las ventajas de esto son

  • menos riesgo de romper cosas, ya que puede reemplazar selectivamente /bin/sh
  • puede registrar y auditar los intentos de invocar bash más fácilmente

(Lo que no puedes hacer fácilmente con esto es escribir un script de bash como un contenedor para inspeccionar y registrar variables sospechosas, necesitarás usar otra cosa, por supuesto ...)

Si está ejecutando sh en Linux, puede ver fácilmente el uso de auditd agregando un par de reglas a /bin/sh y recargando:

-w /bin/sh                -p x
-w /bin/bash              -p x

(Necesito ambos, ya que audit.rules es un enlace simbólico a sh )

Red Hat ha publicado un enfoque alternativo, un "arreglo" de tiempo de ejecución que puede utilizar con bash , puede encontrar que en el aviso . Esto también podría adaptarse para registrar variables dudosas, si es necesario. Dado que actualmente hay preguntas sobre la integridad de los parches hasta el momento, esta solución es probablemente una buena solución a corto plazo para Apache al menos.

También puede encontrar más consejos generales sobre el endurecimiento de Apache aquí: Endurecimiento del servidor Apache

    
respondido por el mr.spuratic 25.09.2014 - 12:19
fuente
9

Según el aviso de Redhat:

  

mod_php, mod_perl y mod_python no usan variables de entorno y   Creemos que no están afectados.

Lea más sobre esto en: enlace

    
respondido por el shaomoon 25.09.2014 - 10:30
fuente
1

Asegure el bash y usted ha asegurado la caja. Hay parches disponibles en la mayoría de las distribuciones o puede compilarlo y parchearlo usted mismo si ejecuta una distribución que aún no está parchada.

    
respondido por el Andrew 25.09.2014 - 10:27
fuente
1

Si no está seguro de poder deshabilitar el módulo cgi sudo a2dismod mod_cgi o eliminar LoadModule en httpd.conf . Como shaomoon se menciona mod_php, mod_perl y mod_python no se efectúan.

De todos modos, simplemente debes instalar el parche . Si tu bash no es vulnerable, tu apache también estará protegido de este ataque.

    
respondido por el PiTheNumber 25.09.2014 - 12:06
fuente

Lea otras preguntas en las etiquetas