Metasploitable 2 - Hardening Servicio WEB

Este es un nuevo proyecto de Hardening para el laboratorio Metasploitable2. Este laboratorio es conocido por tener múltiples vulnerabilidades que como atacante podemos sacar provecho y comprometer la máquina. Pero esta vez nos pondrémos en los zapatos del equipo defensivo y aplicaremos configuraciones correctas para volver Metasploitable 2 una máquina segura.
Los objetivos del proyecto serán:
- Reducir la superficie de ataque.
- Corregir fallas de configuración.
- Implementar contramedidas.
- Validar la postura de seguridad.
Metodología:
- Inspección y validación de la vulnerabilidad. Remediación (Hardening).
- Validación de seguridad.
- Esta máquina tiene multiples puertos y vulnerabilidades habilitados.
- Es por eso que iremos resolviendolas por servicios por separado.
Servicio Web

Llegamos al servicio WEB en el puerto 80. Aquí nmap nos encontró la siguiente información.


Desde la fase de reconocimiento podemos ver información crítica, como por ejemplo la versión del server Apache/2.2.8 (Ubuntu) DAV/2

o rutas de directorios que podemos ver directamente desde el navegador.

En este caso, para cerrarle las ventanas a este reconocimiento masivo, vamos a ocultar los Banner informativos, deshabilitar el listado de directorios y ocultar la cabecera PHP.
Ocultar Banner : El archivo de configuración de apache se encuentra en la ruta /etc/apache2/apache2.conf. Aquí deberemos agregar dos líneas de directivas al final del archivo:
- ServerTokens Prod
- ServerSignature Off

Deshabilitar el Listado de Directorios: Para realizar esto, debemos modificar la línea desde Options quitándole la palabra Indexes o poniéndole el símbolo menos - por delante, para prohibirle a Apache listar archivos cuando falte un Index. El archivo de configuración está en: vim /etc/apache2/sites-available/default

Nmap también nos reportó que los directorios /doc/ y /dav/ también listaban archivos de forma vulnerable. Para estos debemos repetir el procedimiento.

Guía de Explotación servicio WEB
Aquí nos encontramos con el primer inconveniente..
Las aplicaciones web expuestas en esta máquina representan un problema crítico porque, aunque blindemos la infraestructura de Apache, un atacante aún puede explotar el código vulnerable de estas herramientas para tomar el control del servidor (por ejemplo, mediante inyecciones SQL, subida de archivos maliciosos o RCE).
La mejor opción para este caso, es aplicar un control de acceso a la red a nivel de servidor web y no que simplemente esté accesible para todo el mundo.
## Contramedida ##
Apache nos permite aplicar restricciones de acceso por carpetas específicas utilizando un módulo llamado authz.
La ruta del archivo que vamos a modificar se encuentra en: etc/apache2/sites-available/default
Bajaremos hasta la etiqueta </VirtualHost> para inyectar las restricciones para las rutas expuestas.
<Directory /var/www/phpMyAdmin/>
Order Deny,Allow
Deny from all Allow from 127.0.0.1
</Directory>
<Directory /var/www/tikiwiki/>
Order Deny,Allow
Deny from all Allow from 127.0.0.1
</Directory>
<Directory /usr/share/doc/>
Order Deny,Allow
Deny from all Allow from 127.0.0.1
</Directory>
<Directory /var/www/dvwa/>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Directory>
<Directory /var/www/mutillidae/>
Order Deny,Allow
Deny from all
Allow from 127.0.0.1
</Directory>
y modificamos las líneas de Allow from all por Allow from 127.0.0.1

Ocultar la cabecera PHP: Para ocultar la cabecera PHP debemos buscar la directiva expose_php y cambiamos su estado a Off en el archivo de configuración que se encuentra en la ruta/etc/php5/apache2/php.ini

También necesitamos agregar una directiva en el archivo
/etc/apache2/sites-available/default
Donde tendremos que agregar:
Header always unset X-Powered-By

Con esto el servidor Apache aplicara un filtro de censura a nivel de red justo en la salida del servidor.
Quitar el listado de la carpeta /icons/: Apache suele preconfigurar la carpeta de iconos en un archivo global de alias independientes. Este archivo se encuentra en /etc/apache2/mods-available/alias.conf y al igual que en las directivas, agregamos el signo menos - antes de Indexes Multiviews

Archivo phpinfo.php: En un entorno real la mejor práctica es eliminar por completo este archivo. Este solo sirve para desarrollo y, si un atacante lo encuentra, obtendrá una radiografía completa de la configuración del servidor, rutas internas y extensiones.

reiniciamos el servicio para aplicar las nuevas configuraciones
/etc/init.d/apache2 restart


Con estos ajustes la máquina queda en un estado de fortificación aceptable. Nadie en la red podrá interactuar con las aplicaciones web a menos que tenga acceso vía SSH con credenciales válidas para tunelizar el tráfico.