Techniques d'évasion C2 : Comprendre la randomisation JA3/S et l'étourdissement du chiffrement

28 janvier 2021
Joshua St. Hilaire
Director of Security Research
Techniques d'évasion C2 : Comprendre la randomisation JA3/S et l'étourdissement du chiffrement

JA3 a gagné en popularité au sein de la communauté de la sécurité pour signaler facilement les outils connus ou les logiciels malveillants à l'aide d'une signature qui peut être générée facilement à partir des valeurs TLS (Transport Layer Security) utilisées lors des communications qui emploient ce type de cryptage. Bien que les signatures JA3 soient faciles à utiliser et semblent constituer un moyen simple pour les défenseurs de détecter les communications malveillantes, elles peuvent tout aussi facilement être altérées pour échapper à la détection et se fondre dans le trafic TLS/SSL normal.

Dans ce billet, nous allons commencer à découvrir certaines des méthodes mises en œuvre dans la nature par les serveurs et les agents de commande et de contrôle (C2) pour échapper à la détection. Nous nous concentrerons sur les techniques d'évasion utilisées par des cadres C2 bien connus qui utilisent plusieurs techniques pour échapper à la détection. En ce qui concerne les signatures JA3 en particulier, les développeurs de ces outils ont fait des efforts pour éviter la détection. En outre, il existe des preuves évidentes que ces mêmes techniques d'évasion sont activement utilisées par les logiciels malveillants pour contourner la détection.

Démêler JA3/S : un abécédaire

Tout d'abord, résumons brièvement ce qu'est JA3 et pourquoi il peut être utilisé pour détecter le trafic malveillant. JA3 est une méthode d'empreinte digitale de la poignée de main TLS qui a été publiée pour la première fois par John Althouse, Jeff Atkinson et Josh Atkins de Salesforce en 2017. Le trafic Internet qui met en œuvre TLS transmet des valeurs les unes aux autres dans le but d'établir une connexion sécurisée. Les valeurs suivantes sont utilisées pour former un hachage JA3 (SSLVersion, Cipher, SSLExtension, EllipticCurve, EllipticCurvePointFormat) et pour le hachage JA3S(SSLVersion,Cipher,SSLExtension). Ces valeurs sont transmises en clair avant le chiffrement afin que le client et le serveur sachent quel type de chiffrement peut être utilisé. Elles constituent la base de ce qui est utilisé pour former un hachage JA3/S. Ces valeurs peuvent être utilisées pour identifier certains types de trafic malveillant lorsqu'elles sont fiables. Pour une explication plus complète, vous pouvez consulter l'article original de SalesForce.

Comprendre la randomisation JA3/S et le Cipher-Stunting

Comme indiqué précédemment, une partie de la signature JA3/S est dérivée du chiffrement. La liste de chiffrement est transmise lors de la négociation client/serveur. L'image d'une capture de paquet ci-dessous en est un exemple.

Figure 1 : Liste de chiffrement transmise lors de l'appel du client TLS

Au cours de ce processus, le serveur choisit le cryptogramme le plus élevé qui est pris en charge par les deux extrémités de la connexion. Cela signifie que pour chaque connexion établie entre un site endpoint et un serveur, la signature JA3/S devrait être la même et donner lieu à la même signature JA3/S. Cependant, en utilisant la randomisation JA3/S, le serveur choisira un algorithme de chiffrement aléatoire dans la liste des algorithmes de chiffrement pris en charge. En utilisant un chiffrement différent, le hachage JA3/S dérivé de ces valeurs sera différent.

Pour échapper à la détection, les auteurs de logiciels malveillants devront modifier les valeurs TLS utilisées, qui sont à la base de la signature JA3. Ce faisant, ils peuvent réussir à contourner la détection. Un moyen facile d'y parvenir est de choisir au hasard une suite de chiffrement. Cette technique est connue sous le nom de randomisation JA3/S.

Une tendance croissante : JA3/S dans les cadres C2

L'équipe de recherche d'Akamai a partagé ses observations à ce sujet. En résumé, les conclusions de leurs recherches montrent que les empreintes TLS ont bondi de 18 652 empreintes distinctes au niveau mondial en août 2018 à plus de 1,3 milliard fin février 2019. Cela suggère que suite aux recherches et à l'intérêt porté par la communauté de la sécurité aux empreintes JA3/S, les auteurs de logiciels malveillants et les contrôleurs de bot ont mis en œuvre des techniques pour contourner les signatures TLS.

La randomisation JA3/S/Cipher-Stunting a également commencé à se glisser dans les Frameworks C2 comme Empire à partir de la version 3.0 master selon le changelog de Github. L'image ci-dessous montre le code source d'Empire GitHub, qui met en évidence un exemple de la façon dont la randomisation JA3 peut être réalisée.

Figure 2 : Randomisation de la signature JA3 par l'utilisation d'un choix aléatoire dans une liste de chiffrements

Échapper à la détection : Plus d'une approche

Comme pour toutes les nouvelles techniques utilisées par la communauté de la sécurité pour identifier les menaces, les attaquants ont toujours été prompts à changer de tactique pour contourner les stratégies de détection. Alors que nous avons vu des outils de l'équipe rouge utiliser la randomisation JA3 pour déjouer la détection, il existe d'autres méthodes pour faire de même. Comme le dit l'adage, "il y a plus d'une façon d'écorcher un chat". Par exemple, l'usurpation d'identité JA3 peut être réalisée en imitant les valeurs TLS des navigateurs courants ou même en utilisant le client HTTPS du système d'exploitation sous-jacent pour contourner la détection.

Conclusion : Le défi de la détection

Il est clair qu'avec toutes les techniques qui peuvent être utilisées par les praticiens de la sécurité pour détecter la "méchanceté", les attaquants s'adapteront rapidement pour continuer à opérer sans être détectés. Il devient difficile d'identifier les cadres C2 avec des signatures JA3 lorsque le cadre met en œuvre la randomisation JA3/S ou une autre technique. Les outils et techniques de sécurité utilisés par les défenseurs doivent être très flexibles et pouvoir s'adapter rapidement aux changements. Si ce n'est pas le cas, C2 continuera à échapper à la détection et à opérer sous le radar des professionnels de la cybersécurité. Les signatures JA3, même sans altération, sont un indicateur peu fiable d'activité malveillante et les techniques décrites dans l'article les rendent encore moins fiables en raison de la facilité avec laquelle elles peuvent être manipulées.

Dans cette optique, les signatures JA3 peuvent être utilisées comme indicateur supplémentaire de compromission, mais il ne faut pas s'y fier outre mesure en raison de leur faible fidélité et de la facilité avec laquelle elles peuvent être falsifiées. Les détections basées sur les signatures ne sont valables que si les données qui les sous-tendent sont dignes de confiance et si elles sont bien tenues à jour. Idéalement, la détection des C2 doit utiliser une stratégie de détection de réseau à multiples facettes, agile et capable de se généraliser. Bien entendu, cette approche nécessite un investissement beaucoup plus important, mais elle s'avérera très rentable à long terme.

Jetez un coup d'œil à mon deuxième blog où j'examine une méthode connue sous le nom de profils C2 malléables.