Red Team Tactics: Techniques avancées de surveillance des processus dans les opérations offensives

Rebonjour. A la veille du Pentest. Pratique des tests de pénétration »a traduit un autre matériel intéressant pour vous.




Dans cet article, nous allons comprendre les capacités des utilitaires de surveillance de processus bien connus et montrer comment utiliser la technologie sous-jacente à ces outils pour les opérations offensives de l'équipe rouge.

Une bonne compréhension technique du système sur lequel nous nous appuyons est un critère clé pour prendre des décisions sur la prochaine étape de l'opération. La collecte et l'analyse de données sur les processus en cours d'exécution dans des systèmes compromis nous fournissent une mine d'informations et nous aident à comprendre le fonctionnement de l'infrastructure informatique de l'organisation cible. De plus, les données de processus périodiquement demandées nous aident à répondre aux changements environnementaux et à recevoir des signaux de déclenchement lorsqu'une enquête commence.

Pour pouvoir collecter des données de processus détaillées sur des points de terminaison compromis, nous avons créé une boîte à outils qui a réuni la puissance des utilitaires de processus avancés et des cadres C2 (tels que Cobalt Strike).

Les outils (et leur code source) peuvent être trouvés ici .

Utilitaires système internes Windows


Pour commencer, nous déterminerons quels utilitaires peuvent être utilisés pour collecter des informations sur les processus informatiques sous Windows. Nous apprenons ensuite comment ces utilitaires collectent des informations afin de pouvoir les utiliser ultérieurement dans les kits d'outils Red Team.

Le système d'exploitation Windows est équipé de nombreux utilitaires prêts à l'emploi pour l'administration du système. Bien que la plupart des outils fournis conviennent à des fins d'administration de système de base, certains d'entre eux n'ont pas les fonctions nécessaires pour le dépannage et la surveillance avancés. Par exemple, le gestionnaire de tâches Windows nous donne des informations de base sur tous les processus en cours d'exécution dans le système, mais que faire si nous avons besoin d'informations plus détaillées, telles que des descripteurs d'objet, des connexions réseau ou des modules chargés dans le cadre d'un processus spécifique?

Pour collecter ces informations, il existe un outil plus avancé. Par exemple, les utilitaires système du package Sysinternals. En tant que membre de l'équipe rouge avec une vaste expérience en administration de réseaux et de systèmes, j'ai toujours été un grand fan de Sysinternals.

Lors du dépannage d'un système de serveur à exécution lente ou d'un ordinateur client infecté, j'ai le plus souvent commencé à dépanner à l'aide d'outils tels que Process Explorer ou Procmon.
Du point de vue de la criminalistique numérique, ces outils semblent également très utiles pour effectuer une analyse dynamique de base d'échantillons de logiciels malveillants et rechercher des artefacts dans des systèmes infectés. Alors, pourquoi ces outils sont-ils si populaires auprès des administrateurs système et des professionnels de la sécurité? Découvrons-le, en explorant certaines informations de processus que nous pouvons obtenir en utilisant l'outil Process Explorer.

Utilisation de Process Explorer


La première chose que nous voyons au démarrage de Process Explorer est une liste / arborescence de tous les processus en cours d'exécution du système. Cela nous donne des informations sur les noms des processus, leurs identifiants, le contexte de l'utilisateur et le niveau d'intégrité des informations de processus et de version. Des informations supplémentaires peuvent également être reflétées en ajustant les colonnes en conséquence.



Si nous utilisons le panneau du bas, nous serons en mesure d'afficher tous les modules chargés par un processus particulier, ou de passer à l'affichage des descripteurs afin de se familiariser avec tous les objets descripteurs nommés qui sont utilisés par le processus:



La navigation dans les modules peut être utile lors de la recherche de bibliothèques malveillantes chargées dans le processus, ou pour Red Team, il s'agit d'un produit de sécurité actif (par exemple, EDR) qui a implémenté un module de connexion API en mode utilisateur.



Le passage à l'affichage des descripteurs vous permet de vous familiariser avec le type et le nom de tous les objets nommés utilisés dans le processus. Cela peut être utile pour savoir quels fichiers et clés de registre sont ouverts, quels canaux nommés sont utilisés pour la communication interprocessus.
Si vous double-cliquez sur le nom du processus, une fenêtre contenant des informations plus détaillées apparaîtra. Regardons quelques onglets pour en savoir plus sur les propriétés supplémentaires de l'objet:



Onglet Imageaffiche des informations sur le chemin binaire, le répertoire de travail et les options de ligne de commande. De plus, il affiche des informations sur le contexte utilisateur, le processus parent, le type d'image (x86 ou x64) et bien plus encore.



