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
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
Comment l'utiliser ?
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 :
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
root@kitploit:~
-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
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 ;
root@kitploit:~
.\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
Détournements COM potentiels
Extensions LSA non standard
Présence de DNSServerLevelPluginDll
Détournement d'utilitaire Explorateur\MyComputer
Vérification de Terminal Services InitialProgram
Programmes de démarrage RDP
Commandes de télémétrie Microsoft
Fournisseurs AMSI non standard
DLL d'erreur LUI des paramètres Internet
DLL d'extension PeerDist
Vérifications ErrorHandler.CMD
DLL de diagnostic intégré
DLL MiniDumpAuxiliary
DLL KnownManagedDebugger
DLL de couche de compatibilité WOW64
Détournement MSC de l'Observateur d'événements
Analyse des chaînes de désinstallation
DLL PolicyManager
DLL de portefeuille SEMgr
Gestionnaires d'exceptions d'exécution WER
Aide HTML (.CHM)
Artefacts d'outils d'accès à distance (Fichiers, Répertoires, Clés de registre)
Vérifications de DLL ContextMenuHandler
Présence d'Office AI.exe
Plugins Notepad++
Détournements de registre MSDTC
Détournement de DLL Narrateur (MSTTSLocEnUS.DLL)
Vérifications d'emplacement de fichier suspect
Vérification de BootVerificationProgram
Vérifications de DiskCleanupHandler
Vérifications d'isolement de basse intégrité
Logiciel installé au nom suspect
Statut du mode de restauration des services d'annuaire
Modifications du descripteur de sécurité du gestionnaire de contrôle des services
Machines virtuelles du sous-système Windows pour Linux
Analyse des extensions de navigateur
TODO
Ajouter des conseils d'analyse/correction pour chaque détection dans le Wiki GitHub (En cours)
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