Build DFIR-ORC

Bonjour à tous, je vous fait un tuto pour Faire un build DFIR-ORC. En effet, on m’a dit dans l’équipe que c’était « compliqué » et que ça allait « prendre des jours » à faire.

Du coup, j’étais pas trop d’accord :-), et je me suis dit que c’était l’occasion de vous documenter le truc tout en donnant un outil de plus à ma team. Au final, j’avoue que la doc de l’ANSSI est quand même pas folle, mais on est loin du compliqué pour avoir un premier binaire utilisable en quelques heure.

Étape 1 : Build DFIR-ORC

Bon alors commencez par télécharger VSStudio 16-2019 (ça ne fonctionne pas pour l’instant avec la version 2022 :-), oui j’ai testé, contrairement à ce laisse penser la doc). Bonne nouvelle, pour l’instant cette version est toujours téléchargeable encore par là :

https://learn.microsoft.com/en-us/visualstudio/releases/2019/release-notes

Installez là en mode « par Défaut » et importer le fichier .vsconfig donné dans la doc.

Build DFIR-ORC

Et go cliquez en bas à droite sur modifier.

Build DFIR-ORC

Laisser VS code faire son installation en cliquant sur modify (a peine 11Go à télécharger, une paille, j’aurais aimé que MS maintienne sa VM Developper en version 2019 :’-) plutôt que de pourrir mon PC. Passons.

Build DFIR-ORC

Si ce n’est pas déjà présent sur votre PC, vous devrez au passage installer Git – Downloading Package (git-scm.com) C’est du clic/next tout le long, je passe (et rédémarrer le PC si Git n’est pas trouver la console après). Vous pouvez encore ajouter à VSstudio les LLVMExtensions.ClangFormat et Kitware/CMake dans la dernière version. Il vous faudra enfin modifier l’installation pour ajouter le module Dev bureau en C++ (encore 3.91Go).

Ah et si comme moi vous avez installé sans réfléchir VSstudio en Français : vous devrez encore installer le langage Pack Anglais par dessus (sinon ça compile pas). Pour cela : VSStudio Installer, Modifier, Module linguistique

J’imagine à peine si vous avez pas la fibre, le temps de télécharger tout ça vous êtes mort depuis 10 ans en fait.

Ouvrez enfin le Developer command Prompt depuis la console VSStudio.

Et cloner le premier repos comme indiquer dans la proc :

Dérouler alors la séquence de commandes complète :

git clone --recursive https://github.com/dfir-orc/dfir-orc.git
cd dfir-orc
mkdir build-x86 build-x64

cd build-x86
cmake -G "Visual Studio 16 2019" -A Win32 -T v141_xp ..
cmake --build . --config MinSizeRel -- -maxcpucount

cd ../build-x64
cmake -G "Visual Studio 16 2019" -A x64 -T v141_xp ..
cmake --build . --config MinSizeRel -- -maxcpucount

A noter que les étapes de config et de compilation prenne « un peu de temps. » Même quand vous avez un gros CPU et plein de RAM comme moi (et non je ne compense rien).

Si vous cherchez les binaires après la compilation c’est par ici :

> cd C:\Users\$YourUsername\source\repos
> ls dfir-orc\build-x64\MinSizeRel\DFIR-Orc_x64.exe
> ls dfir-orc\build-x86\MinSizeRel\FastFind_x86.exe

Vous pouvez alors tester une exécution avec les outils embarqués :

.\DFIR-Orc_x64.exe NTFSUtil /USN "\\.\c:"

Et voilà votre build DFIR-ORC est terminé.

Etape 2 : configuration

à ce stade votre binaire n’embarque rien d’autre que les outils de base. La doc parle de « unconfigured binary : just a set of tools, plus a collection engine. »

Nouvelle étape, cloner les conf :

> cd C:\Users\$YourUsername\source\repos
> git clone "https://github.com/dfir-orc/dfir-orc-config.git"
> cd dfir-orc-config

