Analyse des logiciels malveillants Skeleton Key

La traduction de l'article a été préparée spécialement pour les étudiants du cours d' ingénierie inverse .




Résumé


Des chercheurs de l'unité de contre-menace Dell SecureWorks (CTU) ont découvert des logiciels malveillants qui contournent l'authentification dans les systèmes Active Directory (AD) qui implémentent l'authentification à facteur unique (mot de passe uniquement). Les attaquants peuvent utiliser le mot de passe de leur choix pour l'authentification comme n'importe quel utilisateur. Ce malware est appelé «clé squelette» (clé universelle).

Les chercheurs de la CTU ont découvert la clé squelette sur un réseau client qui utilisait l'authentification à facteur unique pour accéder à la messagerie Web et aux VPN, offrant aux attaquants un accès sans entrave aux services d'accès à distance. La clé squelette est déployée en tant que correctif en mémoire sur les contrôleurs de domaine AD de la victime pour permettre à un attaquant de s'authentifier comme n'importe quel utilisateur, tandis que les utilisateurs légitimes continuent l'authentification comme d'habitude. Le contournement de l'authentification par clé squelette permet également aux attaquants d'accès physique de se connecter et de déverrouiller les systèmes qui authentifient les utilisateurs sur les contrôleurs de domaine AD compromis.

Les seuls échantillons Skeleton Key connus au moment de la publication manquaient de persistance - ils doivent être redéployés au redémarrage du contrôleur de domaine. Les chercheurs de la CTU soupçonnent que les attaquants ne peuvent identifier un redémarrage qu'en fonction de leur incapacité à s'authentifier avec succès, car aucun autre malware n'a été détecté sur les contrôleurs de domaine. Entre huit heures et huit jours après le redémarrage, les attaquants ont utilisé d'autres logiciels malveillants d'accès à distance déjà déployés sur le réseau de la victime pour redéployer la clé squelette vers les contrôleurs de domaine.

Le déploiement de Skeleton Key nécessite des informations d'identification d'administrateur de domaine. Les chercheurs de la CTU ont regardé les attaquants déployer la clé squelette en utilisant des informations d'identification volées sur des serveurs stratégiques, des postes de travail d'administrateur et des contrôleurs de domaine cible.

Analyse


Initialement, les chercheurs de la CTU ont observé un échantillon de clé squelette appelé ole64.dll dans un réseau compromis (voir le tableau 1).

