Techniques d'évasion C2 : Comprendre les profils C2 malléables

26 avril 2021
Joshua St. Hilaire
Director of Security Research
Techniques d'évasion C2 : Comprendre les profils C2 malléables

Voici le deuxième article de notre série sur les techniques d'évasion en matière de commandement et de contrôle (C2), dans lequel je parle des profils C2 malléables. Consultez mon premier blog où j'examine une méthode connue sous le nom de JA3 signature randomization.

Les profils C2 malléables ont été largement adoptés et utilisés par Cobalt Strike, un framework populaire utilisé par les pen-testers et les groupes de menaces persistantes avancées (APT). Il convient de noter que si les profils malléables sont familiers aux utilisateurs de Cobalt Strike, leur utilisation a commencé à se répandre dans d'autres frameworks C2. À l'heure où nous écrivons ces lignes, les profils malléables sont également utilisés dans Empire C2 depuis la version 3.4. Ce qui rend cette évolution encore plus intéressante, c'est que l'équipe d'Empire a récemment annoncé un partenariat avec Kali Linux, une distribution de pen-testing populaire, ce qui augmentera la prévalence de l'utilisation des profils malléables.

Profils malléables pour l'évasion

Les profils malléables pour le C2 permettent à l'acteur d'échapper non seulement à la détection sur le fil des outils de détection basés sur le réseau, mais aussi aux produits de sécurité endpoint . Le niveau de "malléabilité" permet aux opérateurs de Cobalt Strike non seulement de personnaliser entièrement la forme et le calendrier des balises C2, mais aussi de personnaliser les fonctions sur cible telles que l'injection de processus et les méthodes d'obscurcissement en mémoire. La sécurité opérationnelle est toujours une préoccupation lors de l'exécution d'agents dans un environnement cible. Ainsi, la surveillance de la sécurité du réseau est toujours un élément à prendre en compte pour maintenir la furtivité des commandes et des contrôles. Supposons que, lorsque des attaquants installent des agents sur des machines compromises au sein de votre réseau, le trafic généré par ces agents lorsqu'ils se connectent au serveur C2 utilise des user-agents, des URI ou d'autres artefacts identiques ou similaires qu'il est facile de repérer. Le risque de détection de ces activités serait exceptionnellement élevé si elles étaient connues à l'avance en raison de leur utilisation répétée. Il est donc nécessaire de transformer ou de modeler le trafic de manière à ce qu'il puisse se fondre dans le trafic "normal" attendu ou simplement utiliser de nouvelles valeurs à chaque exécution. L'une ou l'autre de ces approches permettrait d'échapper à la détection. Une autre motivation pour l'utilisation de profils malléables est le désir de tester des menaces connues. Si je peux configurer un agent et un serveur C2 pour qu'ils ressemblent exactement à l'apparence d'un logiciel malveillant sur le réseau ou sur une cible endpoint , je peux alors voir si ma pile de détection du réseau ou la surveillance de la sécurité endpoint est en mesure de signaler l'activité.

C'est là que la malléabilité entre en jeu. Il convient de passer en revue certaines des options offertes à l'opérateur pour personnaliser le C2. En outre, en résumé, nous parlerons de la façon dont ces options rendent la détection difficile, en particulier avec les stratégies de détection basées sur les signatures. Je séparerai le résumé des fonctionnalités entre le réseau et endpoint. Les options présentées ne doivent en aucun cas être considérées comme une liste exhaustive.

L'évasion par la personnalisation

Quel que soit le protocole réseau, par exemple HyperText Transfer Protocol (HTTP) ou HTTPS, les agents communiqueront avec les serveurs d'une manière spécifique. Si l'on utilise le protocole HTTP, de nombreux éléments d'une conversation HTTP peuvent être inspectés par les défenses de la couche réseau. Par exemple, les chaînes d'un en-tête HTTP qui sont suffisamment uniques peuvent être utilisées par les défenseurs pour détecter les connexions sur le fil. Des éléments tels que des agents utilisateurs uniques, des chaînes d'acceptation personnalisées et des valeurs de chemin d'accès uniques sont tous ouverts à l'inspection.