Copier les binaires précédents dans le dossier des conf :

> copy ..\dfir-orc\build-x64\MinSizeRel\DFIR-Orc_x64.exe .\tools\
> copy ..\dfir-orc\build-x86\MinSizeRel\DFIR-Orc_x86.exe .\tools\

Après vous devez embarquer des tools dans votre binaire, il faut donc les télécharger :

> cd C:\Users\$YourUsername\source\repos\dfir-orc-config
> Invoke-WebRequest "https://live.sysinternals.com/autorunsc.exe" -OutFile .\tools\autorunsc.exe
> Invoke-WebRequest "https://github.com/Velocidex/WinPmem/releases/download/v4.0.rc1/winpmem_mini_x64_rc2.exe" -OutFile ".\tools\winpmem.exe"
> Invoke-WebRequest "https://github.com/Velocidex/WinPmem/releases/download/v4.0.rc1/winpmem_mini_x86.exe" -OutFile ".\tools\winpmem_mini_x86.exe"
> #Please check https://github.com/DFIR-ORC/dfir-orc-config/issues/13

> $toolName="Handle.zip"; Invoke-WebRequest "https://download.sysinternals.com/files/$toolName" -OutFile ".\tools\$toolName"; Expand-Archive -Force ".\tools\$toolName" -DestinationPath .\tools; Remove-Item ".\tools\$toolName"
> $toolName="TCPView.zip"; Invoke-WebRequest "https://download.sysinternals.com/files/$toolName" -OutFile ".\tools\$toolName"; Expand-Archive -Force ".\tools\$toolName" -DestinationPath .\tools; Remove-Item ".\tools\$toolName"
> $toolName="PSTools.zip"; Invoke-WebRequest "https://download.sysinternals.com/files/$toolName" -OutFile ".\tools\$toolName"; Expand-Archive -Force ".\tools\$toolName" -DestinationPath .\tools; Remove-Item ".\tools\$toolName"
> $toolName="ListDlls.zip"; Invoke-WebRequest "https://download.sysinternals.com/files/$toolName" -OutFile ".\tools\$toolName"; Expand-Archive -Force ".\tools\$toolName" -DestinationPath .\tools; Remove-Item ".\tools\$toolName"

> $toolName="JumpBag.zip"; Invoke-WebRequest "https://downloads.sourceforge.net/project/jumpbag/JumpBag.zip#pleasechangethelinkwithyourparam" -OutFile ".\tools\$toolName"; Expand-Archive -Force ".\tools\$toolName" -DestinationPath .\tools; Remove-Item ".\tools\$toolName"

A partir de là vous pouvez lancer le script pour embarquer les outils qui vous intéresse :

> .\Configure.cmd
> ls .\output\ 

    Directory: C:\Users\$YourUsername\source\repos\dfir-orc-config\output

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          28/10/2022    22:34        6897152 DFIR-Orc.exe
-a---          28/10/2022    21:58              0 empty-file

Et vous voilà enfin avec un binaire DFIR ORC configuré \o/. Notez que la commande Configure.cmd ne fait pas grand chose de plus d’appeler le binaire DFIR-Orc.exe avec l’option ToolEmbed et une configuration par défaut. On verra à l’étape 5 que vous pouvez modifier ce comportement.

Etape 3 : Testez !

Pour tester une exécution. Une petite commande toute mignonne qui va vous écrire le contenu de la MFT du disque C dans le fichier C_drive.csv (dans votre répertoire courant).

