Aller au contenu

Streamer

·10 mins· loading · loading · ·
HackTheBox Sherlock Hard Windows Writeup
Sommaire

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 :

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.

Recent Docs

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 :

Recent Docs

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 :

Recent Docs

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 :

Recent Docs

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'

Recent Docs

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 :

Recent Docs

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)

Recent Docs

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.

Recent Docs

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 :

  1. Le nom de l’exĂ©cutable (LAT TAKEWODE
.exe)
  2. 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'

Recent Docs

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\'

Recent Docs

Recent Docs

<?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.

Recent Docs

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” :

Recent Docs

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.

Recent Docs

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” :

Recent Docs

  • 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

Recent Docs

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.

Recent Docs

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 :

Recent Docs

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 :

Recent Docs

Réponse : \\DESKTOP-887GK2L\Users\CyberJunkie\Desktop\Forela-Triage-Workstation\Acquisiton and Triage tools


IOC Table
#

CatégorieType / ChampValeur (indicateur)NotesHash
Fichiers (origine)Nom ZIP originalOBS-Studio-28.1.2-Full-Installer-x64.zipNTUSER.DAT ▾ RecentDocsRAS (pas le fichier)
Setup malveillantOBS Studio 28.1.2 Full Installer x64.exeAmcache ▾ InventoryApplicationFileSHA-1 = 35e3582a9ed14f8a4bb81fd6aca3f0009c78a3a1
Backdoor EXEC:\Users\Simon.stark\Miloyeki ker konoyogi\lat takewode libigax weloj jihi quimodo datex dob cijoyi mawiropo.exe$MFTRAS (pas le fichier)
RéseauDomainobsproicet.netADS Zone.Identifier
URL exactehttp://obsproicet.net/download/v28_23/OBS-Studio-28.1.2-Full-Installer-x64.zipADS Zone.Identifier
IP serveur13.232.96.186pfirewall.log
Port source max50045 (TCP)pfirewall.log
Domain invalideoaueeewy3pdy31g3kpqorpc4e.qopgwwytepDNS-Client Operational
Bucket S3 exfilbbuseruploads.s3.amazonaws.comDNS-Client Operational
PersistanceScheduled Task Name\COMSurrogateSecurity.evtx (4698)
Prefetch hashD8A6D943Nom du .pf

Lab terminé !

https://labs.hackthebox.com/achievement/sherlock/1271052/899