DFIR-ORC, un outil de collecte d'artefacts utilisé en mission de réponse à incidents
DFIR-ORC (pour Digital Forensics and Incident Response - Outil de Recherche de Compromission) est un outil développé par l'ANSSI en 2011. Il permet la recherche et l'extraction de données forensiques dans un environnement Windows. Cet outil a été rendu open-source en fin d'année 2019 pour permettre son emploi ainsi que son développement dans le monde de la sécurité informatique. Nous vous proposons dans cet article de revenir sur cet outil que nous utilisons dans nos missions de réponse à incident, dans le processus de l'analyse forensique.
DFIR-ORC : pourquoi ?
DFIR-ORC est un framework configurable qui permet de faciliter la récolte d'informations ou artéfacts sur un environnement Windows, voire sur l'intégralité d'un parc de machines Windows, sans altérer la configuration des machines analysées. Cependant, il ne permet pas l'analyse des artefacts mais seulement leur extraction. Cela permet de faciliter et accélérer le travail des professionnels lors d'un incident de sécurité.
Ainsi, DFIR-ORC permet d'industrialiser l'export des données de nombreux postes Windows. Il est cependant important de noter que l'utilisation de DFIR-ORC peut altérer la mémoire, notamment les fichiers liés à l'exécution ou à l'ajout de programmes. Il doit être utilisé ainsi en connaissance de cause.
DFIR-ORC : configuration
Après l'installation, des exécutables 32 et 64 bits sont disponibles ; il s'agit de binaires non configurés. En effet, DFIR-ORC fonctionne à l'aide de binaires qui peuvent être configurés ou non. Il est possible d'exécuter des commandes simples avec un binaire ORC non configuré, mais il est préférable de le configurer pour des extractions plus complètes et complexes.
Pour configurer un binaire ORC, il est nécessaire de posséder des fichiers de configuration au format XML. Ces fichiers de configuration sont au nombre minimum de deux :
- Une configuration WolfLauncher qui définit les commandes à exécuter et leur résultat (fichier log, csv, 7z...)
- Une configuration embarquée (Embed configuration) qui spécifie comment les fichiers de configuration s'organisent
Ensuite, il est possible d'ajouter des fichiers de configuration pour spécifier une ou plusieurs nouvelles commandes. Par exemple, voici les différents fichiers de configuration associés à une extraction de l'AmCache, un artefact Windows :
<!-- Fichier de configuration WolfLauncher -->
<!-- Élément racine avec les attributs :
childdebug="no" : désactive le mode debug sur les processus
command_timeout="600" : temps maximal pour l'exécution de la dernière commande -->
<wolf childdebug="no" command_timeout="600">
<!-- Création d'un fichier de log de l'exécution de DFIR-ORC -->
<log disposition="truncate">DFIR-ORC_{SystemType}_{FullComputerName}_{TimeStamp}.log</log>
<!-- Création d'un fichier JSON contenant le contexte d'exécution de DFIR-ORC -->
<outline disposition="truncate">DFIR-ORC_{SystemType}_{FullComputerName}_{TimeStamp}.json</outline>
<!-- Création d'une archive :
keyword="test" : unique identifiant de l'archive
concurrency="2" : configure le nombre d'exécutions concurrentes
repeat="Once" : permet de ne pas recréer l'archive si elle existe déjà. Peut être fixé à Overwrite pour recréer l'archive dans tous les cas
compression="fast" : configure le niveau de compression
archive_timeout="120" : détermine le temps maximal d'exécution par archive -->
<archive name="DFIR-ORC_{SystemType}_{FullComputerName}_AmCache.7z" keyword="test" concurrency="2" repeat="Once" compression="fast" archive_timeout="120">
<!-- Mise en place de restrictions :
ElapsedTimeLimit="60" : la durée maximale pour l'exécution complète -->
<restrictions ElapsedTimeLimit="60"/>
<!-- Création d'une commande avec l'identifiant "GetAmCache_test" -->
<command keyword="GetAmCache_test">
<!-- Paramètres de la commande :
execute : donne le programme à exécuter (run)
argument : ajout d'un argument pour l'exécution de la commande, ici un fichier de configuration
output : configure la sortie de la commande :
source="File" : la source est un fichier
argument="/out={FileName}" : pour préciser le fichier de sortie -->
<execute name="DIFR-ORC.exe" run="self:#GetThis"/>
<argument>/config=res:#GetAmCache_config.xml</argument>
<output name="AmCache_{SystemType}_{FullComputerName}.7z" source="File" argument="/out={FileName}" />
<output name="AmCache_{SystemType}_{FullComputerName}.log" source="StdOutErr" />
</command>
</archive>
</wolf>
Ce fichier permet, ici, de créer un fichier de log, un fichier JSON, ainsi qu'une archive contenant le résultat de la commande GetThis
avec le fichier de configuration GetAmCache_config.xml
.
<!-- Fichier de configuration Embed -->
<!-- Racine de toolembed -->
<toolembed>
<!-- Input : chemin vers le binaire ORC non configuré -->
<input>.\tools\DFIR-Orc_x86.exe</input>
<!-- Output : chemin vers le binaire configuré qui va être créé -->
<output>.\output\DFIR-Orc_AmCache.exe</output>
<!-- Run : permet de spécifier quel binaire non configuré doit s'exécuter en fonction de l'architecture 32 ou 64 bits -->
<run64 args="WolfLauncher" >7z:#Tools|DFIR-Orc_x64.exe</run64>
<run32 args="WolfLauncher" >self:#</run32>
<!-- File : permet d'embarquer un fichier de configuration dans le binaire configuré final -->
<file name="WOLFLAUNCHER_CONFIG" path=".\config\DFIR-ORC_config.xml"/>
<file name="GetAmCache_config.xml" path=".\config\GetAmCache_config.xml"/>
<!-- Archive : permet d'embarquer une ressource sous forme d'archive pour minimiser la taille du binaire configuré en sortie -->
<archive name="Tools" format="7z" compression="Ultra">
<file name="DFIR-Orc_x64.exe" path=".\tools\DFIR-Orc_x64.exe"/>
</archive>
</toolembed>
Ce fichier permet, ici, de récupérer le binaire non configuré DFIR-Orc_x64.exe
en entrée, de sortir le binaire configuré DFIR-Orc_AmCache.exe
en explicitant les fichiers de configuration WolfLauncher et GetAmCache. Il permet l'ajout de ressources au binaire ORC non configuré.
<!-- Fichier de configuration GetAmCache_config.xml -->
<!-- GetThis : permet de collecter des fichiers en les copiant dans un répertoire -->
<getthis>
<!-- Output : la commande crée une archive dans le dossier output -->
<output compression="fast" />
<!-- Location : indique à partir de quel dossier racine la commande doit chercher les fichiers -->
<location>*</location>
<!-- Samples : permet de définir des <sample> pour regrouper des fichier dans un dossier -->
<samples MaxPerSampleBytes="500MB" MaxTotalBytes="1GB">
<!-- Sample="amcache" : permet de créer un dossier amcache pour regrouper les fichier Amcache.hve -->
<sample name="amcache">
<!-- ntfs_find : permet de trouver un fichier en fonction ici de son nom (name_match) -->
<ntfs_find name_match="Amcache.hve"/>
<ntfs_find name_match="Amcache.hve.tmp"/>
<ntfs_find name_match="Amcache.hve.log1"/>
<ntfs_find name_match="Amcache.hve.log2"/>
</sample>
</samples>
</getthis>
Enfin, ce fichier permet de regrouper les exécutions de la commande GetThis
pour trouver les fichiers Amcache.hve
dans tout le système de fichiers, tout en créant un dossier amcache/ en sortie de l'exécution du binaire configuré.
La commande GetThis
a la capacité de passer outre les permissions ainsi que le système de fichiers verrouillés, ce qui lui permet de récupérer facilement des fichiers comme l'AmCache. En temps normal, récupérer ce fichier par nous même est difficile car il est verrouillé.
Il suffit par la suite d'exécuter le script Configure.cmd
pour obtenir le binaire configuré DFIR-Orc_AmCache.exe
.
DFIR-ORC : exécution
Il est maintenant possible d'exécuter le binaire configuré obtenu. Cependant, il est préférable de débuter par la vérification des actions exécutées par l'exécutable avant de le lancer : cela permet de s'assurer que les artéfacts souhaités vont bien être récupérés, et donc d'éviter une possible perte de temps lors d'une mission de réponse à incident. Pour ce faire, il suffit d'appeler le binaire configuré accompagné de l'argument /keys
. Voici son retour :
On peut ainsi observer de nombreuses informations, telles que :
- le nom de l'ordinateur sur lequel DFIR-ORC est exécuté (
WINDEV2202EVAL
), - le dossier de sortie de l'exécution des commandes (
C:\Users\\...\\AmCache-config
), - les fichiers
.log
et.json
créés pour résumer le déroulement de l'exécution de DFIR-ORC, - puis la partie la plus importante : les commandes qui vont être exécutées.
Ici, on peut observer une croix devant Archive: test
. Cela signifie que cette archive va être créée si une des commandes qui lui est associée est exécutée. On voit donc que la commande GetAmCache_test
est exécutée car la case devant elle est cochée, ainsi que celle de l'archive qui la contient. Si la case de la commande était cochée mais pas celle de l'archive, alors la commande n'aurait pas été exécutée.
Pour décocher une case, on peut soit préciser dans les fichiers de configuration que son exécution est facultative, soit rajouter dans la commande /-Key=<keyword\>
. Il est aussi possible d'utiliser les arguments /+Key=<keyword\>
pour cocher une case et /Key=<keyword\>
pour sélectionner uniquement certaines commandes.
Enfin, une fois tous les paramètres configurés comme souhaité, on peut exécuter le binaire configuré DFIR-Orc_AmCache.exe
en enlevant l'argument /Keys
:
> .\output\DFIR-Orc_AmCache.exe <Arguments facultatifs>
Voilà le résultat :
On obtient alors, entre autres, un fichier .7z qui contient l'archive AmCache_WorkStation_WinDev2202Eval.7z
qui elle-même contient les fichiers AmCache que nous souhaitions obtenir.
Conclusion
Pour conclure, DFIR-ORC est un outil très puissant permettant de récupérer facilement n'importe quel artefact Windows. Il est d'une utilité conséquente lors d'une mission de réponse à incident. Il permet d'accélérer le processus de récolte des données, et facilite donc le travail des investigateurs.
Liens :
À propos : Le blog d'AlgoSecure est un espace sur lequel notre équipe toute entière peut s'exprimer. Notre personnel marketing et commercial vous donne des informations sur la vie et l'évolution de notre société spécialisée en sécurité sur Lyon. Nos consultants techniques, entre deux tests d'intrusion ou analyses de risque, vous donnent leur avis ainsi que des détails techniques sur l'exploitation d'une faille de sécurité informatique. Ils vous expliqueront également comment sécuriser votre système d'informations ou vos usages informatiques particuliers, avec autant de méthodologie et de pédagogie que possible. Vous souhaitez retrouver sur ce blog des informations spécifiques sur certains sujets techniques ? N'hésitez pas à nous en faire part via notre formulaire de contact, nous lirons vos idées avec attention. Laissez-vous guider par nos rédacteurs : Alexandre, Amine, Antonin, Arnaud, Benjamin, Enzo, Eugénie, Fabien, Françoise, Gilles, Jean-Charles, Jean-Philippe, Jonathan, Joël, Joëlie, Julien, Jéromine, Ludovic, Lyse, Nancy, Natacha, Nicolas, Pierre, PierreG, Sébastien, Tristan, Yann, et bonne visite !