> .\output\DFIR-Orc.exe NTFSInfo /out=C_drive.csv "C:\"
> Get-Content .\C_drive.csv | select -first 10 # head
ComputerName,VolumeID,File,ParentName,FullName,Extension,SizeInBytes,Attributes,CreationDate,LastModificationDate,LastAccessDate,LastAttrChangeDate,FileNameCreationDate,FileNameLastModificationDate,FileNameLastAccessDate,FileNameLastAttrModificationDate,USN,FRN,ParentFRN,ExtendedAttribute,ADS,FilenameID,DataID,RecordInUse,ShortName,MD5,SHA1,FirstBytes,OwnerId,OwnerSid,Owner,Version,CompanyName,ProductName,OriginalFileName,Platform,TimeStamp,SubSystem,FileType,FileOS,FilenameFlags,SHA256,PeSHA1,PeSHA256,SecDescrID,EASize,SecurityDirectory,AuthenticodeStatus,AuthenticodeSigner,AuthenticodeSignerThumbprint,AuthenticodeCA,AuthenticodeCAThumbprint,PeMD5,FilenameIndex,DataIndex,SnapshotID,SSDeep,TLSH,SignedHash,SecurityDirectorySize,SecurityDirectorySignatureSize
,,"$MFT","",,"",1408499712,"....HN....S..",2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,0x0000000000000000,0x0001000000000000,0x0005000000000005,,,3,6,Y,,,,,,,,,,,,,,,,,3,,,,256,,,,,,,,,0,0,{00000000-0000-0000-0000-000000000000},,,,,
,,"$MFTMirr","",,"",4096,"....HN....S..",2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,0x0000000000000000,0x0001000000000001,0x0005000000000005,,,2,1,Y,,,,,,,,,,,,,,,,,3,,,,256,,,,,,,,,0,0,{00000000-0000-0000-0000-000000000000},,,,,
,,"$LogFile","",,"",67108864,"....HN....S..",2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,0x0000000000000000,0x0002000000000002,0x0005000000000005,,,2,1,Y,,,,,,,,,,,,,,,,,3,,,,256,,,,,,,,,0,0,{00000000-0000-0000-0000-000000000000},,,,,
,,"$Volume","",,"",0,"....HN....S..",2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,0x0000000000000000,0x0003000000000003,0x0005000000000005,,,1,3,Y,,,,,,,,,,,,,,,,,3,,,,257,,,,,,,,,0,0,{00000000-0000-0000-0000-000000000000},,,,,
,,"$AttrDef","",,"",2560,"....HN....S..",2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,0x0000000000000000,0x0004000000000004,0x0005000000000005,,,2,1,Y,,,,,,,,,,,,,,,,,3,,,,256,,,,,,,,,0,0,{00000000-0000-0000-0000-000000000000},,,,,
,,".","",,".",0,"..D.H.....S..",2018-09-15 06:09:26.317,2022-10-28 19:28:23.609,2022-10-28 20:28:23.766,2022-10-28 19:28:23.609,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,0x00000008D3A324F8,0x0005000000000005,0x0005000000000005,,,1,,Y,,,,,,,,,,,,,,,,,3,,,,264,,,,,,,,,0,,{00000000-0000-0000-0000-000000000000},,,,,
,,"$Bitmap","",,"",28959776,"....HN....S..",2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,0x0000000000000000,0x0006000000000006,0x0005000000000005,,"$SRAT",2,4,Y,,,,,,,,,,,,,,,,,3,,,,256,,,,,,,,,0,0,{00000000-0000-0000-0000-000000000000},,,,,
,,"$Bitmap:$SRAT","",,"",68,"....HN....S..",2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,0x0000000000000000,0x0006000000000006,0x0005000000000005,,"$SRAT",2,5,Y,,,,,,,,,,,,,,,,,3,,,,256,,,,,,,,,0,1,{00000000-0000-0000-0000-000000000000},,,,,
,,"$Boot","",,"",8192,"....HN....S..",2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,2019-02-15 15:17:51.588,0x000100180000004C,0x0007000000000007,0x0005000000000005,,,2,1,Y,,,,,,,,,,,,,,,,,3,,,,104,,,,,,,,,0,0,{00000000-0000-0000-0000-000000000000},,,,,

