01 octubre 2015

Identificando un Directorio Activo por su fingerprint


Una de las primeras acciones a realizar en una auditoría consiste en la identificación de servicios, sistema operativo, etc..., a través de su huella digital (Fingerprint).

A día de hoy existen múltiples técnicas y herramientas para determinar con qué sistema operativo estamos “hablando”.

En cuanto a la capacidad de determinar la versión o tipo de aplicación Web o motor de bases de datos, el número de técnicas se dispara, al igual que las herramientas disponibles.

Para servicios críticos como por ejemplo Directorio Activo no existen herramientas en el mercado que determinen de manera fiable la versión de OS que soporta el servicio. Si el auditor se encuentra en una posición sin autenticar, éste podrá utilizar herramientas como Nmap o Nessus para determinar el OS. Bastaría con que cualquiera de estas herramientas encontrase los siguientes servicios de comunicación:

Tabla 1.- Puertos de comunicación con Directorio Activo


El gran problema reside en la cantidad de paquetes que este tipo de herramientas necesitan para determinar qué servicio o sistema operativo se encuentra en el host. Este problema aumenta cuando estos entornos coexistan con sistemas de detección de intrusos, los cuales puedan alertar al departamento IT/SEC de la empresa.

Si el auditor se encuentra en una posición autenticada, la detección es muy sencilla, no requiriendo ningún tipo de herramienta para determinar sistema operativo y servicio. Los servicios de Directorio Activo almacenan y reciben información de una gran variedad de aplicaciones y servicios. Debido a esta variedad de orígenes, este servicio necesita normalizar la información que almacenará en el bosque, para lo cual utiliza un esquema. El esquema de Directorio Activo contiene toda la definición de clases de objetos posibles que se pueden crear en un bosque gobernado por este servicio. Este esquema también contiene la definición de los atributos que pueden existir en un objeto.

El objeto Schema contiene un atributo específico y a través del cual se almacena información referente a la versión del mismo. Este atributo, llamado ObjectVersion podrá tomar uno de los siguientes valores:

Tabla 2.- Valores del atributo ObjectVersion


La consulta de este atributo se puede realizar a través de PowerShell, Perl, Python o Visual Basic Script por ejemplo, o mediante herramientas específicas como la nativa de Microsoft DSQUERY.


Figura 1.- Obteniendo el valor de ObjectVersion a través de DSQUERY

Si se observa la imagen anterior, el comando devuelve una versión específica de esquema indicando el número 47, el cual corresponde a un sistema operativo Windows Server 2008 R2.

Estas y otras técnicas como por ejemplo la detección pasiva, detección semántica, etc., se mostrarán en el curso de hacking que ofrece Securízame, curso en el que gustosamente tengo el honor de participar dando la parte de OSINT – una de las que más me gustan – y que securizame ha tenido el placer de invitarme. En este curso imparten clases profesores – y amigotes- de la talla de Lorenzo Martínez (@lawwait) Pedro Sánchez (@conexioninversa), Yago Jesús (@yjesus), José Antonio Guash (@securitybydefault), Raúl Siles  (@raulsiles), Daniel García (@ggdaniel) o Carlos Pérez (@carlos_perez), así que si estás pensando en adentrarte en este mundo, o como director de seguridad, CTO etc., necesitas formar a un equipo, no deberías perder esta oportunidad.

Si quieres más información, así como un índice del mismo, puedes consultar el siguiente enlace:


Abrazos!
Juan Garrido
MVP Enterprise Security
Referencias adicionales: