
chainsaw v2.16.4
Recherchez et traquez rapidement les artefacts forensiques Windows
Recherche et chasse rapides à travers les artefacts forensiques Windows
Chainsaw offre une puissante capacité de « première réponse » pour identifier rapidement les menaces au sein des artefacts forensiques Windows, tels que les journaux d’événements et le fichier MFT. Chainsaw propose une méthode générique et rapide de recherche de mots-clés dans les journaux d’événements, ainsi que l’identification des menaces grâce à la prise en charge intégrée des règles de détection Sigma et des règles de détection personnalisées Chainsaw.
Fonctionnalités
- 🎯 Chassez les menaces à l’aide des règles de détection Sigma et des règles de détection personnalisées Chainsaw
- 🔍 Recherchez et extrayez des artefacts forensiques par correspondance de chaînes et motifs regex
- 📅 Créez des chronologies d’exécution en analysant les artefacts Shimcache et en les enrichissant avec les données Amcache
- 💡 Analysez la base de données SRUM et fournissez des informations à son sujet
- ⬇️ Extrayez le contenu brut des artefacts forensiques (MFT, ruches de registre, bases de données ESE)
- ⚡ Extrêmement rapide, écrit en rust, encapsulant la bibliothèque EVTX parser de @OBenamram
- 🪶 Exécution et formats de sortie propres et légers, sans enflure inutile
- 🔥 Étiquetage de documents (correspondance de la logique de détection) fourni par la bibliothèque TAU Engine
- 📑 Affichez les résultats dans divers formats, tels que le format de tableau ASCII, le format CSV et le format JSON
- 💻 Peut être exécuté sur MacOS, Linux et Windows
Table des matières
- Fonctionnalités
- Pourquoi Chainsaw ?
- Logique de chasse pour les journaux d’événements Windows
- Guide de démarrage rapide
- Exemples
- Remerciements
Des informations complémentaires sont disponibles dans le Wiki de cet outil : https://github.com/WithSecureLabs/chainsaw/wiki
Pourquoi Chainsaw ?
Chez WithSecure Countercept, nous ingérons un large éventail de sources de télémétrie provenant des endpoints via notre agent EDR pour fournir notre service de détection et de réponse gérées. Cependant, il existe des circonstances où nous devons analyser rapidement des artefacts forensiques qui n’ont pas été capturés par notre EDR, un exemple courant étant les investigations de réponse à incident sur un parc où notre EDR n’était pas installé au moment de la compromission. Chainsaw a été créé pour offrir à nos chasseurs de menaces et à nos consultants en réponse à incident un outil permettant d’effectuer un triage rapide des artefacts forensiques dans ces circonstances.
Journaux d’événements Windows
Les journaux d’événements Windows constituent une source riche d’informations forensiques pour la chasse aux menaces et les investigations de réponse à incident. Malheureusement, le traitement et la recherche dans les journaux d’événements peuvent être un processus lent et chronophage, et nécessitent dans la plupart des cas la mise en place d’une infrastructure environnante – comme une pile ELK ou une instance Splunk – pour chasser efficacement dans les données de journal et appliquer une logique de détection. Cette surcharge signifie souvent que les équipes bleues ne peuvent pas trier rapidement les journaux d’événements Windows pour fournir les orientations et les conclusions nécessaires à la progression de leurs investigations. Chainsaw résout ce problème en permettant la recherche et la chasse rapides dans les journaux d’événements Windows.
Au moment de la rédaction de ce document, il existe très peu d’outils open-source autonomes offrant une méthode simple et rapide pour trier les journaux d’événements Windows, identifier les éléments intéressants dans les journaux et appliquer un format de règles de logique de détection (comme Sigma) pour détecter des signes d’activité malveillante. Lors de nos tests, les outils existants peinaient à appliquer efficacement une logique de détection à de grands volumes de journaux d’événements, ce qui les rendait inadaptés aux scénarios nécessitant un triage rapide.
Logique de chasse pour les journaux d’événements Windows
Correspondance des règles Sigma
En utilisant les paramètres --sigma et --mapping, vous pouvez spécifier un répertoire contenant un sous-ensemble de règles de détection SIGMA (ou simplement l’intégralité du dépôt git SIGMA) et Chainsaw chargera, convertira et exécutera automatiquement ces règles sur les journaux d’événements fournis. Le fichier de mapping indique à Chainsaw quels champs des journaux d’événements utiliser pour la correspondance des règles. Par défaut, Chainsaw prend en charge un large éventail de types de journaux d’événements, notamment mais sans s’y limiter :
| Type d’événement | ID d’événement |
|---|---|
| Création de processus (Sysmon) | 1 |
| Connexions réseau (Sysmon) | 3 |
| Chargements d’images (Sysmon) | 7 |
| Création de fichiers (Sysmon) | 11 |
| Événements de registre (Sysmon) | 13 |
| Blocs de script Powershell | 4104 |
| Création de processus | 4688 |
| Création de tâches planifiées | 4698 |
| Création de services | 7045 |
Consultez le fichier de mapping pour obtenir la liste complète des champs utilisés pour la détection des règles, et n’hésitez pas à l’étendre selon vos besoins.
Règles de détection Chainsaw
En plus de prendre en charge les règles Sigma, Chainsaw prend également en charge un format de règles personnalisé. Dans le dépôt, vous trouverez un répertoire rules contenant diverses règles Chainsaw qui permettent aux utilisateurs de :
- Extraire et analyser les alertes des antivirus Windows Defender, F-Secure, Sophos et Kaspersky
- Détecter la suppression de journaux d’événements clés ou l’arrêt du service de journalisation des événements
- Détecter la création d’utilisateurs ou leur ajout à des groupes d’utilisateurs sensibles
- Événements de connexions distantes (Service, RDP, Réseau, etc.). Cela aide les chasseurs à identifier les sources de mouvement latéral
- Attaques par force brute sur les comptes d’utilisateurs locaux
Guide de démarrage rapide
Téléchargement et exécution
Avec la sortie de Chainsaw v2, nous avons décidé de ne plus inclure les dépôts Sigma Rules et EVTX-Attack-Samples comme sous-modules de Chainsaw. Nous vous recommandons de cloner ces dépôts séparément pour vous assurer de disposer des dernières versions.
Si vous avez toujours besoin d’un package tout-en-un contenant le binaire Chainsaw, les règles Sigma et des journaux d’événements d’exemple, vous pouvez le télécharger depuis la section des versions de ce dépôt GitHub. Dans cette section des versions, vous trouverez également des versions précompilées ne contenant que le binaire Chainsaw pour différentes plateformes et architectures.
Si vous souhaitez compiler Chainsaw vous-même, vous pouvez cloner le dépôt Chainsaw :
git clone https://github.com/WithSecureLabs/chainsaw.git
et compiler le code vous-même en exécutant : cargo build --release. Une fois la compilation terminée, vous trouverez une copie du binaire compilé dans le dossier target/release.
Assurez-vous de compiler avec l’option --release, car cela garantit un temps d’exécution considérablement plus rapide.
Si vous souhaitez voir rapidement à quoi ressemble Chainsaw lorsqu’il s’exécute, vous pouvez cloner les dépôts Sigma Rules et EVTX-Attack-Samples :``` git clone https://github.com/SigmaHQ/sigma git clone https://github.com/sbousseaden/EVTX-ATTACK-SAMPLES.git
puis exécutez Chainsaw avec les paramètres ci-dessous:```
./chainsaw hunt EVTX-ATTACK-SAMPLES/ -s sigma/ --mapping mappings/sigma-event-logs-all.yml
Installer/construire avec Nix```
├───devShells │ └───x86_64-linux │ └───default: development environment 'nix-shell' ├───formatter │ └───x86_64-linux: package 'alejandra-3.1.0' └───packages └───x86_64-linux ├───chainsaw: package 'chainsaw-2.10.1' └───default: package 'chainsaw-2.10.1'
Chainsaw, en tant que paquet, est disponible via [nixpkgs](https://search.nixos.org/packages?query=chainsaw).
Si vous utilisez NixOS, ajoutez simplement `chainsaw` à votre fichier de configuration système.
Cependant, si vous n'utilisez pas NixOS, vous pouvez toujours installer Chainsaw via Nix. La méthode recommandée est d'utiliser `nix-shell`, qui modifiera temporairement votre variable d'environnement $PATH.
Pour ce faire, veuillez exécuter la commande suivante :```
nix-shell -p chainsaw
Vous pouvez également exploiter le fait que ce repo est un flake, et exécuter ce qui suit :``` nix profile install github:WithSecureLabs/chainsaw
Cependant, si vous souhaitez compiler chainsaw vous-même, en utilisant Nix, vous pouvez à nouveau utiliser `flake.nix`, qui est fourni avec ce dépôt.
Pour compiler le binaire, veuillez exécuter la commande suivante, dans le répertoire racine du dépôt cloné```
nix build .#
Cela créera le répertoire ./result, avec le binaire chainsaw situé sous ./result/bin/chainsaw.
Avertissements EDR et antivirus
Lors du téléchargement et de l'exécution de chainsaw, il est possible que votre moteur EDR / antivirus local détecte Chainsaw comme malveillant. Vous pouvez voir des exemples de cela dans les problèmes GitHub suivants : Exemple1, Exemple2.
Ces avertissements sont généralement dus aux journaux d'événements d'exemple et/ou aux règles Sigma qui contiennent des références à des chaînes malveillantes (par exemple « mimikatz »). Nous avons également vu des cas où le binaire Chainsaw a été détecté par un petit sous-ensemble de moteurs antivirus, probablement en raison d'une forme de détection heuristique.
Qu'est-ce qui a changé dans Chainsaw v2 ?
En juillet 2022, nous avons publié la version 2 de Chainsaw, qui constitue une refonte majeure du fonctionnement de Chainsaw. Chainsaw v2 contient plusieurs améliorations significatives, notamment la liste de points forts suivante :
- Une approche améliorée du mappage des règles Sigma qui entraîne une augmentation significative du nombre de règles Chainsaw prises en charge et des types d'événements des journaux d'événements.
- Sortie CLI améliorée qui affiche un aperçu de toutes les données d'événement pour les journaux d'événements contenant des détections.
- Prise en charge du chargement et de l'analyse des journaux d'événements aux formats JSON et XML.
- Arguments de ligne de commande plus clairs et plus simples pour les fonctions Hunt et Search.
- Informations de sortie facultatives supplémentaires, telles que l'auteur de la règle, le statut de la règle, le niveau de la règle, etc.
- La possibilité de filtrer les règles chargées par statut, type et niveau de gravité.
- Les règles de détection Chainsaw intégrées ont été réparties dans des fichiers de règles Chainsaw dédiés.
- Une réécriture propre du code de Chainsaw pour améliorer la lisibilité et réduire la charge des contributions communautaires.
Si vous souhaitez toujours utiliser la version 1 de Chainsaw, vous pouvez trouver des binaires compilés dans la section des versions, ou vous pouvez accéder au code source dans la branche v1.x.x. Veuillez noter que Chainsaw v1 n'est plus maintenu et que tous les utilisateurs devraient envisager de passer à Chainsaw v2.
Un immense merci à @AlexKornitzer qui a réussi à convertir la base de code « Christmas Project » de Chainsaw v1 en un produit soigné dans v2.
Exemples
Recherche
USAGE:
chainsaw search [FLAGS] [OPTIONS] <pattern> [--] [path]...
FLAGS:
-h, --help Prints help information
-i, --ignore-case Ignore the case when searching patterns
--json Print the output in json format
--load-unknown Allow chainsaw to try and load files it cannot identify
--local Output the timestamp using the local machine's timestamp
-q Suppress informational output
--skip-errors Continue to search when an error is encountered
-V, --version Prints version information
OPTIONS:
--extension <extension>... Only search through files with the provided extension
--from <from> The timestamp to search from. Drops any documents older than the value provided
-o, --output <output> The path to output results to
-e, --regex <pattern>... A string or regular expression pattern to search for
-t, --tau <tau>... Tau expressions to search with. e.g. 'Event.System.EventID: =4104'
--timestamp <timestamp> The field that contains the timestamp
--timezone <timezone> Output the timestamp using the timezone provided
--to <to> The timestamp to search up to. Drops any documents newer than the value provided
ARGS:
<pattern> A string or regular expression pattern to search for. Not used when -e or -t is specified
<path>... The paths containing event logs to load and hunt through
Exemples de commandes
Recherche de la chaîne insensible à la casse « mimikatz » dans tous les fichiers .evtx
./chainsaw search mimikatz -i evtx_attack_samples/
*Recherche dans tous les fichiers .evtx des événements de blocs de scripts PowerShell (ID d'événement 4014)
./chainsaw search -t 'Event.System.EventID: =4104' evtx_attack_samples/
Recherche dans un journal evtx spécifique des événements de connexion, avec un motif regex correspondant, sortie au format JSON
./chainsaw search -e "DC[0-9].insecurebank.local" evtx_attack_samples --json
Chasse
USAGE:
chainsaw hunt [FLAGS] [OPTIONS] [--] [path]...
FLAGS:
--csv Print the output in csv format
--full Print the full values for the tabular output
-h, --help Prints help information
--json Print the output in json format
--load-unknown Allow chainsaw to try and load files it cannot identify
--local Output the timestamp using the local machine's timestamp
--log Print the output in log like format
--metadata Display additional metadata in the tablar output
-q Suppress informational output
--skip-errors Continue to hunt when an error is encountered
-V, --version Prints version information
OPTIONS:
--column-width <column-width> Set the column width for the tabular output
--extension <extension>... Only hunt through files with the provided extension
--from <from> The timestamp to hunt from. Drops any documents older than the value provided
--kind <kind>... Restrict loaded rules to specified kinds
--level <level>... Restrict loaded rules to specified levels
-m, --mapping <mapping>... A mapping file to tell Chainsaw how to use third-party rules
-o, --output <output> A path to output results to
-r, --rule <rule>... A path containing additional rules to hunt with
-s, --sigma <sigma>... A path containing Sigma rules to hunt with
--status <status>... Restrict loaded rules to specified statuses
--timezone <timezone> Output the timestamp using the timezone provided
--to <to> The timestamp to hunt up to. Drops any documents newer than the value provided
ARGS:
<rules> The path to a collection of rules to use for hunting
<path>... The paths containing event logs to load and hunt through
Exemples de commandes
Recherche dans tous les fichiers evtx en utilisant les règles Sigma pour la logique de détection
./chainsaw hunt evtx_attack_samples/ -s sigma/ --mapping mappings/sigma-event-logs-all.yml
Recherche dans tous les fichiers evtx en utilisant les règles Sigma et les règles Chainsaw pour la logique de détection, et sortie au format CSV dans le dossier des résultats
./chainsaw hunt evtx_attack_samples/ -s sigma/ --mapping mappings/sigma-event-logs-all.yml -r rules/ --csv --output results
Recherche dans tous les fichiers evtx en utilisant les règles Sigma pour la logique de détection, uniquement entre des horodatages spécifiques, et sortie des résultats au format JSON
./chainsaw hunt evtx_attack_samples/ -s sigma/ --mapping mappings/sigma-event-logs-all.yml --from "2019-03-17T19:09:39" --to "2019-03-17T19:09:50" --json
Sortie
$ ./chainsaw hunt -r rules/ evtx_attack_samples -s sigma/rules --mapping mappings/sigma-event-logs-all.yml --level critical
██████╗██╗ ██╗ █████╗ ██╗███╗ ██╗███████╗ █████╗ ██╗ ██╗
██╔════╝██║ ██║██╔══██╗██║████╗ ██║██╔════╝██╔══██╗██║ ██║
██║ ███████║███████║██║██╔██╗ ██║███████╗███████║██║ █╗ ██║
██║ ██╔══██║██╔══██║██║██║╚██╗██║╚════██║██╔══██║██║███╗██║
╚██████╗██║ ██║██║ ██║██║██║ ╚████║███████║██║ ██║╚███╔███╔╝
╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝
By WithSecure Countercept (@FranticTyping, @AlexKornitzer)
[+] Loading detection rules from: ../../rules/, /tmp/sigma/rules
[+] Loaded 129 detection rules (198 not loaded)
[+] Loading event logs from: ../../evtx_attack_samples (extensions: .evtx)
[+] Loaded 268 EVTX files (37.5 MB)
[+] Hunting: [========================================] 268/268
[+] Group: Antivirus
┌─────────────────────┬────────────────────┬──────────┬───────────┬─────────────┬────────────────────────────────┬──────────────────────────────────┬────────────────────┐
│ timestamp │ detections │ Event ID │ Record ID │ Computer │ Threat Name │ Threat Path │ User │
├─────────────────────┼────────────────────┼──────────┼───────────┼─────────────┼────────────────────────────────┼──────────────────────────────────┼────────────────────┤
│ 2019-07-18 20:40:00 │ ‣ Windows Defender │ 1116 │ 37 │ MSEDGEWIN10 │ Trojan:PowerShell/Powersploit. │ file:_C:\AtomicRedTeam\atomic- │ MSEDGEWIN10\IEUser │
│ │ │ │ │ │ M │ red-team-master\atomics\T1056\ │ │
│ │ │ │ │ │ │ Get-Keystrokes.ps1 │ │
├─────────────────────┼────────────────────┼──────────┼───────────┼─────────────┼────────────────────────────────┼──────────────────────────────────┼────────────────────┤
│ 2019-07-18 20:53:31 │ ‣ Windows Defender │ 1117 │ 106 │ MSEDGEWIN10 │ Trojan:XML/Exeselrun.gen!A │ file:_C:\AtomicRedTeam\atomic- │ MSEDGEWIN10\IEUser │
│ │ │ │ │ │ │ red-team-master\atomics\T1086\ │ │
│ │ │ │ │ │ │ payloads\test.xsl │ │
└─────────────────────┴────────────────────┴──────────┴───────────┴─────────────┴────────────────────────────────┴──────────────────────────────────┴────────────────────┘
[+] Group: Log Tampering
┌─────────────────────┬───────────────────────────────┬──────────┬───────────┬────────────────────────────────┬───────────────┐
│ timestamp │ detections │ Event ID │ Record ID │ Computer │ User │
├─────────────────────┼───────────────────────────────┼──────────┼───────────┼────────────────────────────────┼───────────────┤
│ 2019-01-20 07:00:50 │ ‣ Security Audit Logs Cleared │ 1102 │ 32853 │ WIN-77LTAPHIQ1R.example.corp │ Administrator │
└─────────────────────┴───────────────────────────────┴──────────┴───────────┴────────────────────────────────┴───────────────┘[+] Group: Sigma
┌─────────────────────┬────────────────────────────────┬───────┬────────────────────────────────┬──────────┬───────────┬──────────────────────────┬──────────────────────────────────┐
│ timestamp │ detections │ count │ Event.System.Provider │ Event ID │ Record ID │ Computer │ Event Data │
├─────────────────────┼────────────────────────────────┼───────┼────────────────────────────────┼──────────┼───────────┼──────────────────────────┼──────────────────────────────────┤
│ 2019-04-29 20:59:14 │ ‣ Malicious Named Pipe │ 1 │ Microsoft-Windows-Sysmon │ 18 │ 8046 │ IEWIN7 │ --- │
│ │ │ │ │ │ │ │ Image: System │
│ │ │ │ │ │ │ │ PipeName: "\\46a676ab7f179e511 │
│ │ │ │ │ │ │ │ e30dd2dc41bd388" │
│ │ │ │ │ │ │ │ ProcessGuid: 365ABB72-D9C4-5CC │
│ │ │ │ │ │ │ │ 7-0000-0010EA030000 │
│ │ │ │ │ │ │ │ ProcessId: 4 │
│ │ │ │ │ │ │ │ RuleName: "" │
│ │ │ │ │ │ │ │ UtcTime: "2019-04-29 20:59:14. │
│ │ │ │ │ │ │ │ 430" │
├─────────────────────┼────────────────────────────────┼───────┼────────────────────────────────┼──────────┼───────────┼──────────────────────────┼──────────────────────────────────┤
│ 2019-04-30 20:26:51 │ ‣ CobaltStrike Service │ 1 │ Microsoft-Windows-Sysmon │ 13 │ 9806 │ IEWIN7 │ --- │
│ │ Installations in Registry │ │ │ │ │ │ Details: "%%COMSPEC%% /b /c st │
│ │ │ │ │ │ │ │ art /b /min powershell.exe -no │
│ │ │ │ │ │ │ │ p -w hidden -noni -c \"if([Int │
│ │ │ │ │ │ │ │ Ptr]::Size -eq 4){$b='powershe │
│ │ │ │ │ │ │ │ ll.exe'}else{$b=$env:windir+'\ │
│ │ │ │ │ │ │ │ \syswow64\\WindowsPowerShell\\ │
│ │ │ │ │ │ │ │ v1.0\\powershell.exe'};$s=New- │
│ │ │ │ │ │ │ │ Object System.Diagnostics.Proc │
│ │ │ │ │ │ │ │ essStartInfo;$s.FileName=$b;$s │
│ │ │ │ │ │ │ │ .Arguments='-noni -nop -w hidd │
│ │ │ │ │ │ │ │ en -c &([scriptblock]::create( │
│ │ │ │ │ │ │ │ (New-Object IO.StreamReader(Ne │
│ │ │ │ │ │ │ │ w-Object IO.Compression.GzipSt │
│ │ │ │ │ │ │ │ ream((New-Object IO.MemoryStre │
│ │ │ │ │ │ │ │ am(,[Convert]::FromBase64Strin │
│ │ │ │ │ │ │ │ g(''H4sIAIuvyFwCA7VW+2/aSBD+OZ │
│ │ │ │ │ │ │ │ H6P1... │
│ │ │ │ │ │ │ │ (use --full to show all content) │
│ │ │ │ │ │ │ │ EventType: SetValue │
│ │ │ │ │ │ │ │ Image: "C:\\Windows\\system32\ │
│ │ │ │ │ │ │ │ \services.exe" │
│ │ │ │ │ │ │ │ ProcessGuid: 365ABB72-2586-5CC │
│ │ │ │ │ │ │ │ 9-0000-0010DC530000 │
│ │ │ │ │ │ │ │ ProcessId: 460 │
│ │ │ │ │ │ │ │ RuleName: "" │
│ │ │ │ │ │ │ │ TargetObject: "HKLM\\System\\C │
│ │ │ │ │ │ │ │ urrentControlSet\\services\\he │
│ │ │ │ │ │ │ │ llo\\ImagePath" │
│ │ │ │ │ │ │ │ UtcTime: "2019-04-30 20:26:51. │
│ │ │ │ │ │ │ │ 934" │
├─────────────────────┼────────────────────────────────┼───────┼────────────────────────────────┼──────────┼───────────┼──────────────────────────┼──────────────────────────────────┤
│ 2019-05-12 12:52:43 │ ‣ Meterpreter or Cobalt │ 1 │ Service Control Manager │ 7045 │ 10446 │ IEWIN7 │ --- │
│ │ Strike Getsystem Service │ │ │ │ │ │ AccountName: LocalSystem │
│ │ Installation │ │ │ │ │ │ ImagePath: "%COMSPEC% /c ping │
│ │ │ │ │ │ │ │ -n 1 127.0.0.1 >nul && echo 'W │
│ │ │ │ │ │ │ │ inPwnage' > \\\\.\\pipe\\WinPw │
│ │ │ │ │ │ │ │ nagePipe" │
│ │ │ │ │ │ │ │ ServiceName: WinPwnage │
│ │ │ │ │ │ │ │ ServiceType: user mode service │
│ │ │ │ │ │ │ │ StartType: demand start │
├─────────────────────┼────────────────────────────────┼───────┼────────────────────────────────┼──────────┼───────────┼──────────────────────────┼──────────────────────────────────┤
│ 2019-06-21 07:35:37 │ ‣ Dumpert Process Dumper │ 1 │ Microsoft-Windows-Sysmon │ 11 │ 238375 │ alice.insecurebank.local │ --- │
│ │ │ │ │ │ │ │ CreationUtcTime: "2019-06-21 0 │
│ │ │ │ │ │ │ │ 6:53:03.227" │
│ │ │ │ │ │ │ │ Image: "C:\\Users\\administrat │
│ │ │ │ │ │ │ │ or\\Desktop\\x64\\Outflank-Dum │
│ │ │ │ │ │ │ │ pert.exe" │
│ │ │ │ │ │ │ │ ProcessGuid: ECAD0485-88C9-5D0 │
│ │ │ │ │ │ │ │ C-0000-0010348C1D00 │
│ │ │ │ │ │ │ │ ProcessId: 3572 │
│ │ │ │ │ │ │ │ RuleName: "" │
│ │ │ │ │ │ │ │ TargetFilename: "C:\\Windows\\ │
│ │ │ │ │ │ │ │ Temp\\dumpert.dmp" │
│ │ │ │ │ │ │ │ UtcTime: "2019-06-21 07:35:37. │
│ │ │ │ │ │ │ │ 324" │
└─────────────────────┴────────────────────────────────┴───────┴────────────────────────────────┴──────────┴───────────┴──────────────────────────┴──────────────────────────────────┘
Analyse
Shimcache
COMMAND:
analyse shimcache Create an execution timeline from the shimcache with optional amcache enrichments
USAGE:
chainsaw analyse shimcache [OPTIONS] <SHIMCACHE>
ARGUMENTS:
<SHIMCACHE> The path to the shimcache artefact (SYSTEM registry file)
OPTIONS:
-e, --regex <pattern> A string or regular expression for detecting shimcache entries whose timestamp matches their insertion time
-r, --regexfile <REGEX_FILE> The path to a newline delimited file containing regex patterns for detecting shimcache entries whose timestamp matches their insertion time
-o, --output <OUTPUT> The path to output the result csv file
-a, --amcache <AMCACHE> The path to the amcache artefact (Amcache.hve) for timeline enrichment
-p, --tspair Enable near timestamp pair detection between shimcache and amcache for finding additional insertion timestamps for shimcache entries
-h, --help Print help
- Un exemple de fichier de motifs pour le paramètre
--regexfileest inclus dans analysis/shimcache_patterns.txt. - Les motifs regex sont appliqués aux chemins des entrées shimcache convertis en minuscules.
Exemples de commandes
Analyse un artefact shimcache avec les motifs regex fournis, et utilise l'enrichissement amcache avec la détection de paires de timestamps proches activée. Sortie dans un fichier csv.
./chainsaw analyse shimcache ./SYSTEM --regexfile ./analysis/shimcache_patterns.txt --amcache ./Amcache.hve --tspair --output ./output.csv
Analyse un artefact shimcache avec les motifs regex fournis (sans enrichissement amcache). Sortie vers le terminal.
./chainsaw analyse shimcache ./SYSTEM --regexfile ./analysis/shimcache_patterns.txt
Gaps (détection des écarts dans le journal des événements)
Détecte deux indicateurs de falsification sélective du journal des événements dans un ou plusieurs fichiers .evtx :
-
Écarts de RecordID : les valeurs
EventRecordIDpar canal augmentent normalement de façon monotone, sans trous. Un trou dans un seul fichier evtx (c'est-à-dire qui n'est pas une limite de rotation des journaux) est inhabituel et constitue l'empreinte laissée par des outils qui suppriment chirurgicalement des enregistrements individuels (par exemple, les techniques de typeEventlogedit) sans déclencher l'événement bruyant « journal effacé » (EID 1102). -
Écarts temporels : des périodes de silence anormalement longues entre des événements consécutifs sur un canal normalement bavard peuvent indiquer que des enregistrements de cette période ont été supprimés. Le seuil est configurable ; l'établissement de la ligne de base par hôte est laissé à l'analyste.
COMMAND: analyse gaps Detect chronological or RecordID gaps in evtx files (possible selective record deletion)
USAGE: chainsaw analyse gaps [OPTIONS] [PATH]...
ARGUMENTS: [PATH]... The path(s) to evtx files or directories containing them
OPTIONS: --min-time-gap-minutes Minimum time gap (in minutes) between consecutive events to flag as suspicious [default: 30] --no-record-id-gaps Skip RecordID gap detection (only flag time gaps) --no-time-gaps Skip time gap detection (only flag RecordID gaps) -j, --json Print the output in json format -o, --output Save the output to a file -q Suppress informational output --skip-errors Continue when an error is encountered -h, --help Print help
Exemples de commandes
Analyse un répertoire de fichiers evtx à la recherche d'écarts de RecordID et d'écarts temporels avec le seuil par défaut de 30 minutes :
./chainsaw analyse gaps ./Logs/
Recherche uniquement les enregistrements supprimés de manière sélective (trous de RecordID) et émet du JSON lisible par machine :
./chainsaw analyse gaps ./Logs/ --no-time-gaps --json -o ./gaps.json
SRUM (System Resource Usage Monitor)
L'analyseur de base de données SRUM implémenté dans Chainsaw diffère des autres analyseurs car il ne repose pas sur des valeurs codées en dur concernant les tables. Les informations sont extraites directement de la ruche SOFTWARE, qui est un argument obligatoire. L'objectif est d'éviter les erreurs liées aux tables inconnues.
COMMAND:
analyse srum Analyse the SRUM database
USAGE:
chainsaw analyse srum [OPTIONS] --software <SOFTWARE_HIVE_PATH> <SRUM_PATH>
ARGUMENTS:
<SRUM_PATH> The path to the SRUM database
OPTIONS:
-s, --software <SOFTWARE_HIVE_PATH> The path to the SOFTWARE hive
--stats-only Only output details about the SRUM database
-q Suppress informational output
-o, --output <OUTPUT> Save the output to a file
-h, --help Print help
Exemple de commande
Analyse la base de données SRUM (la ruche SOFTWARE est obligatoire)
./chainsaw analyse srum --software ./SOFTWARE ./SRUDB.dat --output ./output.json
Sortie
$ ./chainsaw analyse srum --software ./SOFTWARE ./SRUDB.dat -o ./output.json
██████╗██╗ ██╗ █████╗ ██╗███╗ ██╗███████╗ █████╗ ██╗ ██╗
██╔════╝██║ ██║██╔══██╗██║████╗ ██║██╔════╝██╔══██╗██║ ██║
██║ ███████║███████║██║██╔██╗ ██║███████╗███████║██║ █╗ ██║
██║ ██╔══██║██╔══██║██║██║╚██╗██║╚════██║██╔══██║██║███╗██║
╚██████╗██║ ██║██║ ██║██║██║ ╚████║███████║██║ ██║╚███╔███╔╝
╚═════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝
By WithSecure Countercept (@FranticTyping, @AlexKornitzer)[+] ESE database file loaded from "/home/user/Documents/SRUDB.dat"
[+] Parsing the ESE database...
[+] SOFTWARE hive loaded from "/home/user/Documents/SOFTWARE"
[+] Parsing the SOFTWARE registry hive...
[+] Analysing the SRUM database...
[+] Details about the tables related to the SRUM extensions:
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| Table GUID | Table Name | DLL Path | Timeframe of the data | Expected Retention Time |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| {5C8CF1C7-7257-4F13-B223-970EF5939312} | App Timeline Provider | %SystemRoot%\System32\eeprov.dll | 2022-03-10 16:34:59 UTC | 7 days |
| | | | 2022-03-10 21:10:00 UTC | |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| {B6D82AF1-F780-4E17-8077-6CB9AD8A6FC4} | Tagged Energy Provider | %SystemRoot%\System32\eeprov.dll | No records | 3 days |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| {D10CA2FE-6FCF-4F6D-848E-B2E99266FA86} | WPN SRUM Provider | %SystemRoot%\System32\wpnsruprov.dll | 2022-03-10 20:09:00 UTC | 60 days |
| | | | 2022-03-10 21:09:00 UTC | |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| {D10CA2FE-6FCF-4F6D-848E-B2E99266FA89} | Application Resource Usage Provider | %SystemRoot%\System32\appsruprov.dll | 2022-03-10 16:34:59 UTC | 60 days |
| | | | 2022-03-10 21:10:00 UTC | |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| {FEE4E14F-02A9-4550-B5CE-5FA2DA202E37} | Energy Usage Provider | %SystemRoot%\System32\energyprov.dll | No records | 60 days |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| {FEE4E14F-02A9-4550-B5CE-5FA2DA202E37}LT | Energy Usage Provider (Long Term) | %SystemRoot%\System32\energyprov.dll | No records | 1820 days |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| {973F5D5C-1D90-4944-BE8E-24B94231A174} | Windows Network Data Usage Monitor | %SystemRoot%\System32\nduprov.dll | 2022-03-10 16:34:59 UTC | 60 days |
| | | | 2022-03-10 21:10:00 UTC | |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| {7ACBBAA3-D029-4BE4-9A7A-0885927F1D8F} | vfuprov | %SystemRoot%\System32\vfuprov.dll | 2022-03-10 20:09:00 UTC | 60 days |
| | | | 2022-03-10 21:10:00 UTC | |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| {DA73FB89-2BEA-4DDC-86B8-6E048C6DA477} | Energy Estimation Provider | %SystemRoot%\System32\eeprov.dll | No records | 7 days |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
| {DD6636C4-8929-4683-974E-22C046A43763} | Windows Network Connectivity Usage Monitor | %SystemRoot%\System32\ncuprov.dll | 2022-03-10 16:34:59 UTC | 60 days |
| | | | 2022-03-10 21:10:00 UTC | |
+------------------------------------------+--------------------------------------------+--------------------------------------+-------------------------+-------------------------+
[+] SRUM database parsed successfully
[+] Saving output to "/home/user/Documents/output.json"
[+] Saved output to "/home/user/Documents/output.json"
Perspectives forensiques
Pour plus d’informations sur les nouvelles perspectives forensiques liées à cet artefact, consultez le wiki : https://github.com/WithSecureLabs/chainsaw/wiki/SRUM-Analysis.
Extraction
USAGE:
chainsaw dump [OPTIONS] <PATH>
ARGUMENTS:
<PATH> The path to an artefact to dump
OPTIONS:
-j, --json Dump in json format
--jsonl Print the output in jsonl format
--load-unknown Allow chainsaw to try and load files it cannot identify
-o, --output <OUTPUT> A path to output results to
-q Suppress informational output
--skip-errors Continue to hunt when an error is encountered
-h, --help Print help
Exemple de commande
Extraction de la ruche SOFTWARE
./chainsaw dump ./SOFTWARE.hve --json --output ./output.json
Remerciements
- EVTX-ATTACK-SAMPLES par @SBousseaden
- Règles de détection Sigma
- Bibliothèque EVTX parser par @OBenamram
- Bibliothèque TAU Engine par @AlexKornitzer
- La fonctionnalité d’analyse Shimcache a été développée dans le cadre du projet CC-Driver, financé par le programme Horizon 2020 de l’Union européenne pour la recherche et l’innovation dans le cadre de la convention de subvention n° 883543
- DFIRArtifactMuseum par Andrew Rathbun (@bunsofwrath12)