Autre exemple rigolo, créer une archive OrcLibTest.7z dans le dossier courant et collecté tous les fichier containing all files qui s’appelle OrcLibTest.dll dans le disque C.

> .\output\DFIR-Orc.exe GetThis /nolimits /sample=OrcLibTest.dll /out=OrcLibTest.7z "C:\"

Il s’agit ici d’exemples bien pratiques. Si vous souhaitez connaitre toutes les capacité d’un binaire DFIR-ORC, faite :

> .\output\DFIR-Orc.exe /keys
[...]
[X] Memory (DFIR-ORC_WorkStation_SAURON_Memory.7z)
    [ ] GetRam_dmp
    [ ] GetRam_aff4
    [ ] GetRam_raw

[X] Little (DFIR-ORC_WorkStation_SAURON_Little.7z)
    [X] NTFSInfo_little
    [X] GetEVT_little
    [X] SystemInfo
    [X] Autoruns
    [X] USNInfo_systemdrive
    [X] GetSystemHives_little
    [X] GetLegacyBootCode
    [X] GetArtefacts_little
    [X] Handle
    [X] GetObjInfo
    [X] GetScripts_little
    [X] Route
    [X] Dns_cache
    [X] Tcpvcon
    [X] Netstat

[ ] FastFind (DFIR-ORC_WorkStation_SAURON_FastFind.7z)
    [X] FastFind

[X] General (DFIR-ORC_WorkStation_SAURON_General.7z)
    [X] NTFSInfoQuick_alldrives
    [X] GetResidents
    [X] GetSamples
    [X] GetEVT
    [X] GetADS
    [X] Listdlls
    [X] BITS_jobs
    [X] VSS_list
    [X] EnumLocs
    [X] GetEXE_TMP
    [X] GetArtefacts
    [X] GetExtAttrs
    [X] GetTextLogs
    [X] GetScripts
    [X] GetErrors
    [ ] GetMemoryDmp
    [X] Arp_cache
    [ ] GetCatroot
    [ ] GetSDS

[X] Detail (DFIR-ORC_WorkStation_SAURON_Detail.7z)
    [X] NTFSInfoDetail_alldrives
    [X] GetSystemHives
    [X] GetUserHives
    [X] FatInfo
    [X] USNInfo
    [X] GetUefiFull
    [ ] GetFuzzyHash
    [ ] FatInfoPE
    [ ] FatInfoFirstBytes

[X] Browsers (DFIR-ORC_WorkStation_SAURON_Browsers.7z)
    [X] GetBrowsersHistory
    [X] GetBrowsersArtefacts

[X] SAM (DFIR-ORC_WorkStation_SAURON_SAM.7z)
    [X] GetSamHive

[ ] Yara (DFIR-ORC_WorkStation_SAURON_Yara.7z)
    [X] GetYara

[X] Powershell (DFIR-ORC_WorkStation_SAURON_Powershell.7z)
    [X] EventConsumer
    [X] Processes1
    [X] Processes2

[ ] ORC_Offline (DFIR-ORC_WorkStation_SAURON_Offline.7z)
    [X] NTFSInfo_offline
    [X] FatInfo_offline
    [X] USNInfo_offline
    [X] GetFuzzyHash_offline
    [X] GetSystemHives_offline
    [X] GetUserHives_offline
    [X] GetLegacyBootCode_offline
    [X] GetUefiFull_offline
    [X] GetSDS_offline
    [X] GetADS_offline
    [X] GetCatroot_offline
    [X] GetEVT_offline
    [X] GetEXE_TMP_offline
    [X] GetArtefacts_offline
    [X] GetTextLogs_offline
    [X] GetScripts_offline
    [X] GetErrors_offline
    [X] GetMemoryDmp_offline
    [X] GetBrowsersComplet_offline
    [X] GetSamHive_offline
    [X] GetExtAttrs_offline
    [X] GetResidents_offline

