Dragage de Windows pour la persistance
Qu'est-ce que c'est ?
Trawler est un script PowerShell conçu pour aider les intervenants en réponse aux incidents à découvrir des indicateurs potentiels de compromission sur les hôtes Windows, principalement axé sur les mécanismes de persistance, notamment les tâches planifiées, les services, les modifications du registre, les éléments de démarrage, les modifications de binaires, etc.
Actuellement, trawler peut détecter la plupart des techniques de persistance spécifiquement mentionnées par MITRE et Atomic Red Team, avec des détections ajoutées régulièrement.
Principales fonctionnalités
- Analyse du système d'exploitation Windows pour une variété de techniques de persistance (listées ci-dessous)
- Sortie CSV avec métadonnées de technique MITRE et de démarrage d'investigation
- Documentation de guidance d'analyse et de correction (https://github.com/joeavanzato/Trawler/wiki/Analysis-and-Remediation-Guidance)
- Attribution de risque dynamique pour chaque détection
- Listes d'autorisation intégrées pour les configurations Windows courantes couvrant Windows 10/Server 2012|2016|2019|2022 pour réduire le bruit
- Capture des métadonnées de persistance depuis une image d'entreprise 'dorée' (instantané) pour une utilisation comme liste d'autorisation dynamique à l'exécution
- Analyse des images de disque montées via le réacheminement de lecteur
Téléchargez et exécutez simplement trawler.ps1 depuis une invite PowerShell/CMD Administrative - toutes les détections seront affichées dans la console et écrites dans un CSV ('detections.csv') dans le répertoire de travail actuel. Le CSV généré contiendra le nom de la détection, la source, le risque, les métadonnées et la technique MITRE correspondante.
Ou utilisez cette ligne unique depuis un terminal PowerShell Administrateur :
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/joeavanzato/Trawler/main/trawler.ps1'))
Certaines détections disposent de listes d'autorisation intégrées pour aider à éliminer le bruit des configurations Windows par défaut (10/2016/2019/2022) - tâches planifiées attendues, services, etc. Bien sûr, il est toujours possible pour les attaquants de détourner directement ces éléments et de se faire passer avec beaucoup de détails pour un processus OS par défaut - prenez soin d'utiliser plusieurs formes d'analyse et de détection face à des adversaires compétents.
Si vous avez des exemples ou des idées pour des détections supplémentaires, n'hésitez pas à soumettre un Issue ou un PR avec les détails techniques/références pertinents - la base de code est un peu désordonnée pour le moment et sera nettoyée au fil du temps.
De plus, si vous identifiez des faux positifs évidents, veuillez me le signaler en ouvrant un issue ou un PR sur GitHub ! Les coupables évidents seront les COM, Services ou Tâches non standard.
Paramètres CLI
-scanoptions : Parcourir les détections possibles et sélectionner un sous-ensemble à l'aide de termes séparés par des virgules (ex. .\trawler.ps1 -scanoptions Services,Processes) ou passer pour effectuer toutes les détections
-quiet : Supprimer la sortie des détections dans la console
-snapshot : Chemin vers une sortie JSON précédente de trawler à utiliser comme liste d'autorisation.
-outpath : Définir un chemin de fichier personnalisé pour enregistrer la sortie des détections (par défaut "$PSScriptRoot\detections.csv")
-drivetarget : Définir la variable pour un lecteur cible monté (ex. .\trawler.ps1 -targetdrive "D:") - (par défaut système local)
-daysago : Définir combien de 'jours en arrière' nous voulons prendre en compte pour les détections basées sur le temps (par défaut 45)
-hashmode : Définir l'algorithme de hachage que nous voulons utiliser pour les détections prises en charge - prend en charge sha1, md5 ou sha256 (par défaut sha1)
-evtx : Activer la création d'une source de journal des événements et l'écriture des détections dans le journal des événements d'application sous Source=trawler avec EID=9001 (par défaut désactivé)
Qu'est-ce qui différencie cela de PersistenceSniper ?
PersistenceSniper est un outil génial - je l'ai beaucoup utilisé par le passé - mais il y a quelques points clés qui différencient ces utilitaires
- trawler est (actuellement) un utilitaire local - il serait assez simple de l'envelopper dans une boucle et d'utiliser WinRM/Sessions PowerShell pour l'exécuter sur des hôtes distants cependant
- trawler implémente des listes d'autorisation pour de nombreuses détections 'bruyantes' afin d'aider à supprimer les détections attendues des configurations par défaut de Windows (10/2016/2019/2022) et celles-ci sont constamment mises à jour (PS fait aussi cela)
PersistenceSniper (pour la plupart) ne contient aucun type de liste d'autorisation - par conséquent, il y a plus de bruit généré lorsqu'on considère des éléments tels que les Services, les Tâches planifiées, l'analyse générale des DLL COM, etc.
- la sortie de trawler est simplifiée - Nom, Risque, Source, Technique MITRE et Métadonnées sont les seuls éléments fournis pour chaque détection afin d'aider les analystes à démarrer leurs efforts de recherche de persistance - c'est une arme à double tranchant.
- L'expression régulière est utilisée dans de nombreux contrôles pour aider à détecter des mots-clés ou des motifs 'suspects' dans divers domaines critiques, y compris le contenu des fichiers scannés, les valeurs du registre, etc. Cela offre un peu plus de flexibilité mais aussi un taux de faux positifs potentiellement plus élevé.
- trawler prend en charge le 'réacheminement de lecteur' pour vérifier les boîtes mortes montées sur une machine d'analyse.
Dans l'ensemble, ces outils sont extrêmement similaires mais abordent le problème sous des angles légèrement différents - PersistenceSniper renvoie toutes les informations à l'analyste pour examen tandis que Trawler essaie de limiter ce qui est renvoyé aux seuls résultats susceptibles d'être des mécanismes de persistance adverses potentiels. En conséquence, il est possible d'avoir des faux négatifs avec trawler si un adversaire imite complètement un élément de la liste d'autorisation.
À titre d'exemple - PersistenceSniper renverra tous les services Windows 'non sûrs' tandis que trawler ne renverra que ceux qui correspondent à une règle de détection spécifique, etc.
Ajustement à votre environnement
Trawler prend en charge le chargement d'une liste d'autorisation à partir d'un 'instantané' - pour ce faire, deux étapes sont nécessaires.
- Exécutez '.\trawler.ps1 -snapshot' sur une "Image Dorée" représentant les serveurs de votre environnement - une fois terminé, en plus du 'detections.csv' standard, un fichier nommé 'snapshots.csv' sera généré
- Ce fichier peut ensuite être utilisé comme entrée pour trawler lors de l'exécution sur d'autres hôtes et les données seront chargées dynamiquement comme liste d'autorisation pour chaque détection appropriée
- '.\trawler.ps1' -loadsnapshot "chemin\vers\snapshot.csv"
C'est tout - toutes les détections pertinentes puiseront alors dans le fichier d'instantané comme liste d'autorisation pour réduire le bruit et identifier tout changement potentiel à l'image de base qui aurait pu se produire.
(La mise en place de listes d'autorisation est implémentée pour la plupart des vérifications mais pas toutes - toujours en cours d'implémentation active)
Réacheminement de lecteur
Souvent lors d'une enquête, les analystes peuvent monter un nouveau lecteur qui représente un périphérique Windows imagé - Trawler prend désormais partiellement en charge l'analyse de ces lecteurs montés via l'utilisation du paramètre '-drivetarget'.
Au moment de l'exécution, Trawler réacheminera les variables temporaires au niveau du script pour une utilisation dans la vérification des artefacts basés sur des fichiers et tentera également de charger les ruches de registre pertinentes (HKLM\SOFTWARE, HKLM\SYSTEM, NTUSER.DATs, USRCLASS.DATs) sous HKLM/HKU et préfixées par 'ANALYSIS_'. Trawler tentera également de décharger ces ruches temporairement chargées à la fin du script.
À titre d'exemple, si vous avez une image montée à un emplacement tel que 'F:\Test' qui contient le système de fichiers NTFS ('F:\Test\Windows', 'F:\Test\User', etc.) alors vous pouvez invoquer trawler comme ci-dessous ;
.\trawler.ps1 -drivetarget "F:\Test"
Veuillez noter que puisque trawler tente de charger les fichiers de ruche de registre à partir du lecteur en question, mapper un chemin UNC vers un périphérique distant en direct ne fonctionnera PAS car ces fichiers ne seront pas accessibles en raison des verrous système. Je travaille sur une approche qui gérera les périphériques distants en direct, restez à l'écoute.
Qu'est-ce qui n'est pas inspecté lors du réacheminement de lecteur ?
- Processus en cours d'exécution
- Connexions réseau
- DLL 'Fantômes'
- Consommateurs WMI (En cours de développement)
- Tâches BITS (En cours de développement)
- Analyse des certificats (En cours de développement)
La plupart des autres vérifications fonctionneront correctement car elles sont entièrement basées sur la lecture des ruches de registre ou des artefacts basés sur des fichiers (ou peuvent être converties pour le faire, comme la lecture directe du XML des tâches au lieu d'utiliser des commandes intégrées.)
Toutes les limitations des vérifications lors du réacheminement de lecteur seront discutées plus en détail dans le Wiki GitHub.
Exemples d'images
Qu'est-ce qui est inspecté ?
- Tâches planifiées
- Utilisateurs
- Services
- Processus en cours d'exécution
- Connexions réseau
- Consommateurs d'événements WMI (Ligne de commande/Script)
- Découverte des éléments de démarrage
- Découverte des tâches BITS
- Modifications des fonctionnalités d'accessibilité Windows
- Existence de profil PowerShell
- Documents approuvés Office
- Compléments Office depuis des emplacements approuvés
- Surveillance SilentProcessExit
- Détournement de DLL Winlogon Helper
- Détournement d'option d'exécution de fichier image
- Ombrage RDP
- Paramètre UAC pour les sessions distantes
- DLL de moniteur d'impression
- Détournement de package de sécurité et d'authentification LSA
- DLL de fournisseur de temps
- DLL de processeur d'impression
- Configuration active de démarrage/ouverture de session
- Détournement de script d'initialisation d'ouverture de session utilisateur
- Détournement d'exécutable d'économiseur d'écran
- DLL Netsh
- DLL AppCert
- DLL AppInit
- Shimming d'application
- Détournement d'objet COM
- Détournement de notification LSA
- Utilisation 'Office test'
- Utilisation de Office GlobalDotName
- Détournement de DLL de services Terminal
- Détournement de DLL Autodial
- Abus de processeur Command AutoRun
- Détournement OTM Outlook
- Détournement de fournisseur de confiance
- Analyse de cible LNK (termes suspects, extensions multiples, EXE multiples)
- Noms de DLL Windows 'Fantômes' chargés dans un processus en cours d'exécution (ex. WptsExtensions.dll non signée)
- Analyse des répertoires OS critiques pour les EXE/DLL non signés
- Détournement de chemin de service non entre guillemets
- Détournement de binaire PATH
- Détournements d'association de fichier courants et mots-clés suspects
- Chasse aux certificats suspects
- Découverte/analyse de script GPO
- Remplacements de DLL de plateforme de développement NLP
- Remplacements de débogage AeDebug/.NET/Script/Processus/WER
- 'Load' de l'Explorateur
- Détournements de startOnUserLogin du terminal Windows
- Inadéquations de chemin d'application
- Inadéquations de DLL/ImagePath de service
- DLL d'extension GPO
TODO
Techniques MITRE évaluées
Veuillez noter que certaines d'entre elles sont (bien sûr) plus détectées que d'autres - par exemple, nous ne détectons pas toutes les modifications possibles du registre mais inspectons plutôt certaines clés pour des changements évidents et utilisons la technique MITRE générique "Modifier le registre" lorsqu'aucune autre technique n'est applicable. Pour d'autres éléments comme le détournement COM, nous inspectons toutes les entrées de la section de registre concernée, vérifions par rapport aux motifs 'connus comme bons' et faisons remonter les valeurs inconnues ou non correspondantes, ce qui donne une surface de détection beaucoup plus complète pour cette technique particulière.
- T1037 : Scripts d'initialisation de démarrage ou d'ouverture de session
- T1037.001 : Scripts d'initialisation de démarrage ou d'ouverture de session : Script d'ouverture de session (Windows)
- T1037.005 : Scripts d'initialisation de démarrage ou d'ouverture de session : Éléments de démarrage
- T1055.001 : Injection de processus : Injection de bibliothèque de liens dynamiques
- T1059 : Interpréteur de commandes et de scripts
- T1071 : Protocole de couche application
- T1098 : Manipulation de compte
- T1112 : Modifier le registre
- T1053 : Tâche planifiée/Travail
- T1136 : Créer un compte
- T1137.001 : Application Office : Macros de modèle Office
- T1137.002 : Démarrage d'application Office : Test Office
- T1137.006 : Démarrage d'application Office : Compléments
- T1176 : Extensions de navigateur
- T1197 : Tâches BITS
- T1505.005 : Composant logiciel serveur : DLL de services Terminal
- T1543.003 : Créer ou modifier un processus système : Service Windows
- T1546 : Exécution déclenchée par événement
- T1546.001 : Exécution déclenchée par événement : Modifier l'association de fichier par défaut
- T1546.002 : Exécution déclenchée par événement : Économiseur d'écran
- T1546.003 : Exécution déclenchée par événement : Abonnement aux événements WMI
- T1546.007 : Exécution déclenchée par événement : DLL d'aide Netsh
- T1546.008 : Exécution déclenchée par événement : Fonctionnalités d'accessibilité
- T1546.009 : Exécution déclenchée par événement : DLL AppCert
- T1546.010 : Exécution déclenchée par événement : DLL AppInit
- T1546.011 : Exécution déclenchée par événement : Shimming d'application
- T1546.012 : Exécution déclenchée par événement : Injection d'options d'exécution de fichier image
- T1546.013 : Exécution déclenchée par événement : Profil PowerShell
- T1546.015 : Exécution déclenchée par événement : Détournement d'objet COM
- T1547.002 : Exécution automatique de démarrage ou d'ouverture de session : Packages d'authentification
- T1547.003 : Exécution automatique de démarrage ou d'ouverture de session : Fournisseurs de temps
- T1547.004 : Exécution automatique de démarrage ou d'ouverture de session : DLL d'aide Winlogon
- T1547.005 : Exécution automatique de démarrage ou d'ouverture de session : Fournisseur de support de sécurité
- T1547.009 : Exécution automatique de démarrage ou d'ouverture de session : Modification de raccourci
- T1547.012 : Exécution automatique de démarrage ou d'ouverture de session : Processeurs d'impression
Références
Cet outil n'existerait pas sans l'incroyable communauté InfoSec - les références les plus notables que j'ai utilisées sont fournies ci-dessous.
Plus de références