Chapardeur de mots de passe
ĂnoncĂ© :
Un ami vous demande de l'aide pour déterminer si l'email qu'il vient d'ouvrir au sujet du Covid-19 était malveillant et si c'était le cas, ce qu'il risque.
Il prĂ©tend avoir essayĂ© d'ouvrir le fichier joint Ă cet mail sans y parvenir. Peu de temps aprĂšs, une fenĂȘtre liĂ©e Ă l'anti-virus a indiquĂ©, entre autre, le mot KPOT v2.0 mais rien d'apparent n'est arrivĂ© en dehors de cela.
AprÚs une analyse préliminaire, votre ami vous informe qu'il est probable que ce malware ait été légÚrement modifié, étant donné que le contenu potentiellement exfiltré (des parties du format de texte et de fichier avant chiffrement) ne semble plus prédictible. Il vous recommande donc de chercher d'autres éléments pour parvenir à l'aider.
Vous disposez d'une capture réseau de son trafic pour l'aider à déterminer si des données ont bien été volées et lui dire s'il doit rapidement changer ses mots de passe !
Ătape 1 - Recherche sur le malware
Pour commencer, nous téléchargeons la capture de trames de ~500Mo. Cela nous laisse le temps de chercher quelques informations sur le malware KPOT v2.0.
Je tombe sur 2 sites :
https://www.proofpoint.com/us/threat-insight/post/new-kpot-v20-stealer-brings-zero-persistence-and-memory-features-silently-steal
https://labs.sentinelone.com/info-stealers-how-malware-hacks-private-user-data/
On apprend que le malware contamine les victimes généralement par des attaques phishing à partir de la piÚce jointe. Kpot utilise http pour agßr, il communique avec un serveur distant pour l'informer de l'infection d'un poste.
Il envoie une requĂȘte GET Ă destination d'un serveur de ce type: http://lesitemalveillant.ru/lmpUNlwDfoybeulu/gate.php
La réponse du serveur est encodé en base64 et XOR'd avec une clé stocké sous forme de chaßne. Voici un exemple d'échantillon déja analysé :
Les données contenu dans cette réponse sont délimitées par "DELIMM" et sont réparties selon le type de données suivant :
Une chaßne de bit indiquant les commandes à éxécuter
L'adresse ip de la victime
Les rÚgles GRABBER précisant les fichiers à rechercher et exfiltrer
Le premier composant de la réponse ci dessus est une chaßne de 16 bits. Chaque 1 active une fonctionnalité, 0 la désactive. Voici une liste de quelques fonctionnalités :
Voler les cookies, les mots de passe de Chrome
Voler les cookies, les mots de passe de Firefox
Voler les cookies, les mot de passe d'Internet Explorer
Voler les comptes Skype
Voler les comptes de Télégram
Voler des comptes Discord
Volez les comptes Steam
Prendre une capture d'Ă©cran
Voler divers comptes clients FTP
Se supprimer lui mĂȘme
Récupérer un fichier en fonction de son extension, sa taille, son path
Enfin ! La capture de trames est téléchargé. Maintenant que nous avons une vision sur le fonctionnement général du malware, commençons à l'analyser !
Ătape 2 - La communication post-infection
Vu le contexte du challenge, je commence par chercher des trames en rapport avec la piÚce jointe télécharger par notre ami, mais RAS.
Je passe donc Ă la recherche de la requĂȘte GET envoyĂ© au serveur malveillant sur le fichier ciblĂ© "gate.php".
On tombe sur 4 requĂȘtes, voyons voir la quelle Ă rĂ©pondu par OK Ă cette demande !
Le serveur en 203.0.113.42 a l'air d'ĂȘtre le bon candidat.
Récupérons le contenu de sa réponse :
D'aprÚs la documentation sur le malware, les données ont été encodé en base64 puis XOR'd à l'aide d'une clé, cependant nous n'avons pas cette clé...
Ătape 3 - La clĂ© XOR
Quelques types d'attaques sont connues avec XOR :
plaintext â key = encrypted_text
encrypted_text â plaintext = key
encrypted_text â key = plaintext
Ici nous avons des données chiffrées, pas de clé, mais nous connaissons les potentiels données qui pourraient se trouver à l'intérieur (GRABBER, DELIM etc...).
AprÚs quelque recherche je trouve un tool capable de gérer cette attaque :
https://blog.didierstevens.com/2017/06/06/update-xor-kpa-py-version-0-0-5/.
La description de son fonctionnement est ici :
https://isc.sans.edu/forums/diary/Malware+and+XOR+Part+1/22486/
https://isc.sans.edu/forums/diary/Malware+and+XOR+Part+2/22490/
Il ne reste plus qu'Ă tester !
L'outil xor-kpa.py prend 2 fichiers en entrée :
Le premier fichier contient le texte en clair, et le second le fichier encodé.
Dans son exemple, Monsieur Didier Stevens recherche la chaßne "This program cannot be run in DOS mode" contenu généralement dans les éxécutables.
Son programme est d'ailleurs adaptés pour travailler avec cette chaßne, mais nous cela ne nous intéresse pas.
Notre texte en clair est composé de :
Prenons un Ă©chantillon !
Je décide de modifier le script xor-kpa.py :
Je remplace This program cannot be run in DOS mode
par GRABBER__0__GRABBER__1024
Le script ne prend pas en compte l'encodage base64, je décode donc la chaßne
Je lance le script en indiquant que nous recherchons le plaintext contenu dans la variable dos dans le contenu du fichier cipher.txt
Nous voilà maintenant avec 3 clés !
D'aprÚs les deux sites que l'on a vu au début expliquant le fonctionnement du malware, la clé fait généralement 16 bits, oh ! comme la derniÚre :)
La clĂ© XOR serait donc : tDlsdL5dv25c1Rhv đ
Nous retrouvons donc bien le texte en clair en utilisant cette clé :
Maintenant analysons la requĂȘte POST envoyĂ© au serveur, cette requĂȘte exfiltre les donnĂ©es en utilisant la clĂ© XOR.
Nous récupérons le résultat en hexa :
MĂȘme manipulation que toute Ă l'heure pour dĂ©chiffrer les donnĂ©es
DerniĂšre mise Ă jour