[ ] Debug (DFIR-ORC_WorkStation_SAURON_Debug.7z)
    [X] GetMFT
[...]

Ci-dessus :

  • [X] signale que l’élément sera collecté par DFIR-ORC par la commande et inclus dans l’archirve
  • [ ] signale que l’élément n’est collecté que si l’option est spécifié (exemple /key+=FastFind).

Si vous voulez tester d’autres configuration jouez avec le paramètre /key, par exemple :

> .\output\DFIR-Orc.exe /key+=Yara /key-=GetMFT /keys

Si vous ne chercher qu’un seul élément vous pouvez évidement spécifier une seul clé de configuration. Un exemple ici pour dumper uniquement le registre utilisateur dans temp\testing (attention ca prend quelques minutes). (Pensez à l’option /overwrite si vous voulez forcer la réécriture d’une archive déjà existante)

.\output\DFIR-Orc.exe /key=GetUserHives /out=\Temp\testing
> ls C:\Temp\testing\

Etape 4 : utilisez un fichier de configuration XML

Pour faire simple, la ligne de commande ci-dessus trouve rapidement ces limites quand vous voulez faire des collectes « un peu compliqué » ou conserver des configurations de collecte particulière (exemple : collecte-light en 5 min vs collecte tout en 4h). Pour cela DFIR-ORC supporte le chargement de ses paramètres via un fichier de configuration xml.

Voici un exemple donnée dans la doc pour récupérer les informations systèmes :

<dfir-orc priority="low" powerstate="SystemRequired,AwayMode">
   <output>\Temp\testing</output>
   <key>SystemInfo</key>
</dfir-orc>
> .\output\DFIR-Orc.exe /local=.\DFIR-Orc.xml

Pour ceux qui n’aurait pas encore remarqué, les chemins sont écrit « à la unix » donc quand vous configurez \Temp\testing, vos logs arrivent dans C:\Temp\testing\.

Autre point important, Si votre fichier DFIR-Orc.xml se trouve dans le même dossier que votre binaire, ce dernier va automatiquement charger la configuration. La commande ci-dessous réalisera exactement les mêmes actions que la précédente.

> Move-Item .\DFIR-Orc.xml .\output\
> .\output\DFIR-Orc.exe

C’est pratique hein ?

Etape 5 : DFIR ORc configurations !

Build DFIR-ORC

Les configurations XML de DFIR-ORC laissent beaucoup de possibilité pour éxécuter les binaire embarquée avec les options que vous souhaitez…et vous pouvez embarquer ces configuration directements dans le binaires.

A ce stade, en vrai vous n’avez plus besoin de moi pour continuer. Vous pouvez repartir directement de leur Doc :

https://dfir-orc.github.io/tuto.html#edit-embedded-configurations

Et j’ai une bonne nouvelle : vous avez plein d’exemple des configurations dans le Github du projet et pour chaque outils embarqué dans DFIR-ORC :

https://github.com/DFIR-ORC/dfir-orc-config/tree/master/config

Deuxième bonne nouvelle, Pierre-Yves vous a écrit dans notre dernier article MISC toute une section sur DFIR-ORC ou il complète bien la dernière section de ce post (en plus de la doc officielle).

Conclusion Build DFIR-ORC

Pour terminer, retenez que DIFR-ORC est aujourd’hui probablement un des meilleurs outils de Live-Forensics sous Windows.

Que malgré une petite galère pour Build DFIR-ORC, le jeu en vaut la chandelle. Et que si vous souhaitez travailler calmement avec ce binaire, ils vous faudra préparer vos configurations avec un peu d’avance pour éviter de vous prendre des Gigaoctets de collecte qui prendront des heures.

Voilà, j’espère que vous a intérréssé ! Moi je viens de tuer une soirée à vous écrire ça en tout cas… ^^

Bonnes collectes à tous !

4 commentaires on “Build DFIR-ORC

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.