L'onglet Threads contient des informations sur l'exécution des threads dans le processus. Lorsque vous sélectionnez un flux, puis cliquez dessus, le bouton de pile reflétera la pile d'appels pour ce flux particulier. Pour afficher les threads / appels lancés en mode noyau, Process Explorer utilise le pilote du noyau, qui est installé lorsque vous travaillez en mode élevé.

Du point de vue de DFIR, les informations sur les threads sont utiles pour détecter les injections en mémoire, par exemple, lorsqu'il existe une menace de virus sans fichier. Ainsi, les flux qui ne sont pas sauvegardés par des fichiers sur le disque peuvent signaler un comportement suspect. Pour plus d'informations sur les threads et la mémoire, je recommande fortement de prêter attention à l'outil Process Hacker .



Un autre onglet intéressant dans Process Explorer est l'onglet TCP / IP. Vous y verrez toutes les connexions réseau associées à ce processus. D'un point de vue d'attaque, cela peut être utile pour comprendre quand une connexion est établie à partir d'un système compromis. Une session distante PowerShell entrante ou une session RDP peut signaler qu'une enquête a déjà commencé.

Utilisation des méthodes discutées pour l'attaque


Maintenant que nous avons appris un peu de choses intéressantes sur les processus et sur les informations que nous pouvons collecter à leur sujet à l'aide de Process Explorer, vous vous demandez peut-être comment accéder à ces informations à partir de nos frameworks C2 préférés. Bien sûr, nous pourrions utiliser PowerShell, car cela nous donnerait la possibilité d'utiliser un langage de script puissant et une API Windows. Cependant, aujourd'hui PowerShell est sous la surveillance constante du service de sécurité, nous essayons donc d'éviter cette méthode.

Dans Cobalt Strike, nous pouvons utiliser la commande ps dans le contexte des balises. Cette commande affiche des informations de base sur le processus en fonction de tous les processus en cours d'exécution dans le système. En combinaison avec un script @r3dQu1nn ProcessColor, cette méthode est probablement la meilleure pour obtenir des données de processus.

La sortie de la commande ps est utile pour trier rapidement les processus en cours d'exécution, mais ils ne contiennent pas d'informations détaillées qui vous aideraient à mieux comprendre le système. Pour collecter des informations plus détaillées, nous avons créé nos propres utilitaires pour obtenir des informations sur les processus. Avec leur aide, nous pouvons collecter et enrichir les informations obtenues à partir de systèmes compromis.

Outils PS


Il n'est pas facile de répliquer les fonctionnalités et les informations fournies par un outil tel que Process Explorer. Nous devons d'abord découvrir comment ces outils fonctionnent sous le capot (et en mode utilisateur), puis nous devons comprendre comment mieux refléter ces informations dans la console, et non dans l'interface graphique.

Après avoir analysé le code source, il est devenu clair que de nombreux outils de bas niveau pour fournir des informations système sont largement basés sur l'API NtQuerySystemInformation native . Bien que l'API et ses structures associées ne soient pas entièrement documentées, cette API vous permet de collecter de nombreuses informations sur le système Windows. Donc, en utilisant NtQuerySystemInformationcomme point de départ pour la collecte d'informations sur les processus en cours d'exécution dans le système, nous utiliserons le PEB des processus individuels pour collecter des informations détaillées sur chacun d'entre eux. En utilisant l'API NtQueryInformationProcess, nous pouvons lire la structure PROCESS_BASIC_INFORMATIONà l'aide du descripteur de processus et la trouver PebBaseAddress. Ensuite, nous utilisons l' NtReadVirtualMemoryAPI pour lire la structure RTL_USER_PROCESS_PARAMETERS, ce qui nous permettra de connaître les paramètres ImagePathNameet le CommandLineprocessus.

En utilisant ces API comme base de notre code, nous avons écrit les outils suivants pour obtenir des informations sur les processus:

  • Psx : affiche une liste détaillée de tous les processus en cours d'exécution sur le système.
  • Psk : affiche les informations du noyau, y compris les pilotes chargés.
  • Psc: TCP-.
  • Psm: ( , ).
  • Psh: (, , ).
  • Psw: .

Tous ces outils sont écrits en C en tant que DLL réfléchissantes et peuvent être intégrés de manière réfléchie dans un processus généré à l'aide d'un framework C2, tel que Cobalt Strike (ou tout autre framework prenant en charge les injections de DLL réfléchissantes). Pour Cobalt Strike, nous avons ajouté un script d'agresseur qui peut être utilisé pour charger des outils à l'aide du gestionnaire de scripts Cobalt Strike.

Examinons chaque outil spécifique lancé dans Cobalt Strike afin de démontrer la fonctionnalité et de montrer quelles informations peuvent être collectées en l'utilisant:

Psx


