This page looks best with JavaScript enabled

Monitorea cambios en el Directorio Activo con LDAPmonitor

 ·   5 min read  ·  Autor - Snifer

La siguiente herramienta que veremos en el blog viene directamente de la mano de la serie de Active Directory que nos encontramos realizando en el blog, ya que el uso e implementación que podemos dar puede ser tanto del lado del pentester como también de un lado de monitoreo para determinar que cambios se están realizando durante un proceso de Pentesting en el controlador de dominio, e incluso si realizamos alguna movida de escalamiento de privilegios identificarlo.

LDAPMONITOR

La herramienta fue desarrollada en Python por P0dalirius, como mencionamos al inicio del post nos ayuda a identificar cambios en el Controlador de Dominio lo primero que debemos de hacer es decargar el repositorio desde Github ya sea con git clone o bajando el ZIP desde el área de release.

1
2
3
4
5
git clone https://github.com/p0dalirius/LDAPmonitor.git
Cloning into 'LDAPmonitor'...
remote: Enumerating objects: 94, done.
remote: Counting objects: 100% (94/94), done.remote: Compressing objects: 100% (69/69), done.remote: Total 94 (delta 26), reused 78 (delta 17), pack-reused 0
Unpacking objects: 100% (94/94), 3.06 MiB | 139.00 KiB/s, done.

Si visualizamos el directorio LDAPmonitor, veremos que contamos con 3 implementaciones realizadas tanto en Windows como Linux, en la entrada veremos los 3 dando un enfasis particular a Python ya que podremos usarlo desde Linux.

  • cSHARP
  • Powershell
  • Python

Las características y soporte de las diferentes versiones son las siguientes.

Python

Para ejecutarlo debemos de instalar a traves de pip python-ldap recuerda hacerlo con pip3, ya que el script está realizado en Python3, solo al ejecutar el script o directamente con el comando --help tendremos el siguiente resultado.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
./pyLDAPmonitor.py --help                                                                                                     ─╯
usage: pyLDAPmonitor.py [-h] [--use-ldaps] [--debug] [--no-colors] [-l LOGFILE] [-s PAGE_SIZE] [-r] [-t TIME_DELAY] [--ignore-user-logon]
                        [--dc-ip ip address] [-d DOMAIN] [-u USER] [--no-pass | -p PASSWORD | -H [LMHASH:]NTHASH | --aes-key hex key] [-k]

Monitor LDAP changes live!

optional arguments:
  -h, --help            show this help message and exit
  --use-ldaps           Use LDAPS instead of LDAP
  --debug               Debug mode.
  --no-colors           No colors mode.
  -l LOGFILE, --logfile LOGFILE
                        Log file to save output to.
  -s PAGE_SIZE, --page-size PAGE_SIZE
                        Page size.
  -r, --randomize-delay
                        Randomize delay between two queries, between 1 and 5 seconds.
  -t TIME_DELAY, --time-delay TIME_DELAY
                        Delay between two queries in seconds (default: 1).
  --ignore-user-logon   Ignores user logon events.

authentication & connection:
  --dc-ip ip address    IP Address of the domain controller or KDC (Key Distribution Center) for Kerberos. If omitted it will use the domain part (FQDN)
                        specified in the identity parameter
  -d DOMAIN, --domain DOMAIN
                        (FQDN) domain to authenticate to
  -u USER, --user USER  user to authenticate with

  --no-pass             don't ask for password (useful for -k)
  -p PASSWORD, --password PASSWORD
                        password to authenticate with
  -H [LMHASH:]NTHASH, --hashes [LMHASH:]NTHASH
                        NT/LM hashes, format is LMhash:NThash
  --aes-key hex key     AES key to use for Kerberos Authentication (128 or 256 bits)
  -k, --kerberos        Use Kerberos authentication. Grabs credentials from .ccache file (KRB5CCNAME) based on target parameters. If valid credentials
                        cannot be found, it will use the ones specified in the command line

Para ejecutar la herramienta y realizar el monitoreo es con los siguientes comandos.

1
pyLDAPmonitor.py -d dino.corp -u snifer -p Password! --dc-ip 172.16.119.134 

En el Controlador de dominio procedemos a crear un usuario y una nueva GPO por medio de PowerShell como se muestra en la siguiente captura.

La herramienta identificará los cambios realizados empezando con la creación de un nuevo usuario y también la GPO que fue creada, si se tiene un escalamiento de privilegios o cambios adicionales podremos visualizarlo.

Algo para aclarar con ldapmonitor es que podemos ignorar los eventos pertenecientes a los inicios de sesion con la flag --ignore-user-logon o bien si deseamos que se almacene en un fichero todo el monitoreo realizado es con el flag -l o --logfile.

PowerShell

Ejecutar con credenciales para que el mismo ejecute es el siguiente comando.

1
.\psLDAPmonitor.ps1 -dcip 172.16.119.134 -Username "dino.corp\snifer" -Password "Password!"

Con un usuario ya autenticado solo debemos mandar la flag -dcip

1
.\psLDAPmonitor.ps1 -dcip 172.16.119.134

Csharp

La implementación de Csharp como también la de PowerShell puede ser utilizada con parámetros adicionales forzando el uso de /dcip para comunicarse con el Controlador de Dominio.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
 .\SharpLDAPmonitor.exe
[+]======================================================
[+]  Sharp LDAP live monitor v1.1        @podalirius_
[+]======================================================

Required
   /dcip:<1.1.1.1>    LDAP host to target, most likely the domain controller.

Optional
   /user:<username>   User to authenticate as.
   /pass:<password>   Password of the account.
   /ldaps             Use LDAPS instead of LDAP.
   /delay:<int>       Delay between two queries in seconds (default: 1).
   /randomize         Randomize delay between two queries, between 1 and 5 seconds.
   /pagesize          Sets the LDAP page size to use in queries (default: 5000).
   /ignoreuserlogons  Ignores user logon events.
   /debug             Debug mode.

En caso de autenticarnos con un usuario en dominio del mismo modo debemos de usar los flags /user:USERNAME y /password:PASSWORD respectivamente.

Sé que estos últimos meses no estoy muy activo por el blog, ni que decir del Podcast estoy pasando nuevamente con algunos problemas de salud y algo de estrés que no esta muy de la mano con mi día a día, esta pequeña entrada es realizada para recordar una utilidad que recién fue publicada y me dieron ganas de compartir en el blog.

Regards,
Snifer

Share on
Support the author with

Avatar
WRITTEN BY
Snifer
Creador del proyecto Snifer@L4b's. Consultor en Seguridad Informática.