Encabezado de respuesta del equilibrador de carga de AWS Apache Server Disclosure

0

Tengo un entorno node.js implementado utilizando AWS Elastic Beanstalk en un servidor Apache. He ejecutado un escaneo PCI en el entorno y tengo 2 fallas:

  • Divulgación de información de Apache ServerTokens
  • Divulgación de información del encabezado HTTP del servidor web

Naturalmente, estoy pensando que necesito actualizar el archivo httpd.conf con lo siguiente:

ServerSignature Off
ServerTokens Prod

Sin embargo, dada la naturaleza de Elastic Beanstalk y Elastic Load Balancers, tan pronto como el entorno se incremente, agregue nuevos servidores, reinicie, etc., la configuración se sobrescribirá.

También he intentado colocar lo siguiente en un archivo .htaccess:

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

# Security hardening for PCI
Options -Indexes
ServerSignature Off

# Dissallow iFrame usage outside of loylap.com for PCI Security Scan
Header set X-Frame-Options SAMEORIGIN

En el lado del nodo js, uso el paquete "casco" para aplicar algunas medidas de seguridad, también uso el paquete "express-force-https" para garantizar que la aplicación está aplicando https. Sin embargo, parece que estos solo surten efecto después de que se inicie la aplicación Express y después de la redirección.

Tengo escuchas de Elastic Load Balancer configuradas para HTTP (puerto 80) y HTTPS (puerto 443), sin embargo, las solicitudes HTTP se enrutan inmediatamente a HTTPS.

Cuando ejecuto el siguiente comando de curl:

curl -I https://myenvironment.com --head

Recibo una respuesta aceptable con la siguiente línea:

Server: Apache

Sin embargo, cuando ejecuto la misma solicitud en el punto final de http (es decir, antes de redireccionar, etc.):

curl -I http://myenvironment.com --head

Recibo una respuesta que revela más información sobre mi servidor de la que debería, y por lo tanto, la falla de PCI:

Server: Apache/2.4.34 (Amazon)

¿Cómo puedo forzar a mi entorno a restringir la respuesta del encabezado http en HTTP así como en HTTPS?

    
pregunta contool 13.11.2018 - 18:06
fuente

1 respuesta

1

Gracias a u / stdunbar por guiarme a la solución correcta aquí utilizando ebextensions de este enlace stackoverflow .

La solución funcionó para mí de la siguiente manera:

  1. Crea un archivo en la raíz del proyecto llamado .ebextensions/01_server_hardening.config
  2. Agregue el siguiente contenido al archivo:

files:
  "/etc/httpd/conf.d/03_server_hardening.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      ServerSignature Off
      ServerTokens Prod

container_commands: 01_reload_httpd: command: "sudo service httpd reload"

(Nota: la sangría es importante en este archivo YAML: 2 espacios en lugar de pestañas en el código anterior).

Durante la implementación elástica de beanstalk, eso creará un nuevo archivo conf en la carpeta /etc/httpd/conf.d que está configurado para extender la configuración httpd.conf en ELB de forma predeterminada.

El contenido desactiva manualmente ServerSignature y configura ServerTokens a Prod, logrando el estándar PCI.

Ejecutar el comando contenedor obliga a reiniciar httpd (para esta versión particular de Amazon linux: ubuntu y otras versiones requerirían su propia recarga estándar).

Después de implementar los nuevos comandos en mi entorno EB, mis comandos curl se ejecutan como se espera en HTTP y HTTPS.

    
respondido por el contool 14.11.2018 - 03:19
fuente

Lea otras preguntas en las etiquetas