Mi primer Pentest

Poner a prueba la red interna de una empresa para identificar posibles fallos por los cuales se podría llevar un ataque, tanto externa como internamente, es un ejercicio que podría prevenir la mayoría de las incidencias de seguridad y mejorar la seguridad de la red. Estos fallos, una vez detectados durante el Pentest, son informados para tomar las medidas y recomendaciones más acertadas con el objetivo de solucionar las vulnerabilidades de la mejor forma posible y en el menor plazo disponible. El artículo en sí es un caso ficticio que da una imagen por encima de lo que sería un Pentest interno.

En resúmen, lo que vamos a hacer es ver que se podría llegar a hacer en la red interna y hasta dónde podemos llegar en función de las vulnerabilidades críticas identificadas.

TIPOS DE TEST DE INTRUSIÓN

Tenemos dos tipos de test de intrusión:

TEST DE INTRUSIÓN EXTERNO

Las pruebas de este tipo de test se realizan desde fuera de la empresa, utilizando toda la información disponible en internet con el objetivo de evaluar los sistemas de seguridad perimetrales, acceder a la red interna a través de la zona desmilitarizada DMZ y llegar a ser administrador del sistema.

TEST DE INTRUSIÓN INTERNO

Las pruebas de este tipo de test se realizan desde dentro de la empresa, utilizando la misma información que disponen los empleados con el objetivo de evaluar tanto las políticas internas como los sistemas de seguridad de la empresa, pivotar a través de los equipos de la red y lograr acceder al controlador de dominio como administrador.

DISCLAIMER

Todas las pruebas realizadas o conocimientos aportados a continuación tienen un propósito meramente educativo e informativo, por lo que cualquier uso malintencionado de las mismas no sería nuestra responsabilidad.

PROCEDIMIENTOS

Cuando comenzamos un test de intrusión interno, tenemos un objetivo claro, llegar a ser administradores en el Controlador de Dominio, ya que desde ahí es posible acceder a todos los equipos de la red. Es lo que se considera el “fin del juego”. Tanto si realizamos el test de intrusión de manera remota como si lo hacemos de manera presencial en las propias instalaciones del cliente, vamos a seguir una serie de pasos para intentar no dejar nada atrás. En el siguiente caso ficticio, tenemos que realizar un test de intrusión interno conectándonos a la red de la empresa a través de un servicio VPN, tal y como se observa en el siguiente gráfico:

Mas o menos, los pasos que vamos a llevar a cabo son los que se mostrarán a continuación. Esto no quiere decir que sean estos los que hay que seguir siempre, ni mucho menos. Como se dijo anteriormente, este artículo permite ver de forma muy genérica como se lleva a cabo un test de intrusión :

  1. Descubrimiento de la red
    1. Identificación y escaneo de los rangos
    2. Análisis del tráfico de red
  2. Análisis de vulnerabilidades
  3. Explotación de vulnerabilidades
  4. Postexplotación de vulnerabilidades
    1. Escalado de privilegios
    2. Perfil del sistema
    3. Obtención de credenciales
    4. Información del dominio y usuarios
  5. Desplazamiento Horizontal
    1. Pass The Hash
    2. Identificación del dominio y usuarios
  6. Desplazamiento Vertical

DESCUBRIMIENTO DE LA RED

Comenzaremos el Pentest recogiendo información, tanto de la que nos proporciona la red (ip asignada, mascara de red, etc… ) como del tráfico de la misma para poder construir un mapa.

IDENTIFICACIÓN Y ESCANEO DE RANGOS

Lo primero que haremos será identificar los segmentos de red con los que tenemos acceso para identificar los equipos con los que tenemos acceso y elaborar posteriormente un mapa de red. Además, si por ejemplo la dirección IP que se nos ha asignado pertenece al segmento de red 192.168.1.0/24 y llegamos al segmento de red 10.0.5.0/16 en el que se encuentran sistemas con servicios críticos que no deberían ser accesibles a usuarios no administradores, a no ser que nos digan lo contrario, identificaríamos una falta de segmentación de la red. Como herramientas para realizar este descubrimiento tenemos NMap, ARPScan, etc… .

Es necesario tener en cuenta que, a la hora de realizar escaneos, es preferible no generar mucho ruido y utilizar técnicas sigilosas ya que puede que los sistemas de seguridad (Firewall, IDS, etc… ) se activen ante:

  1. Numerosas peticiones desde la misma dirección IP.
  2. Numerosas peticiones en un corto periodo de tiempo.
  3. Otros factores

Debido a esto, nuestras pruebas pueden no tener respuesta o resultados no deseados. Una configuración de ejemplo para realizar un escaneo sigiloso con NMap puede ser la siguiente:

Más adelante veremos detalladas las opciones de ejecución.

ANÁLISIS DEL TRÁFICO DE RED