attributsignification ou description
nom de fichierole64.dll
md5bf45086e6334f647fda33576e2a05826
sha15083b17ccc50dd0557dfc544f84e2ab55d6acd92
temps de compilation2014-02-19 09:31:29
déployéau besoin (généralement téléchargé à l'aide de logiciels malveillants, puis supprimé après utilisation)
taille du fichier49664 octets
sections.text, .rdata, .data, .pdata, .rsrc, .reloc
exporter

ii (installe le patch)

uu (supprime le patch)

dllentrypoint (point d'entrée dll par défaut)


Tableau 1. Exemple de clé squelette ole64.dll .

En étudiant ole64.dll , les chercheurs de la CTU ont découvert une ancienne version de msuta64.dll sur un «hôte intermédiaire» sur le réseau de la victime (voir le tableau 2). Un hôte intermédiaire est tout système précédemment compromis par des logiciels malveillants d'accès à distance malveillants. Cette option inclut des opérateurs de débogage supplémentaires qui permettent au développeur Skeleton Key d'observer les adresses mémoire impliquées dans le processus de correction.

attributsignification ou description
nom de fichiermsuta64.dll
md566da7ed621149975f6e643b4f9886cfd
sha1ad61e8daeeba43e442514b177a1b41ad4b7c6727
temps de compilation2012-09-20 08:07:12
déployé2013-09-29 07:58:16
taille du fichier50688 octets
sections.text, .rdata, .data, .pdata, .rsrc, .reloc
exporter

ii (installe le patch)

uu (supprime le patch)

dllentrypoint (point d'entrée dll par défaut)


Tableau 2. Exemple de clé squelette msuta64.dll .

Les attaquants ont utilisé l'algorithme suivant pour déployer la clé squelette en tant que fichier DLL 64 bits:

  1. Téléchargez le fichier DLL de clé squelette dans le répertoire intermédiaire de l'hôte intermédiaire du réseau victime. Les chercheurs de la CTU ont observé trois noms de fichiers associés au fichier DLL de clé squelette: ole64.dll, ole.dll et msuta64.dll. Les systèmes Windows incluent le fichier ole32.dll légitime, mais il n'est pas lié à ce logiciel malveillant.
  2. Essayez d'accéder aux ressources administratives sur les contrôleurs de domaine à l'aide d'une liste d'informations d'identification d'administrateur de domaine volées.
  3. Si les informations d'identification volées ne sont plus valides, utilisez les outils de vol de mot de passe pour extraire les mots de passe de l'administrateur de domaine en texte clair à l'un des emplacements suivants, ce qui implique une familiarité avec l'environnement de la victime:

    • mémoire d'un autre serveur disponible sur le réseau victime
    • emplois d'administrateur de domaine
    • contrôleurs de domaine cible
    • Utilisez des informations d'identification d'administrateur de domaine valides pour copier la DLL de clé squelette dans C: \ WINDOWS \ system32 \ sur les contrôleurs de domaine cible.
  4. Utilisez l'utilitaire PsExec pour exécuter à distance le fichier DLL de clé squelette sur les contrôleurs de domaine cible à l'aide de la commande rundll32. Le mot de passe choisi par l'attaquant est formaté comme mot de passe de hachage NTLM et n'est pas présenté en texte clair. Après avoir déployé la clé squelette, l'attaquant peut s'authentifier comme n'importe quel utilisateur à l'aide du hachage de mot de passe NTLM: psexec -accepteula \\% TARGET-DC% rundll32 < DLL> ii < NTLM> configuré NTLM: psexec -accepteula \\% TARGET-DC% rundll32 < DLL> ii < NTLM>
  5. Supprimez le fichier DLL de clé squelette de C: \ WINDOWS \ system32 \ sur les contrôleurs de domaine cible.
  6. Supprimez le fichier DLL de clé squelette du répertoire intermédiaire sur l'hôte de transition.
  7. Testez le déploiement réussi de la clé squelette à l'aide des commandes «net use» avec un compte AD et un mot de passe correspondant au hachage NTLM configuré.

Les chercheurs de la CTU ont découvert un modèle de mot de passe intégré qui suggère qu'un groupe d'attaquants a déployé la clé squelette dans plusieurs organisations.

L'utilisation de PsExec peut être détectée dans un environnement Windows en alertant sur les événements Windows générés par l'utilitaire. Les identificateurs d'événement suivants, qui sont observés sur les contrôleurs de domaine cible, enregistrent l'outil PsExec qui installe son service, démarre le service et arrête le service. Ces événements sont générés à chaque utilisation de PsExec, une analyse supplémentaire des événements est donc nécessaire pour déterminer s'ils sont malveillants ou légitimes:

  • Événements d'installation de service PSEXESVC inattendus (code d'événement 7045) sur les contrôleurs de domaine AD:

    Nom du journal : système
    Source : Service Control Manager
    Résumé : un service est installé sur le système.
    Nom du fichier de service :
    %SystemRoot%\PSEXESVC.exe
  • Événements de démarrage / arrêt du service PSEXESVC inattendus (code d'événement 7036) sur les contrôleurs de domaine AD:

    Nom du journal : système
    Source : Service Control Manager
    Résumé :
    • «Le service PSEXESVC est opérationnel.»
    • "Le service PSEXESVC est passé à un état arrêté."

En tant que clé squelette dans un état en cours d'exécution, vous devez effectuer les tâches suivantes:

  1. Recherchez l'une des versions 64 bits compatibles suivantes de Windows. Le malware n'est pas compatible avec les versions 32 bits de Windows ou les versions de Windows Server à partir de Windows Server 2012 (6.2).

    • 6.1 (Windows 2008 R2)
    • 6.0 (Windows Server 2008)
    • 5.2 (Windows 2003 R2)
  2. Utilisez la fonction SeDebugPrivilege pour obtenir les droits d'administrateur nécessaires pour écrire dans le processus de service du sous-système de sécurité local (LSASS). Ce processus contrôle les fonctionnalités de sécurité du domaine AD, y compris l'authentification des comptes d'utilisateurs.
  3. Répertoriez les processus disponibles pour obtenir le descripteur de processus LSASS.
  4. Obtenez des adresses pour les fonctions liées à l'authentification qui seront corrigées:

    • CDLocateCSystem - situé dans cryptdll.dll
    • SamIRetrieveMultiplePrimaryCredentials - situé dans samsrv.dll
    • SamIRetrievePrimaryCredentials - situé dans samsrv.dll
  5. Définissez les paramètres du système d'exploitation spécifique à l'aide de la variable globale définie lors de la vérification de compatibilité à l'étape 1.
  6. Utilisez la fonction OpenProcess pour obtenir le descripteur de processus LSASS.
  7. Réservez et allouez l'espace mémoire nécessaire pour éditer et patcher la mémoire du processus LSASS.
  8. Application de correctifs aux fonctions basées sur le système d'exploitation:

    • CDLocateCSystem (toutes les versions compatibles de Windows)
    • SamIRetrieveMultiplePrimaryCredentials (Windows 2008 R2 (6.1) uniquement)
    • SamIRetrievePrimaryCredentials (toutes les versions compatibles de Windows sauf Windows 2008 R2 (6.1))

Pour corriger chaque fonction:

  1. Appelez la fonction VirtualProtectEx pour modifier la protection de la mémoire pour permettre l'écriture dans les allocations de mémoire requises (PAGE_EXECUTE_READWRITE, 0x40). Cette étape vous permet de mettre à jour le code de fonction en mémoire.
  2. Appelez la fonction WriteProcessMemory pour modifier l'adresse de la fonction cible afin qu'elle pointe vers le code corrigé. Cette modification oblige l'appel de fonction à utiliser le correctif.
  3. Restaurez la protection de la mémoire d'origine en appelant VirtualProtectEx avec les indicateurs de protection de la mémoire d'origine. Cette étape est nécessaire pour éviter une allocation suspecte de mémoire pour l'enregistrement et l'exécution.

Après l'application de correctifs, un attaquant peut utiliser le mot de passe Skeleton Key configuré lors du déploiement pour se connecter en tant qu'utilisateur de domaine. Les utilisateurs légitimes peuvent toujours se connecter en utilisant leurs propres mots de passe. Ce contournement d'authentification s'applique à tous les services qui utilisent l'authentification à facteur unique AD, tels que la messagerie Web et le VPN, et permet également à un attaquant disposant d'un accès physique à un système compromis de déverrouiller un ordinateur en entrant un mot de passe intégré sur le clavier.

Association possible avec des problèmes de réplication de domaine


Le code malveillant Skeleton Key ne transmet pas le trafic réseau, ce qui rend la découverte basée sur le réseau inefficace. Cependant, ce malware a été impliqué dans des problèmes de réplication de domaine qui pourraient indiquer une infection. Peu de temps après chaque déploiement du logiciel malveillant Skeleton Key détecté par les chercheurs de la CTU, les contrôleurs de domaine ont rencontré des problèmes de réplication qui n'ont pas pu être expliqués ou résolus par le support Microsoft, et un redémarrage a finalement été nécessaire pour les résoudre. Ces redémarrages ont supprimé le contournement de l'authentification par clé squelette car le logiciel malveillant n'a pas de mécanisme de persistance. Dans la fig. La figure 1 montre la chronologie de ces redémarrages, ainsi que le vol subséquent de mots de passe par des intrus, l'expansion latérale et le déploiement de la clé squelette. Les réinstallations ont généralement eu lieu quelques heures ou plusieurs jours après un redémarrage.


Figure 1. Relation de déploiement et de redémarrage observée par les chercheurs de la CTU, avril - juillet 2014 (Source: Dell SecureWorks)

Contre-mesures


Un code malveillant Skeleton Key contourne l'authentification et ne génère pas de trafic réseau. Par conséquent, les systèmes de détection et de prévention des intrusions sur le réseau (IDS / IPS) ne détecteront pas cette menace. Cependant, les chercheurs de la CTU ont noté les signatures YARA dans l' annexe A pour découvrir la DLL de clé squelette et le code qu'elle entre dans la mémoire du processus LSASS.

Indicateurs de menace


Les indicateurs de menace du tableau 3 peuvent être utilisés pour détecter l'activité liée aux logiciels malveillants Skeleton Key.

indicateurtypecontexte
66da7ed621149975f6e643b4f9886cfdhachage md5patch de clé squelette msuta64.dll
ad61e8daeeba43e442514b177a1b41ad4b7c6727sha1 hashpatch de clé squelette msuta64.dll
bf45086e6334f647fda33576e2a05826hachage md5patch clé squelette ole64.dl
5083b17ccc50dd0557dfc544f84e2ab55d6acd92sha1 hashpatch clé squelette ole64.dl

Tableau 3. Indicateurs pour la clé squelette.

Conclusion


Le CTU Research Group recommande aux organisations de mettre en œuvre les fonctionnalités de sécurité Skeleton Key suivantes:

  • L'authentification multifacteur pour toutes les solutions d'accès à distance, y compris le VPN et le courrier électronique distant, ne permet pas aux acteurs de la menace de contourner l'authentification ou l'authentification à facteur unique en utilisant des informations d'identification statiques volées.
  • Un journal d'audit de création de processus sur les postes de travail et les serveurs, y compris les contrôleurs de domaine AD, peut détecter les déploiements de clé squelette. En particulier, les organisations doivent rechercher les artefacts suivants:

    • Processus PsExec.exe inattendus et utilisation de l'argument de ligne de commande PsExec "-accepteula"
    • Processus rundll32.exe inattendus
    • Gérer les arguments similaires aux codes de hachage NTLM (32 caractères contenant des chiffres de 0 à 9 et des caractères AF)
  • La surveillance des événements du Gestionnaire de services Windows sur les contrôleurs de domaine AD peut détecter des événements d'installation de service inattendus (code d'événement 7045) et des événements de démarrage / arrêt (code d'événement 7036) pour le service PSEXESVC PsExec.

Annexe A - Signatures YARA


Les signatures YARA suivantes détectent la présence d'une clé squelette dans le système en analysant un fichier suspect ou un vidage de mémoire des contrôleurs de domaine Active Directory, contenant probablement la clé squelette.

 rule skeleton_key_patcher { strings: $target_process = "lsass.exe" wide $dll1 = "cryptdll.dll" $dll2 = "samsrv.dll" $name = "HookDC.dll" $patched1 = "CDLocateCSystem" $patched2 = "SamIRetrievePrimaryCredentials" $patched3 = "SamIRetrieveMultiplePrimaryCredentials" condition: all of them } rule skeleton_key_injected_code { strings: $injected = { 33 C0 85 C9 0F 95 C0 48 8B 8C 24 40 01 00 00 48 33 CC E8 4D 02 00 00 48 81 C4 58 01 00 00 C3 } $patch_CDLocateCSystem = { 48 89 5C 24 08 48 89 74 24 10 57 48 83 EC 20 48 8B FA 8B F1 E8 ?? ?? ?? ?? 48 8B D7 8B CE 48 8B D8 FF 50 10 44 8B D8 85 C0 0F 88 A5 00 00 00 48 85 FF 0F 84 9C 00 00 00 83 FE 17 0F 85 93 00 00 00 48 8B 07 48 85 C0 0F 84 84 00 00 00 48 83 BB 48 01 00 00 00 75 73 48 89 83 48 01 00 00 33 D2 } $patch_SamIRetrievePrimaryCredential = { 48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 20 49 8B F9 49 8B F0 48 8B DA 48 8B E9 48 85 D2 74 2A 48 8B 42 08 48 85 C0 74 21 66 83 3A 26 75 1B 66 83 38 4B 75 15 66 83 78 0E 73 75 0E 66 83 78 1E 4B 75 07 B8 A1 02 00 C0 EB 14 E8 ?? ?? ?? ?? 4C 8B CF 4C 8B C6 48 8B D3 48 8B CD FF 50 18 48 8B 5C 24 30 48 8B 6C 24 38 48 8B 74 24 40 48 83 C4 20 5F C3 } $patch_SamIRetrieveMultiplePrimaryCredential = { 48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 20 41 8B F9 49 8B D8 8B F2 8B E9 4D 85 C0 74 2B 49 8B 40 08 48 85 C0 74 22 66 41 83 38 26 75 1B 66 83 38 4B 75 15 66 83 78 0E 73 75 0E 66 83 78 1E 4B 75 07 B8 A1 02 00 C0 EB 12 E8 ?? ?? ?? ?? 44 8B CF 4C 8B C3 8B D6 8B CD FF 50 20 48 8B 5C 24 30 48 8B 6C 24 38 48 8B 74 24 40 48 83 C4 20 5F C3 } condition: any of them } 

Source: https://habr.com/ru/post/fr481778/


All Articles