Metasploitable 2 - Hardening Servicio RCPBIND

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 múltiples puertos y vulnerabilidades habilitados.
-
Es por eso que iremos resolviéndolas por servicios por separado.
Resumen del estado de la máquina
| Puerto | Servicio | Estado |
|---|---|---|
| 21 | FTP | Cerrado |
| 22 | SSH | |
| 23 | Telnet | Cerrado |
| 25 | SMTP | Blindado |
| 53 | DNS | Blindado |
| 80 | HTTP | Blindado |
111 - rcpbind

El puerto 111 (TCP / UPD) está reservado para rcpbind (anteriormente conocido como portmap). Su función principal es asignar servicios RPC (Llamada de Procedimientos Remotos) a los puertos dinámicos correctos. Cuando un cliente necesita conectarse a un servicio como NFS (Network File System), le pregunta a rpcbind en qué puerto exacto está escuchando dicho servicio.
Reconocimiento
Con la herramienta rpcinfo podemos “preguntarle” al puerto 111 qué servicios tiene asignados. Esta servicio nos responderá sin pedir credenciales.

Los resultados nos muestra que nfs y mountd están expuestos. Ya que tenemos el servicio de mountd usaremos la herramienta showmount para consultar qué directorios están expuestos al exterior.

Esto significa que todo el sistema de archivos raíz ( / )está exportado y disponible para cualquier máquina en la red ( * )
Explotación
Dado a que tenemos acceso a los archivos de la máquina víctima, podemos crear un directorio local en nuestra máquina atacante, y “pegar” el disco duro de la máquina víctima en ella.


ahora tenemos todos los archivos de la máquina víctima en nuestra máquina atacante. Eso nos deja a disposición el archivo shadow, robar llaves SSH o ver cualquier archivo del sistema.


Mitigación
Servicio NFS
Ya sabemos lo peligroso que esto puede ser, para mitigar este problema vamos a permitir que solo una IP de confianza tenga permiso para interactuar con este puerto/servicio.
Para esto, debemos modificar el archivo de configuración que se encuentra en: /etc/exports
Aquí debemos modificar la última línea, borramos el asterisco ( * ) y agregamos la IP de confianza, en este caso vamos a poner la del localhost, también debemos cambiar no_root_squash por root_squash

Cambiamos la línea.

Estos dos cambios eliminan por completo el peligro más crítico de este servicio. Al cambiar el asterisco ( * ) y poner una IP especifica, establecemos una lista blanca a nivel de red. El servidor NFS ahora inspecciona la IP de origen de cada paquete de petición. Si un atacante quisiera montar el disco desde otra IP, el sistema operativo rechará la conexión. Y cambiar no_root_squash creamos una directiva defensiva que mapea identidades. Si un usuario intenta crear, leer o modificar un archivo en el recurso compartido, la máquina intercepta esa acción y de forma transparente degrada los privilegios al usuario anónimo del sistema.
Con los cambios realizados, debemos reiniciar el servicio para aplicar las nuevas directivas.
sudo exportfs -a
sudo /etc/init.d/nfs-kernel-server restart

Servicio Portmap
Ahora que el servicio NFS quedo protegido, el servicio de portmap sigue totalmente abierto al público. Para realizar el hardening a este debemos bloquear el acceso externo a portmap.
Vamos a usar los TCP Wrappers para prohibir que cualquier IP externa le haga preguntas a este puerto.
Abrimos el archivo de denegación en Metasploitable2 que se encuentra en la ruta: /etc/hosts.deny, y agregamos una línea al final del archivo para denegar el acceso total.

Ahora abrimos el archivo de permitidos, comentamos con (#)la linea de ALL:ALL y ponemos nuestra IP de confianza.

Reiniciamos el servicio para aplicar los cambios.
sudo /etc/init.d/portmap restart
Ahora desde nuestra máquina atacante no tendremos acceso a este servicio.

Nota
Dado a que parchamos NFS y restringimos el montaje a localhost, el puerto 111 ya no cumple con ninguna función útil hacia el exterior. En un buen trabajo de hardening, el servicio que no se usa debería apagarse… Pero.. para que hacer las cosas fáciles si podemos hacerlas difíciles… 😉