Cet outil affiche une liste détaillée de tous les processus en cours d'exécution sur le système. La sortie peut être comparée aux informations de l'écran principal de Process Explorer. Psx affiche le nom du processus, son identifiant, le PID parent, l'heure de création et les informations relatives aux fichiers binaires du processus (architecture, nom de l'entreprise, version, etc.). Comme vous pouvez le voir, il affiche également des informations intéressantes sur le noyau actif du système, par exemple, l'adresse de base du noyau, qui est utile lors de l'utilisation du noyau (par exemple, pour calculer les décalages des gadgets ROP). Toutes ces informations peuvent être collectées à partir d'un contexte utilisateur normal (sans élévation de privilèges).



Si nous avons suffisamment d'autorisations pour ouvrir le descripteur de processus, vous pouvez lire des informations supplémentaires, telles que le contexte de l'utilisateur et le niveau d'intégrité de son jeton. L'énumération du PEB et des structures associées vous permet d'obtenir des informations sur le chemin de l'image et les paramètres de ligne de commande:



comme vous l'avez peut-être remarqué, nous lisons et affichons les informations de version à partir d'images de processus binaires, par exemple, le nom et la description de l'entreprise. Connaissant le nom de l'entreprise, vous pouvez facilement répertorier tous les produits de sécurité actifs du système. En utilisant cet outil, nous comparons les noms des entreprises de tous les processus actifs avec une liste de fournisseurs bien connus de produits de sécurité et affichons les résultats:



Psk


Cet outil reflète des informations sur le noyau en cours d'exécution, y compris tous les modules de pilotes chargés. Comme l'outil Psx, il fournit également un résumé de tous les modules de noyau chargés à partir de produits de sécurité bien connus.



Psc


Cet outil utilise les mêmes méthodes pour afficher des informations sur les processus actifs que Psx , sauf qu'il n'affiche que les processus avec une connexion réseau active (IPv4, IPv6 TCP, RDP, ICA):



Psm


Vous pouvez utiliser cet outil pour obtenir des informations détaillées sur un processus spécifique. Il affichera une liste de tous les modules (DLL) utilisés par le processus et la connexion réseau:



Psh


Identique à Psm , mais au lieu de modules chargés, il affiche une liste de descripteurs de processus:



Psw


Le dernier mais non le moins important outil Psw . Cet outil affichera une liste des processus avec des poignées de fenêtre actives, ceux qui sont ouverts sur le bureau de l'utilisateur, y compris les titres de fenêtre. Ceci est utile pour déterminer quelles interfaces d'application graphique l'utilisateur ouvre sans avoir à prendre des captures d'écran du bureau:



Cas d'utilisation


Vous vous demandez peut-être: "Et comment tout cela nous aide-t-il dans les opérations offensives?" Après avoir accédé à un actif compromis, nous utilisons généralement ces informations aux fins suivantes:

  • Détectez les outils de sécurité sur un actif compromis. Non seulement par les informations de processus, mais aussi par les modules chargés.
  • Détection de moteurs à crochet personnalisés.
  • Recherche d'opportunités de manœuvres (via des sessions réseau) et d'escalade de privilèges.

Après le premier compromis, vous pouvez périodiquement demander des informations similaires sur les processus et commencer à créer des déclencheurs. Par exemple, nous entrons automatiquement ces informations dans RedELK . Vous pouvez ensuite créer des alertes concernant des modifications suspectes dans les informations de processus, telles que:

  • Lancez un outil d'audit de sécurité ou installez un nouveau produit de sécurité de point final.
  • Connexions réseau entrantes du service de sécurité via une session RDP ou PowerShell distant.
  • Ouverture d'une poignée par un autre processus sur l'un de nos artefacts malveillants (par exemple, un fichier utilisé pour préserver la présence).

Conclusion


Dans cet article, nous avons montré comment des outils tels que Sysinternals Process Explorer peuvent être utilisés pour obtenir des informations détaillées sur les processus en cours d'exécution sur le système, et comment ces informations peuvent aider les administrateurs et les professionnels de la sécurité à dépanner et à vérifier le système pour des problèmes de sécurité ou performance.

Les mêmes informations sont également pertinentes et utiles pour Red Team, qui ont accès à des systèmes compromis pendant le fonctionnement. Il permet de mieux comprendre le système et l'infrastructure informatique de votre objectif, et la remise en question périodique d'un tel système permet à l'équipe rouge de répondre à d'éventuels changements de l'environnement (par exemple, un déclencheur d'enquête).

Nous avons répliqué certaines des fonctionnalités fournies par des outils tels que Process Explorer, afin que nous puissions utiliser les mêmes informations dans des opérations offensives. Pour ce faire, plusieurs outils de surveillance des processus ont été créés et peuvent être utilisés dans le cadre du C2, par exemple Cobalt Strike. Nous avons montré comment utiliser ces outils et quelles informations vous pouvez utiliser pour les collecter.

Ces outils sont disponibles sur notre page GitHub et sont prêts à être utilisés dans le cadre de Cobalt Strike.



En savoir plus sur le cours.



All Articles