A medida que llevamos a cabo el descubrimiento de IPs o una vez realizado, procederemos a realizar el análisis del tráfico de red (Wireshark) debido a que muchas veces se reciben paquetes que no iban dirigidos a nosotros y que pueden contener valiosa información, como por ejemplo, cookies de sesión o credenciales:

También comprobaremos los protocolos utilizados ya que algunos de ellos pueden ser vulnerables, como por ejemplo los protocolos LLMNR y NBT-NS a través de los cuales se puede obtener credenciales de usuario (LLMNR/NBT-NS Relay) .

ANÁLISIS DE VULNERABILIDADES

Ya tenemos todas las IPs vivas identificadas para cada rango. Ahora, por cada una de las máquinas identificadas, realizaremos un escaneo de los puertos más comunes, el servicio ofrecido y su correspondiente versión, con el objetivo de localizar vulnerabilidades. Al igual que en el primer punto, los escaneos de NMap deben ser sigilosos:

  • -T2 : esta opción es la velocidad del escaneo, siendo -T5 el más agresivo, -T0 el más lento y -T3 la opción por defecto. Se recomienda usar -T2 o -T3 .
  • -sS : esta opción de escaneo (TCP SYN) no completa la conexión TCP, enviando un paquete RST para resetearla (SYN > SYN/ACK > RST) . Suele ser utilizado para evitar detección de Firewall.
  • -Pn : esta opción impide que se haga un ping al host antes de realizar el escaneo, que podría ser detectado por un IDS.
  • -f : esta opción fragmenta los paquetes enviados, regulando el tráfico enviado.
  • -sV : esta opción es necesaria para identificar el servicio y la versión disponible en cada puerto.
  • -vv : esta opción nos permitirá mostrar el porcentaje del proceso.

Una versión desactualizada de un servicio puede tener vulnerabilidades conocidas y fácilmente explotables a través de un exploit, accediendo así al sistema. Intentaremos acceder a los puertos descubiertos con el objetivo de encontrar paneles de administración, dispositivos sin credenciales o con credenciales por defecto, carpetas compartidas, versiones de sistemas operativos obsoletos, etc… .

A continuación se muestra una consola de administración de Jenkins abierta en la que podemos acceder a la consola de ejecución de scripts:

EXPLOTACIÓN DE VULNERABILIDADES

Localizadas todas las vulnerabilidades y potenciales puntos de entrada de las máquinas, comenzaremos a explotarlas para poder acceder al sistema. Iremos haciendo uso de los exploits correspondientes para cada vulnerabilidad identificada, siendo recomendable lanzar aquellos exploits que sabemos qué es lo que hacen y qué resultado vamos a obtener. De esta forma intentaremos provocar el menor impacto posible sobre el sistema y nos curaremos en salud.

Vamos a poner como ejemplo algo más o menos reciente: EternalBlue. Nos encontramos con una máquina que tiene un sistema operativo Windows 7 Professional con el servicio SMB versión 1 en el puerto 445 para la compartición de ficheros (servicio SMB):

Esta versión del protocolo SMB, es vulnerable al exploit de EternalBlue, utilizado por el WannaCry. Para asegurarnos de que nuestro exploit funcionará, utilizamos un módulo auxiliar:

Al lanzar el módulo, se verifica que esa máquina es vulnerable a EternalBlue MS017-10 :

Configurando el exploit exploit/windows/smb/ms17_010_eternalblue y ejecutándolo, obtenemos una sesión de Meterpreter sobre el equipo víctima:

Este sistema operativo no parcheado nos ha permitido explotar la vulnerabilidad del servicio SMB con EternalBlue y acceder al sistema.

POSTEXPLOTACIÓN

La explotación del servicio fue exitosa y conseguimos acceder a la máquina. Dependiendo del tipo de servicio a explotar, puede ocurrir que el proceso se haya arrancado con un usuario sin privilegios, por lo que accederemos como un usuario normal, o que se haya arrancado con un usuario administrador, por lo que accederíamos como SYSTEM.

Si fuéramos SYSTEM, la forma mas sencilla de obtener persistencia para garantizar y mantener el acceso a ese equipo es creando un usuario en el grupo administradores para poder acceder posteriormente:

Hay que asegurarse que, una vez haya terminado el Pentest, el usuario es eliminado. En el caso de que no fuéramos SYSTEM y fuésemos un usuario local, necesitaríamos escalar privilegios.

ESCALADO DE PRIVILEGIOS

Hemos explotado el servicio y accedido como un usuario sin privilegios. Intentaremos escalar los privilegios de la consola, por ejemplo a través del uso de un exploit local, para poder ejecutar comandos que requieren de permisos administrativos. Un ejemplo del proceso de escalado de credenciales a través de una consola de Metasploit podría ser el siguiente:

Otro ejemplo sería utilizando Windows Exploit Suggester y hacer uso de cualquiera de los exploit que detalle el resultado:

Son muchos los escenarios que nos podemos encontrar para la escalada de privilegios.