Avec les profils malléables, il suffit de reproduire les valeurs d'un programme légitime, telles que celles de l'en-tête HTTP, pour que la connexion semble identique à des connexions bénignes telles que l'agent de mise à jour de Microsoft Windows, par exemple. La capture d'écran ci-dessous montre une reconstruction Wireshark d'une session HTTP utilisant un profil malléable Cobalt Strike Windows update.

Figure 1 : Profil malléable de Cobalt Strike Windows Update

Il convient de souligner que des transformateurs de données sont disponibles pour coder les données avant leur transmission. Cela n'est peut-être pas évident, mais l'Uniform Resource Identifier (URI) qui suit la requête HTTP GET dans la capture d'écran ci-dessus est codé en base 64 avant la transmission, puis décodé du côté du serveur. La liste suivante énumère les transformations de données disponibles dans Cobalt Strike.

Tableau 1 : Transformations des données de Cobalt Strike

En outre, plusieurs transformations peuvent être combinées. Ainsi, base64 et masque, par exemple, peuvent être superposés pour renforcer l'OPSEC.

Même dans les cas où HTTPS est utilisé, des valeurs peuvent encore être manipulées, comme les certificats SSL (Secure Sockets Layer). Le certificat SSL suivant est utilisé par les profils de mise à jour Windows mentionnés précédemment :

Outre le contrôle précis de la manière dont les connexions apparaissent sur le fil, les valeurs temporelles qui contrôlent le moment où le client se connecte au serveur C2 peuvent également être manipulées par le biais de profils malléables. Des valeurs telles que la gigue et le délai permettent aux attaquants de modifier l'intervalle de temps entre les connexions C2.

Endpoint malléable

La malléabilité n'est pas seulement utilisée lorsque l'agent envoie des données sur le réseau, mais aussi lorsqu'il contrôle les caractéristiques en mémoire, la manière dont il s'injecte dans les processus et les tâches de post-exploitation. Cela permet d'échapper à la détection et à la réponse (EDR) de endpoint et à la détection antivirus. L'exemple ci-dessous montre quelques options relatives au comportement de l'agent sur le site cible endpoint qui peuvent être définies dans des profils malléables.

Figure 2 : Exemple d'options malléables liées à endpoint dans le profil Cobalt Strike havex.

Le bloc stage permet de contrôler la manière dont l'agent se charge en mémoire. Des éléments tels que le nom, la date de compilation, les autorisations de mémoire, l'obscurcissement ainsi que le type de chargeur peuvent être spécifiés. Souvent, les analystes qui recherchent un code malveillant chargé dans un processus vérifient d'abord les segments de mémoire et se concentrent sur les segments chargés avec l'autorisation RWX dans les segments de mémoire suspects.

Les options d'injection de processus permettent de modeler le contenu injecté. Vous pouvez remplir les données à l'aide d'options de transformation, définir la méthode d'allocation et contrôler les autorisations. Enfin, vous pouvez également contrôler les tâches de post-exploitation en choisissant différents noms de tuyaux à utiliser, en utilisant l'injection intelligente et en spécifiant les emplacements de spawn. C'est très utile pour contourner et tester les solutions EDR. Pour un aperçu plus complet, vous pouvez consulter le guide en ligne Cobalt Strikes.

Défis pour les défenseurs

Le fait de permettre une telle granularité dans le contrôle des communications C2 et du comportement de mise en scène fait de la défense et de la détection à l'aide de signatures une tâche difficile. Il convient également de souligner que si Cobalt Strike permet la malléabilité depuis un certain temps, d'autres frameworks C2 populaires comme Empire C2 adoptent également des profils malléables. Ceci, associé au fait que leur utilisation augmente dans les intrusions récentes des acteurs APT et ransomware, rend la tâche des défenseurs de plus en plus complexe.

Les technologies de défense des réseaux et de endpoint devront soit avoir des signatures rapidement mises à jour, soit utiliser d'autres moyens d'investigation pour détecter les commandes et les contrôles qui ne reposent pas sur des schémas répétés dans les données ou même sur des séquences temporelles qui correspondent à l'activité de balisage.

▼ En savoir plus sur la façon dont Vectra AI utilise l'IA pour détecter les canaux de commandement et de contrôle.