miércoles, 30 de agosto de 2017

Hardening en Apache Web Server


  A raíz de un test que me tocó hacer me vi obligada a detallar una pequeña guía práctica personal para asegurar y hacer un hardening en Apache Web Server.

  La realidad es que hay mucha información sobre cómo configurar “mod_security” y otros firewalls de aplicaciones embebibles para proteger nuestro servidor pero, en la mayoría de los casos, no se mencionan ciertas configuraciones básicas que nos aportan un gran valor al nivel de seguridad del mismo. Vamos a proceder a presentar algunas...

  Voy a asumir que todos usan HTTPS y redireccionan a todo el mundo que quiera entrar por HTTP para saltar esa parte e ir directamente a lo que me interesa explicar. Al contar con varias opciones voy a explicar una por una que es lo que hacen, sin entrar en detalles del tipo “qué es HSTS” ya que está más que documentado.

  Todos los parámetros de configuración que se listarán se deben añadir al final del apache.conf - apache2.conf - httpd.conf de nuestro servidor. Algunas opciones ya vienen marcadas por defecto tal y como las voy a mencionar, pero voy a mostrarlas de todos modos para asegurarnos de que si se decide cambiarlas en un futuro, no nos afecte en absoluto.

WEB SERVER FINGERPRINT


  Por defecto Apache nos devolverá su nombre, versión y probablemente mucha más información que no le interesa a nadie con buenas intenciones xD. Vamos a cambiar este comportamiento:

ServerTokens Prod
ServerSignature Off

  Una vez hecho esto veremos que en las cabeceras, Apache simplemente arrojará como dato que es un Apache, sin dar ningún dato más.

ETAGS

  Los ETags dan demasiada información al igual que el Fingerprint. Vamos a demandarle a nuestro Apache que si el documento proviene de un archivo no genere este campo:

FileETag None

  Con esto ya nos aseguramos de que nuestro servidor provea la menor cantidad de información posible, o que al menos se haya reducido considerablemente.

TRACE

  Otra cosa que no se tiene en cuenta generalmente es deshabilitar este método, que se
puede utilizar en distintos vectores de ataque, así que lo vamos a hacer:

TraceEnable off

PROTOCOLOS DE CIFRADO

  No todos los protocolos de cifrado son seguros, así que vamos a decirle a nuestro servidor que solo acepte aquellos en los que confiamos y, estos, quedan a elección según el juicio personal de cada uno de ustedes:

SSLCipherSuite HIGH:!MEDIUM:!aNULL:!MD5:!RC4
SSLProtocol -ALL +TLSv1 +TLSv1.1 +TLSv1.2

  La primera línea limita qué cifrados puede utilizar el cliente para conectarse y la segunda rechaza todos los protocolos habilitando únicamente TLS.

DISMINUIR VECTORES DE ATAQUE

  Vamos a añadir algunos headers que nos van a servir para eliminar una cantidad considerable de vectores de ataque que son muy fáciles de realizar y que con las configuraciones por defecto no son mitigados:

Header always append X-Frame-Options SAMEORIGIN
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure
Header always append X-XSS-Protection "1; mode=block"
Header always append X-Content-Type-Options nosniff
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains;"

  Así evitamos que nuestra web pueda ser insertada en un iframe en otro servidor, aseguramos todas las cookies y HttpOnly, cortamos la ejecución de XSS si el navegador lo detecta (no todos lo soportan), evitamos que el navegador haga MIME-sniffing y por último habilitamos HSTS.

GUARDAMOS Y REINICIAMOS

  Luego de un save and restart httpd, nuestro Apache WS ya es un servidor que da el mínimo de información a un atacante y a la vez protege el tráfico de nuestros usuarios.
  Como aclaración quiero recordar que este artículo no es una implementación única y definitiva para asegurar sus servidores web Apache y no se pretende sustituir la cantidad innumerable de tutoriales que hay circulando, sino que se pueda complementar con estos. Los parámetros presentados se deben adicionar a otras herramientas como mod_security, fail2ban o las que deseen.

  Espero les sirva este pequeño artículo y puedan seguir desarrollando sus habilidades para además de saber atacar, saber defenderse.

¡Nos leemos pronto!
Sol (@0zz4n5).

1 comentario:

  1. Muy bueno. A guardar en recursos.
    Se q no es el lugar pero una pregunta. ¿Cuáles son los pasos a seguir cuando encuentras una pag. web con enlaces ocultos ?. Me explico buscando información sobre unas opciones del editor vim me llama la atención una web médica que tiene indexado los recursos del servidor de configuración:
    http://www.@@@@@@@/.../.........?filesrc=//usr/share/vim/vim74/autoload/netrwSettings.vim&path=//usr/share/vim/vim74/autoload
    Curioseando en la pág. veo enlaces ocultos a pág porno y un panel de control de Jayalah indonesiaku b374, que parece ser un backdoor o un panel de control para el servidor web.
    He enviado un correo al administrador de la pág. pero me gustaría saber si se debe avisar a alguien más y de ser asi como hacerlo.
    Gracias y perdona por el tocho.

    ResponderEliminar