PERFIL DEL SISTEMA

Una vez que hemos conseguido escalar privilegios, pasar de ser un usuario local a ser SYSTEM y garantizar persistencia, intentaremos obtener toda la información posible acerca del equipo:

  • Software utilizado.
  • Mecanismos de seguridad (Firewalls, Antivirus).
  • Parches instalados.
  • Interfaces de red del equipo (direcciones IP, puertas de enlace, etc…).
  • Tablas de enrutamiento (identificar subredes).
  • Ficheros locales que puedan contener información sensible (¿quién no ha guardado alguna contraseña en un .txt?).

Toda la información recogida es útil.

OBTENCIÓN DE CREDENCIALES

Posiblemente en una organización con un gran número de equipos se utilice el mismo usuario administrador local en todas las máquinas en las que las credenciales son las mismas y podamos utilizar la técnica de Pass the Hash para el desplazamiento horizontal entre equipos. También puede darse el caso de que en el equipo se haya logado el administrador de dominio y podamos realizar un desplazamiento vertical hacia el controlador de dominio, como muestra el siguiente gráfico:

Realizaremos el volcado de los hashes correspondientes a los usuarios que han iniciado sesión en la máquina. En los sistemas operativos Windows, las credenciales se almacenan como un Hash, formado con la siguiente estructura:

  • HASH LM: es el hash de contraseña para equipos Windows antiguos (anteriores a Windows 2000) utilizado por la compatibilidad hacia versiones anteriores, formado por caracteres ASCII.
  • HASH NTLM: es el hash de contraseña para equipos Windows más actuales, formado por caracteres UNICODE.

En Windows, los equipos que no están en dominio almacenan las credenciales localmente, en el fichero C:\Windows\System32\config\SAM (Security Account Manager) el cual se encuentra cifrado y se requiere del fichero SYSTEM situado en la misma carpeta para descifrarlo. Para los equipos que sí están en dominio, las credenciales se almacenan en el fichero NTDS.dit , ubicado en el controlador de dominio. Un ejemplo de los Hashes de las credenciales es el siguiente:

Como se puede observar, son tres los usuarios que iniciaron sesión en la máquina entre los que se encuentra el usuario Administrador. Si este usuario se utiliza para gestionar otros equipos en la red, sería posible usar la técnica Pass The Hash, por ejemplo a través del módulo psexec de Metasploit, para realizar un desplazamiento horizontal, saltar a otros equipos del rango y volver a volcar credenciales.

DESPLAZAMIENTO HORIZONTAL

Los hashes de las credenciales de los usuarios nos permitirán realizar un desplazamiento horizontal a través de la técnica Pass The Hash, como veremos a continuación.

PASS THE HASH

Con esta técnica, conseguiremos autenticarnos en otros recursos de red al inyectar el hash NTLM sin tener que conocer la contraseña del usuario. Este hash se inyectará en el proceso lsass.exe de la máquina victima, dándonos acceso como ese usuario. A través del módulo psexec de Metasploit llevaríamos a cabo esta técnica:

El usuario Administrador localizado y utilizado para la técnica de Pass The Hash es utilizado en más equipos, seguramente para tareas de configuración, lo que nos devuelve acceso a la máquina victima:

En el caso de que entre las credenciales se encontrasen las de un usuario del dominio o las del propio administrador de dominio, no necesitaríamos realizar el Pass The Hash, ya que podríamos intentar realizar un desplazamiento vertical.

INFORMACIÓN DEL DOMINIO Y USUARIOS

Hemos accedido a otra máquina utilizando Pass The Hash y al igual que antes, vamos a proceder a realizar un volcado de los hashes de usuario a ver si localizamos un usuario de dominio. Vamos a imaginar que hemos volcado los hashes de un usuario que se llama Parzival:

Vamos a obtener información del dominio a través del comando net group /DOMAIN :

Observamos el dominio thackingf y varios grupos de dominio entre los que se encuentra el grupo Administradores del dominio. El siguiente paso es listar los usuarios que pertenecen a este grupo con el comando net group /DOMAIN “Administradores del dominio” :

DESPLAZAMIENTO VERTICAL

El usuario localizado es un usuario del dominio thackingf . Habiendo identificado en la fase de descubrimiento uno de los controladores de dominio 192.168.125.125 que tiene disponible el puerto 3389, procedemos a intentar conectarnos con Parzival:

Las credenciales del usuario Parzival nos han permitido acceder al controlador de dominio a través de Remote Desktop :

Una vez dentro podemos acceder a todos los usuarios del Directorio Activo y más recursos sensibles de la organización. Es lo que se conoce como el “fin del juego”:

RESUMEN

El resumen a grandes rasgos de todo el proceso de pentest que hemos llevado a cabo desde la conexión a la red interna hasta conseguir ser adminsitradores del sistema es el siguiente:

Esperamos que os haya gustado.

“Don’t give up, great things take time”.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *