Hola a todos,
Una vez pasada la etapa de reconocimiento, para cada uno de los servicios y sistemas operativos disponibles en cada máquina se debe identificar cómo funciona cada uno de ellos y las posibles vulnerabilidades, con el fin de poder acceder a las máquinas con credenciales válidas.
Introducción
En esta fase se debe buscar e identificar todas las vulnerabilidades potenciales en los sistemas auditados. Esto se puede hacer mediante el uso de contraseñas débiles o predeterminadas, vulnerabilidades del servicio obsoleto o configuraciones incorrectas que permiten a los usuarios normales realizar tareas con altos privilegios.
En la siguiente imagen se pueden ver los servicios que suelen tener abiertos los equipos a la hora de buscar los diferentes vectores de ataque, pero se podrían buscar información sobre cualquier servicio o vector de ataque que estuviera abierto en cualquiera de los equipos.
Vectores de Ataque
Kerberos
Kerberos es un protocolo de autenticación (fuente) para los clientes y servidores de un AD, suele ejecutarse sobre el puerto 88.
Para el uso de este protocolo intervienen varios actores (fuente):
- Usuario: que solicita el acceso al servicio.
- Servidor de aplicación (AP, por sus siglas en inglés): donde el usuario quiere acceder.
- Centro de Distribución de Claves (KDC, por sus siglas en inglés): que se encarga del envío de los tickets al cliente desde el Controlador de dominio. Además, cuenta con un servicio llamado AS (Authentication Service) que es el que se encarga de tramitar los tickets.
Para que los usuarios puedan realizar las gestiones que tienen permitidas dentro del dominio de Kerberos, este utiliza uno objetos de distribución llamados tickets, existen de dos tipos:
- TGS (Ticket Granting Service): es un ticket otorgado a un servicio para que puedan acceder a sus recursos, este tipo de ticket está cifrado con la clave del servicio.
- TGT (Ticket Granting Ticket): este es un ticket presentado al KDC necesario para obtener el TGS, este ticket se cifra con la clave del KDC, derivada del hash NTLM de la cuenta krbtgt.
Los mensajes más comunes trasmitidos por el protocolo durante su proceso de ejecución son:
- KRB_AS_REQ: se usa para solicitar un TGT al KDC.
- KRB_AS_REP: es la respuesta del KDC para hacer llegar el TGT.
- KRB_TGS_REQ: se solicita el TGS al KDC, utilizando el TGT.
- KRB_TGS_REP: es la respuesta a la solicitud de TGS por parte del usuario.
- KRB_AP_REQ: se usa para identificar al usuario en un servicio mediante el TGS recibido.
- KRB_AP_REP: es la respuesta del servicio frente a la autenticación del usuario.
- KRB_ERROR: se usa para notificar errores.
En la siguiente imagen se puede visualizar la secuencia de mensajes de autenticación sobre el protocolo. Fuente:
Uno de los principales problemas es que toda la información que necesita el TGS está incluido en el Ticket (TGT) que emite el AS, aunque se encuentra encriptado por la contraseña de la cuenta krbtgt, esto hace que sea la más importante de todo el entorno,haciendo que cualquier información del TGT sea de confianza y pueda ser vulnerado si no se establece de forma correcta. Otras vulnerabilidades que presenta el protocolo son:
Pass The Hash: el pentester obtiene el hash de un usuario, mediante el fichero SAM o NTDS.DIT, con el fin poder acceder a los servicios que tenga permisos.
Golden/Silver Ticket: como se ha comentado con anterioridad esta es la vulnerabilidad más importante, ya que con el hash del usuario krbtgt se puede construir un TGT valido para siempre hasta que el usuario krbtgt cambie la contraseña.
Kerberoasting: el pentester obtiene mediante diferentes técnicas algún TGS, que es el que se encuentra cifrado por la clave del servicio que lo gestiona, como la clave incluye el hash NTLM del usuario, sería posible encontrar la contraseña de manera offline con fuerza bruta.
ASREPRoast: esta vulnerabilidad usa la configuración de atributos de un usuario, en concreto la que no solicita pre-autenticación lo que permite generar un mensaje KRB_AS_REQ sin conocer las credenciales del usuario y esto permite recibir un mensaje KRB_AS_REP, que como en el caso anterior, este contiene el hash NTLM del usuario y podría ser crackeado de manera offline.
Samba
Se trata de un protocolo para compartir archivos en entornos Windows, se suele ejecutar sobre el puerto 445, al ser una implementación del protocolo CIFS, para sistemas UNIX, este permite interconexión con este tipo de sistemas para que puedan actuar como clientes de Windows, por último, permite validar clientes haciendo uso del dominio del AD.
Está compuesto por dos servicios principales, que se encarga de proporcionar los recursos: (Fuente)
- smbd: es servicio permite la compartición de recursos sobre una red SMB, además, es el encargado de gestionar la verificación y autorización de los usuarios contra el recurso.
- nmbd: este servicio es el que permite la búsqueda de recursos mediante Windows Internet Name Service (WINS).
Uno de los principales problemas que se encuentra con este servicio, es que permite la validación de usuarios, por lo que a cada recurso que accede envía las credenciales de usuario hasheadas, si son débiles permite su fuerza bruta y vulneración de estas de manera offline.
Se han detectado muchas vulnerabilidades muy importantes relacionadas con este servicio algunas de estas son: (Fuente)
- SMB-Trap: esta vulnerabilidad hace uso de la API URLMon.dll, que intenta autenticar automáticamente al host cuando una página intenta acceder a algún recurso a través de SMB, enviando credenciales de Windows Hasheadas. (Fuente imagen)
NTLM Theft: la colocación de archivos maliciosos en un sistema puede provocar un intento de autenticación SMB, permitiendo que el hash de NetNTLMv2 sea interceptado con alguna herramienta.
SMB relay attack: este ataque utiliza envenadores de red para capturar sesiones de autenticación SMB en una red interna, para retransmitirlas a una máquina objetivo.
DNS
El protocolo DNS es el que se encarga de traducir los nombres de dominio a direcciones ip, facilitando la carga del recurso ofrecido, suelen estar presentes a través del puerto 53. Un servidor DNS que traduzca nombres de dominios internos de un cliente no se suelen exponer en Internet.
Existen diferentes tipos de servidores DNS: (Fuente)
- Primario: son responsables de los dominios de primer nivel (TLD).
- Secundario: tienen autoridad para una zona concreta. Sólo responden a las consultas de su zona de responsabilidad y su información es vinculante.
- Caché: almacenan en caché la información de otros servidores de nombres durante un periodo determinado, indicado por un servidor primario.
- Reenviador: reenvían las consultas DNS a otro servidor DNS.
Uno de los problemas más conocidos sobre este servicio reside en que un usuario del grupo DNSAdmins, puede inyectar un DLL y ejecutarse con privilegios de SYSTEM, los más altos, esto se realizaría incluyendo el DLL en un recurso compartido y reiniciando los servidores DNS.
Otro de los posibles vectores de ataque para conseguir bloquear el sistema que alberga el servidor DNS, es mediante la recursión de DNS, si está habilitada, un atacante podría falsificar el origen en el paquete UDP para hacer que el DNS envíe la respuesta al servidor víctima, abusando así de los tipos de registro ANY o DNSSEC.
LDAP
Se trata de un protocolo que permite localizar recursos dentro de una red, pública o privada, suele ejecutarse en los puertos: 389, 636, 3268, 3269.
El directorio de recursos, puede distribuirse entre muchos servidores (Fuente), replicando el directorio principal y sincronizándose cada cierto tiempo.
Un servidor LDAP se denomina Agente del Sistema de Directorio (DSA, por sus siglas en inglés), este es el responsable de recibir las solicitudes de los usuarios, reenviarlas a otros DSA si es necesario y responder a las solicitudes de los usuarios.
El directorio está organizado en una estructura de árbol, comenzando en el directorio raíz, ramificándose países, cada uno dividido en organizaciones, extendiéndose en unidades organizacionales y ramificándose, por último, en los diferentes recursos, como archivos, personas o recursos compartidos.
Algunos de los problemas encontrados en LDAP es la falta de cifrado en las consultas a este, lo que provoca envío de credenciales en texto claro. También un ataque MITM puede degradar la versión del protocolo para que envíe las credenciales en texto plano; además se puede ofrecer un certificado falso para presentar los recursos y si es aceptado recibir las credenciales en texto plano.
Por último, con unas credenciales válidas es posible la obtención de toda la información sobre el administrador del dominio.
NTLM
Es un protocolo de autenticación que permite que diferentes ordenadores y servidores se verifiquen entre sí usando hashes. Fuente
NTLM utiliza un proceso llamado desafío/respuesta que se encarga de gestionar la autenticación, los pasos que sigue pueden verse en la siguiente figura:
El ataque más común de NTLM son el robo de credenciales (Fuente), accediendo a recursos compartidos con un usuario nulo o invitado se podría colocar archivos que desencadenen una autenticación NTLM contra el atacante para después crackearla de manera offline.
Otro ataque es NTLMRelay, que retransmite sesiones de autenticación SMB en una red interna hacia otra máquina, si las credenciales enviadas son correctas se obtiene acceso al objetivo, estás credenciales deben ser de un administrador del equipo y la firma del SMB debe estar desactivada.
Miss privileges
En alguna ocasión los privilegios otorgados a roles o usuarios pueden acarrear problemas de seguridad si sus credenciales son vulneradas (Fuente). Existen diferentes privilegios que se otorgan a los usuarios para que puedan realizar diferentes acciones dentro de un AD, sin embargo, estas acciones pueden desencadenar robo de credenciales en memoria o acceso a procesos de otros usuarios, sin necesidad de ser administradores.
Una vulnerabilidad dentro del privilegio de realizar copias de seguridad reside en los permisos que este otorga, entre los que se encuentran recorrer cualquier carpeta y listar su contenido. También se permitirá copiar un archivo de una carpeta, sin permisos.
Conclusión
Esto sería todo, en el siguiente post entraremos en materia respecto a la ejecución de los vectores de ataque disponibles sobre el entorno.