Scénario#
Simon Stark est un dĂ©veloppeur chez forela qui a rĂ©cemment prĂ©vu de diffuser des sessions de programmation avec ses collĂšgues, ce qui lui a valu l’apprĂ©ciation du PDG et d’autres collĂšgues. Il a installĂ© sans le savoir un logiciel de streaming bien connu qu’il a trouvĂ© par le biais d’une recherche sur Google et qui Ă©tait l’une des principales URL promues par les publicitĂ©s de Google. Malheureusement, les choses ont mal tournĂ© et un incident de sĂ©curitĂ© s’est produit. Analysez les artefacts triĂ©s fournis pour dĂ©couvrir ce qui s’est passĂ© exactement.
Attack Flow Diagram - Schéma global#
Pour un rapide overview du challenge voici l’attack flow diagram que j’ai rĂ©alisĂ©, si vous ne voulez pas vous spoil vous pouvez le sauter :
Setup#
Pour ce Sherlock nous allons utiliser :
- Eric Zimmerman’s Tools (Registry Explorer, EvtxECmd, MFTECmd TimeLine Explorer, PECmd…)
- HxD Hex Editor
- strings
Pour nous aider on va aussi s’appuyer sur des Cheatsheets tels que :
- https://cdn.13cubed.com/downloads/windows_event_log_cheat_sheet.pdf
- https://cdn.13cubed.com/downloads/windows_registry_cheat_sheet.pdf
- https://cdn.13cubed.com/downloads/anatomy_of_an_ntfs_file_record.pdf
Question 1#
Quel est le nom original du fichier zip malveillant que l’utilisateur a tĂ©lĂ©chargĂ© en pensant qu’il s’agissait d’une copie lĂ©gitime du logiciel ?
Pour rĂ©pondre Ă cette question nous allons chercher dans la hive utilisateur NTUSER.DAT. En effet, c’est ici que sont enregistrĂ©es, dans la clĂ© RecentDocs, les fichiers rĂ©cemment ouverts par lâutilisateur.
Réponse : OBS-Studio-28.1.2-Full-Installer-x64.zip
Question 2#
Simon Stark a renommĂ© le fichier zip tĂ©lĂ©chargĂ© en un autre nom. Quel est le nom renommĂ© du fichier ainsi que le chemin d’accĂšs complet ?
Pour rĂ©pondre Ă cette question, il faut dâabord comprendre que toute opĂ©ration de renommage sous NTFS (le filesystem de Windows) gĂ©nĂšre une modification du $FILE_NAME (attribut 0x30) dans la MFT.
On utilise donc MFTECmd pour parser la $MFT :
MFTECmd.exe -f "C:\$MFT" --csv "C:\Temp\Out"
Puis on l’importe dans Timeline Explorer :
Réponse : C:\Users\Simon.stark\Documents\Streaming Software\Obs Streaming Software.zip
Question 3#
Quelle est l’heure Ă laquelle le fichier a Ă©tĂ© renommĂ© ?
Toujours au mĂȘme endroit :
Réponse : 2023-05-05 10:22:23
Question 4#
Quelle est l’URL complĂšte Ă partir de laquelle le logiciel a Ă©tĂ© tĂ©lĂ©chargĂ© ?
Toujours au mĂȘme endroit :
Le fait de télécharger un fichier sous Windows (via un navigateur comme Edge ou Internet Explorer) crée automatiquement, sur le NTFS, un flux de données auxiliaire nommé Zone.Identifier.
Ce flux ADS (âAlternate Data Streamâ) est stockĂ© avec le fichier lui-mĂȘme et contient notamment :
- ZoneId : la zone de sécurité (3 = internet)
- ReferrerUrl : lâURL de la page qui a lancĂ© le tĂ©lĂ©chargement
- HostUrl : lâURL exacte du fichier tĂ©lĂ©chargĂ©
Réponse : http://obsproicet.net/download/v28_23/OBS-Studio-28.1.2-Full-Installer-x64.zip
Question 5#
Approfondissez vos recherches et trouvez l’adresse IP sur laquelle le domaine malveillant Ă©tait hĂ©bergĂ©.
Ici trĂšs simple, on parse avec EvtxECmd les event logs et on cherche le nom de domaine :
EvtxECmd.exe -d 'C:\Windows\System32\winevt\Logs\' --csv 'C:\Temp\out'
Réponse : 13.232.96.186
Question 6#
Plusieurs ports sources sont connectĂ©s pour communiquer et tĂ©lĂ©charger le fichier malveillant Ă partir du site web malveillant. RĂ©pondez au numĂ©ro de port source le plus Ă©levĂ© Ă partir duquel la machine s’est connectĂ©e au site web malveillant.
Sur Windows si le pare-feu est configurĂ© pour loggĂ© les connexions, il va enregistrer chaque tentative dâaccĂšs, non pas sous forme de nom de domaine, mais sous la forme de lâIP cible.
Le fichier pfirewall.log (C:\Windows\System32\LogFiles\Firewall) enregistre, pour chaque paquet examiné :
- la date et lâheure,
- lâaction (par exemple âALLOWâ ou âDROPâ),
- le protocole (TCP/UDP),
- lâadresse IP source,
- lâadresse IP de destination,
- les ports source et destination etc.
Ici seulement 6 connexions Ă cette IP donc pas la peine de s’embĂȘter, on peut le trouver manuellement en 5 secondes :
Réponse : 50045
Question 7#
Le fichier zip contenait un fichier d’installation malveillant qui installait un logiciel malveillant et une instance lĂ©gitime du logiciel OBS studio, de sorte que l’utilisateur n’avait aucune idĂ©e qu’il avait Ă©tĂ© compromis. Trouvez le hachage du fichier d’installation.
Pour rĂ©pondre Ă cette question on va chercher du cĂŽtĂ© de la hive Amcache. Elle recense tous les exĂ©cutables lorsquâils sont lancĂ©s, installĂ©s, copiĂ©s, etc. Elle stocke pour chaque application plusieurs metadata : chemin complet, date dâapparition, et notamment le hash SHA1 du binaire.
ConcrĂštement, au moment oĂč lâutilisateur a extrait le zip et que le setup malveillant a Ă©tĂ© exĂ©cutĂ© (ou mĂȘme simplement ouvert en soit), Windows a ajoutĂ© une entrĂ©e dans la clĂ© :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\AppModel\InventoryApplicationFile
(correspondant Ă Amcache\InventoryApplicationFile dans le hive Amcache.hve)
Si nous avions eu une copie du disque complĂšte, on aurait pu calculer le hash Ă la volĂ©e pour aller plus rapidement. NĂ©anmoins, c’est une mauvaise idĂ©e.
Contrairement au simple hash calculĂ© Ă la volĂ©e, Amcache enregistre le SHA1 dĂšs la premiĂšre exĂ©cution ou extraction dans le systĂšme local, indĂ©pendamment de toute modification ultĂ©rieure (Ă moins que lâentrĂ©e Amcache soit explicitement Ă©ditĂ© / supprimĂ©).
MĂȘme si lâutilisateur a effacĂ© le zip ou renommĂ© le setup, Amcache conserve cette ancienne trace tant que le fichier nâest pas rĂ©installĂ© ou que lâentrĂ©e nâest pas nettoyĂ©e.
Réponse : 35e3582a9ed14f8a4bb81fd6aca3f0009c78a3a1
Question 8#
Le logiciel malveillant a installĂ© automatiquement une porte dĂ©robĂ©e sur le poste de travail de la victime. Quels sont le nom et le chemin d’accĂšs au fichier de la porte dĂ©robĂ©e ?
Retournons à la $MFT car elle enregistre chaque création et exécution de fichier.
Pour procĂ©der j’ai simplement chercher un lien temporel avec l’exĂ©cution du setup malveillant :
- je savais quâĂ lâinstant T0 (2023-05-05 10:23:14), lâutilisateur a lancĂ© le setup malveillant
- quelques secondes plus tard (T0 + quelques secondes) apparaßt dans la chronologie une nouvelle entrée :
C:\Program Files\Miloyeki ker konoyogi\lat takewode libigax weloj jihi quimodo datex dob cijoyi mawiropo.exe
- comme il nâexistait pas avant (aucune entrĂ©e antĂ©rieure dans le $MFT pour ce chemin), on en dĂ©duit que câest ce fichier quâa créé le setup malveillant.
Réponse : C:\Users\Simon.stark\Miloyeki ker konoyogi\lat takewode libigax weloj jihi quimodo datex dob cijoyi mawiropo.exe
Question 9#
Trouver le “prefetch hash” de la backdoor.
Lorsque qu’on exĂ©cute un programme sous Windows, le systĂšme enregistre un fichier .pf (prefetch) dans C:\Windows\Prefetch dont le nom combine :
- Le nom de lâexĂ©cutable (
LAT TAKEWODEâŠ.exe
) - Un hash calculé à partir de son chemin complet sur le disque
Ce hash nâest pas alĂ©atoire, Windows le gĂ©nĂšre pour distinguer plusieurs instances du mĂȘme exĂ©cutable si elles rĂ©sident Ă des chemins diffĂ©rents.
.\PECmd.exe -d 'C:\Windows\prefetch' --csv 'C:\Temp\Out'
Réponse : D8A6D943
Question 10#
La backdoor est Ă©galement utilisĂ©e comme mĂ©canisme de persistance de maniĂšre furtive pour se fondre dans l’environnement. Quel est le nom utilisĂ© pour le mĂ©canisme de persistance afin qu’il ait l’air lĂ©gal ?
Les mécanismes de persistance les plus couramment mis en oeuvre sont :
- Clés de registre Run / RunOnce
- Service Windows
- Tùches planifiées
- Dossier de démarrage (dossier Startup) etc.
Ici, il repose sur la crĂ©ation dâune tĂąche planifiĂ©e dont le nom imite un processus systĂšme COMSurrogate. Quand Windows crĂ©e ou modifie une tĂąche planifiĂ©e, un Ă©vĂ©nement ID 4698 (âA scheduled task was createdâ) est enregistrĂ© dans le journal de sĂ©curitĂ© (Security.evtx).
.\EvtxECmd.exe -d 'C:\Windows\System32\winevt\Logs\' --csv 'C:\Temp\Out\'
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2023-05-05T15:23:21</Date>
<Author>FORELA\simon.stark</Author>
<URI>\COMSurrogate</URI>
</RegistrationInfo>
<Triggers>
<LogonTrigger>
<StartBoundary>2023-05-05T15:23:00</StartBoundary>
<Enabled>true</Enabled>
</LogonTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<RunLevel>HighestAvailable</RunLevel>
<UserId>FORELA\simon.stark</UserId>
<LogonType>InteractiveToken</LogonType>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<Duration>PT10M</Duration>
<WaitTimeout>PT1H</WaitTimeout>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT72H</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>C:\Users\Simon.stark\Miloyeki</Command>
<Arguments>ker konoyogi\lat takewode libigax weloj jihi quimodo datex dob cijoyi mawiropo.exe</Arguments>
</Exec>
</Actions>
</Task>
Réponse : COMSurrogate
Question 11#
Quel est le domaine erronĂ©/invalide nommĂ© de maniĂšre alĂ©atoire que le logiciel malveillant a tentĂ© d’atteindre ?
Puisque la tĂąche planifiĂ©e a Ă©tĂ© créée Ă 10:23:21, on se place autour de cet horaire dans le channel Microsoft-Windows-DNS-Client/Operational pour repĂ©rer le domaine “invalide” que le malware a tentĂ© de rĂ©soudre.
Réponse : oaueeewy3pdy31g3kpqorpc4e.qopgwwytep
Question 12#
Le logiciel malveillant a essayĂ© d’exfiltrer les donnĂ©es vers un seau s3. Quelle est l’url du seau s3 ?
Idem mais on filtre avec “s3” :
Réponse : bbuseruploads.s3.amazonaws.com
Question 13#
Sur quel sujet Simon allait-il faire un stream en semaine 1 ? Trouvez une note ou quelque chose de similaire et récupérez son contenu pour répondre à la question.
On retrouve dans les fichiers rĂ©cents de l’utilisateur un shortcut vers le fichier “Week 1 plan.txt”. Mais aucune trace du fichier car on n’a pas la copie du dossier en question.
On va donc analyser la $MFT. Comme on l’a dĂ©jĂ vu, chaque fichier mĂȘme s’il a Ă©tĂ© effacĂ© ou dĂ©placĂ© possĂšde une entrĂ©e dans la MFT et on va pouvoir retrouver la “resident data” :
- Non-resident : pour les fichiers de taille suffisante, NTFS ne stocke pas directement leurs données dans la MFT. Le champ
$DATA
contient alors des ârunsâ (des blocs) qui pointent vers des clusters sur le disque oĂč le contenu rĂ©el est stockĂ©. - Resident : quand que le fichier est trĂšs petit (historiquement : moins de 1 KB ou de lâordre de quelques centaines dâoctets, selon la version de Windows et la taille de lâattribut), ses donnĂ©es sont stockĂ©es directement Ă lâintĂ©rieur mĂȘme de lâentrĂ©e MFT, dans le bloc
$DATA
. On parle alors de resident data.
âââââââââââââââââŹââââââââââââââââââââââââââââââââââŹââââââââââââââââââââââ
â MFT Header â Attribut #0 (STANDARD_INFO) â ... â
â (48 bytesâŠ) ââââââââââââââââââââââââââââââââââ†â
â â Attribut #1 (FILE_NAME)â â â
â ââââââââââââââââââââââââââââââââââ†â
â â Attribut #2 (DATA, resident) â <â câest lĂ quâest â
â â â stockĂ© le texte. â
â âââââââââââââââââââââââââââââââââââŽââââââââââââââââââââââ
â ...... â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
cf. https://youtu.be/B4b6Ocf3wYs?si=rUruujZiEIdjgFKD
Réponse : Filesystem Security
Question 14#
Quel est le nom de l’analyste de sĂ©curitĂ© qui a triĂ© le poste de travail infectĂ© ?
Un peu de guess car la question n’est pas trĂšs intĂ©ressante, si vous avez fait pas mal de Sherlock vous commencez Ă avoir l’habitude c’est CyberJunkie.
Réponse : CyberJunkie
Question 15#
Quel est le chemin d’accĂšs au rĂ©seau Ă partir duquel les outils d’acquisition ont Ă©tĂ© exĂ©cutĂ©s ?
PremiÚrement nous devons trouver le tool utilisé. Pour cela, plusieurs méthodes :
- vérifier les fichiers LNK & Jump Lists
- Event ID 4688 (A new process has been created)
- AmCache (InventoryApplicationFile)
- $MFT comme on l’a vu plus tĂŽt
- Les fichiers Prefetch
Pour le plus de rapiditĂ© j’ai dĂ©cidĂ© de passer via les fichiers prefetch. Logiquement le tool d’acquisition a Ă©tĂ© lancĂ© le plus rĂ©cemment possible :
Néanmoins pas de chemin.
Du coup, je vérifie dans :
- AppCompatCache : RAS
- Event ID 4688 : RAS
- $MFT : RAS
Je vais donc chercher du cĂŽtĂ© du NTUSER.DAT mais RAS aussi… NĂ©anmoins on voit bien qu’on a ntuser.dat.LOG1 et LOG2.
Ce sont des journaux de transactions associé à la ruche de registre utilisateur (NTUSER.DAT).
Chaque modification apportĂ©e aux clĂ©s et valeurs du registre (par exemple, lorsquâun chemin rĂ©seau est ajoutĂ© dans un MRU ou un clĂ© UserAssist) est dâabord Ă©crite dans ce journal avant dâĂȘtre intĂ©grĂ©e (âcommittĂ©e") dans NTUSER.DAT lui-mĂȘme. ConcrĂštement :
- câest le log transactionnel de la ruche utilisateur : Ă chaque fois quâune application ou Windows Ă©crit quelque chose dans HKCU (RunMRU, UserAssist, RecentDocs, etc.), la modification est dâabord consignĂ©es dans NTUSER.DAT.LOG1 (et LOG2), puis fusionnĂ©e dans NTUSER.DAT Ă un checkpoint
- si on ferme brutalement la session ou quâaucun âcheckpointâ nâa encore eu lieu, NTUSER.DAT.LOG1 peut contenir des entrĂ©es qui nâapparaissent pas encore dans NTUSER.DAT
Je lance donc une recherche via string et bingo :
Réponse : \\DESKTOP-887GK2L\Users\CyberJunkie\Desktop\Forela-Triage-Workstation\Acquisiton and Triage tools
IOC Table#
Catégorie | Type / Champ | Valeur (indicateur) | Notes | Hash |
---|---|---|---|---|
Fichiers (origine) | Nom ZIP original | OBS-Studio-28.1.2-Full-Installer-x64.zip | NTUSER.DAT âž RecentDocs | RAS (pas le fichier) |
Setup malveillant | OBS Studio 28.1.2 Full Installer x64.exe | Amcache âž InventoryApplicationFile | SHA-1 = 35e3582a9ed14f8a4bb81fd6aca3f0009c78a3a1 | |
Backdoor EXE | C:\Users\Simon.stark\Miloyeki ker konoyogi\lat takewode libigax weloj jihi quimodo datex dob cijoyi mawiropo.exe | $MFT | RAS (pas le fichier) | |
Réseau | Domain | obsproicet.net | ADS Zone.Identifier | |
URL exacte | http://obsproicet.net/download/v28_23/OBS-Studio-28.1.2-Full-Installer-x64.zip | ADS Zone.Identifier | ||
IP serveur | 13.232.96.186 | pfirewall.log | ||
Port source max | 50045 (TCP) | pfirewall.log | ||
Domain invalide | oaueeewy3pdy31g3kpqorpc4e.qopgwwytep | DNS-Client Operational | ||
Bucket S3 exfil | bbuseruploads.s3.amazonaws.com | DNS-Client Operational | ||
Persistance | Scheduled Task Name | \COMSurrogate | Security.evtx (4698) | |
Prefetch hash | D8A6D943 | Nom du .pf |
Lab terminé !
https://labs.hackthebox.com/achievement/sherlock/1271052/899