Familles DGA à graines dynamiques : comportement inattendu au sein du trafic DNS
Commentaires éditoriaux et additionnels de Tricia Howard et Lance Rhodes
Synthèse
Les chercheurs d'Akamai révèlent et expliquent pourquoi nous observons, dans le DNS (système de noms de domaine), un comportement des familles d'algorithmes de génération de domaine (DGA) à graines dynamiques qui est différent de ce que leur algorithme semble suggérer en rétro-ingénierie.
Le comportement modifié suggère que les acteurs malveillants tentent d'augmenter davantage la capacité des familles DGA à prolonger la durée de vie de leurs canaux de communication de commandement et de contrôle (C2), dans le but de protéger leurs botnets.
Les chercheurs en sécurité trouvent plus compliqué de prédire les noms de domaine qui seront générés à l'avenir pour les DGA à graines dynamiques que pour les DGA à graines statiques.
Un examen plus attentif des familles DGA Pushdo et Necurs révèle qu'elles produisent des domaines malveillants avant et après leurs dates de génération prévues.
Introduction
Dans cet article de blog, nous fournirons un aperçu des DGA, puis nous vous ferons part de quelques conclusions intéressantes.
Le groupe Security Intelligence d'Akamai est en mesure d'analyser les journaux anonymisés des requêtes DNS provenant des serveurs DNS CacheServe . Dans le cadre de nos efforts de détection des botnets, nous observons et surveillons le comportement réel de plus de 100 familles de DGA connues.
Nous avons constaté que les DGA à graines dynamiques (un sous-ensemble de DGA) affichent souvent un comportement très différent de celui que semble suggérer leur algorithme en rétro-ingénierie. Plus précisément, nous avons observé des noms de domaine DGA activés avant leur date de génération prévue.
Que sont les algorithmes de génération de domaine ?
Les logiciels malveillants, comme les botnets, doivent souvent communiquer avec un serveur centralisé pour recevoir des commandes ou des mises à jour.
Les DGA sont des algorithmes utilisés dans les logiciels malveillants pour générer un grand nombre de noms de domaine pseudo-aléatoires.
Un terminal infecté tentera régulièrement de se connecter à l'ensemble des domaines générés par algorithme fournis par le DGA. Un seul domaine doit être atteint avec succès pour établir une connexion avec le serveur C2. Il est alors plus difficile pour les chercheurs en cybersécurité de supprimer la communication C2.
Fonctionnement
Imaginez, par exemple, un botnet utilisant une famille DGA ou une variante hypothétique qui génère 500 noms de domaine malveillants par jour.
Un terminal infecté utilisant cette famille DGA interrogera les 500 noms de domaine chaque jour. Le serveur C2 du botnet générera les mêmes 500 noms de domaine quotidiennement (nous supposons que la même graine est utilisée ; nous reviendrons sur ce point plus tard). Cependant, l'acteur malveillant n'a besoin de contrôler qu'un seul de ces 500 domaines pour que la communication avec les machines infectées (bots) soit établie.
Parfois, la graine change, ce qui génère un nouvel ensemble de domaines, et le processus recommence. Il est donc difficile pour les chercheurs en sécurité de bloquer le trafic malveillant, car les domaines changent fréquemment et sont souvent des domaines à l'apparence aléatoires, tels que « ghlidae[.]com ».
Les domaines de niveau supérieur (TLD) sont codés en dur et principalement limités aux TLD peu onéreux à l'achat.
Il existe de nombreuses DGA différentes. Lorsque la communauté de la sécurité découvre un nouvel algorithme (et parvient parfois à l'étudier en rétro-ingénierie), il reçoit généralement un « nom de famille ». Certaines des familles de DGA les plus connues sont Conficker, Miraiet CryptoLocker.
Historique des DGA
Les logiciels malveillants comme les botnets, les kits de piratage et les ransomwares ont besoin de communiquer avec leurs terminaux infectés. Avant la création des DGA, les créateurs de logiciels malveillants se contentaient de coder en dur le domaine, ou une liste de domaines, dans le code du logiciel malveillant. Les machines infectées essayaient alors régulièrement de se connecter à ces domaines codés en dur pour établir la communication avec le serveur C2.
Une fois que les équipes de sécurité parvenaient à extraire le code source du logiciel malveillant, elles n'avaient plus qu'à mettre tous ces domaines codés en dur sur une liste de blocage.
Chercheurs : 1. Pirates : 0.
La première famille de logiciels malveillants à mettre en œuvre des DGA a été la famille Kraken, au début de 2008. Cependant, les DGA ne se populariseront que plus tard cette année-là, grâce à la famille Conficker.
Conficker.A générait 250 noms de domaine par jour. Ensuite, Conficker.C a apporté une montée en puissance fulgurante avec un total de 50 000 domaines par jour. Les équipes de sécurité ont donc soudainement dû détecter et bloquer des hordes de nouveaux domaines chaque jour. Les acteurs malveillants, eux, n'avaient toujours besoin de contrôler qu'un seul de ces noms de domaine chaque jour.
Chercheurs : 1. Pirates : 1.
Renforcement des communications C2
Les DGA ont permis d'accroître la robustesse des communications C2, permettant ainsi de développer :
les attaques par déni de service distribué (DDoS) ;
le minage de cryptomonnaie ;
la vente d'informations sensibles provenant de terminaux compromis ;
les logiciels espion ;
la publicité et la fraude par e-mail ;
l'auto-propagation des logiciels malveillants.
Il s'agit là de quelques-unes des campagnes qui tourmentent encore la communauté de la cybersécurité aujourd'hui. Les DGA se sont révélés très efficaces.
Que sont les graines dynamiques et les graines statiques ?
Les DGA peuvent être classées en deux catégories principales : les graines dynamiques et les graines statiques. Pour comprendre la différence, il faut d'abord comprendre le concept de « graine ».
En substance, une graine est une entrée de départ pour un générateur de nombres pseudo-aléatoires (PRNG). La graine a un impact direct sur la sortie de tout algorithme qui utilise un PRNG.
Par exemple, une famille DGA spécifique utilisant une graine de 42 affichera toujours exactement la même liste de noms de domaine. Remplacer la valeur de la graine, par exemple par 50, créera une sortie complètement différente.
Comme vous pouvez l'imaginer, la graine joue un rôle essentiel dans les DGA. Les terminaux infectés par des botnets doivent non seulement utiliser le même DGA que les serveurs C2 qu'ils doivent contacter, mais aussi utiliser la même graine.
Les graines de DGA peuvent être générées de différentes manières, en s'appuyant sur diverses sources.
Lorsque les graines DGA ne changent pas au fil du temps (souvent codées en dur), nous les appelons DGA à graines statiques.
Certains DGA utilisent des graines qui changent au fil du temps. Nous les appelons DGA à graines dynamiques.
DGA à graines statiques
Les graines statiques peuvent être des nombres aléatoires, des noms de célébrités, la Déclaration d'indépendance, un dictionnaire de mots ou tout ce qu'un acteur malveillant peut échanger avec facilité.
Ces graines restent généralement constantes pendant une longue période et génèrent une séquence de noms de domaine cohérente.
Ces combinaisons de DGA et de graines restent efficaces tant que l'algorithme ne passe pas par un processus de rétro-ingénierie et que la graine n'est pas découverte par les chercheurs en cybersécurité. Après la rétro-ingénierie et la découverte, tous les noms de domaine générés sont rapidement mis sur des listes de blocage. L'acteur malveillant doit alors changer la graine pour générer une nouvelle liste de noms de domaine.
En interne, nous appelons les DGA à graines statiques des « DGA statiques » ; nous utiliserons donc ce terme dans le reste de cet article.
DGA à graines dynamiques
Les DGA à graines dynamiques (ou « DGA dynamiques ») tentent de compliquer davantage le travail des chercheurs en sécurité.
Les DGA dynamiques utilisent des graines dépendant du temps. Le plus souvent, ils reposent sur la date du jour. D'autres DGA utilisent les taux de change, les températures et même les sujets des tendances Google Trends ou Twitter.
Lorsque la graine est prévisible, les chercheurs en sécurité peuvent prédire quels noms de domaine le DGA produira à un certain moment dans le futur. La condition est, bien sûr, que la famille DGA ait fait l'objet d'une rétro-ingénierie réussie.
Si la graine est basée sur la date, nous observons généralement le même ensemble de noms de domaine dans des fenêtres de 24 heures (en d'autres termes, chaque jour juste après minuit, un nouvel ensemble de domaines est généré).
Savoir quels domaines DGA s'activeront le lendemain nous permet de placer proactivement ces domaines sur nos listes de blocage pour protéger les utilisateurs finaux des botnets.
Malheureusement, ce scénario est impossible avec des graines imprévisibles, telles que celles basées sur les tendances Google Trends, les températures ou les taux de change. Même si nous possédons le code source de la famille, nous ne sommes pas en mesure de prédire correctement les futurs noms de domaine DGA qui seront générés.
DGA dynamiques : les attentes et la réalité
Notre équipe de recherche a observé et étudié les comportements inattendus de plus d'une douzaine de DGA. Ici, nous allons en examiner deux présentant un comportement particulièrement intéressant.
Les deux exemples sont des familles DGA dynamiques qui utilisent la date comme graine. Cela signifie qu'en combinant la graine (la date) avec le DGA ayant subi une rétro-ingénierie, nous devrions réussir à prédire quels noms de domaine apparaîtront, et quand, dans les journaux de requêtes DNS.
Nous comparerons nos prédictions avec ce que nous avons réellement observé dans les données de trafic DNS.
Pour plus de concision dans le reste de cette section, nous utiliserons simplement les termes « DGA » ou « famille DGA » pour désigner les « familles DGA dynamiques qui utilisent la date comme graine ».
Vue des DGA dans les données de trafic
La Figure 1 donne une vue générale des DGA dans nos données de trafic. Pour transmettre correctement l'intuition qui sous-tend cette vue, nous avons besoin d'un peu de contexte.
Tout d'abord, définissons les axes.
L'axe des abscisses représente la différence de temps (mesurée en nombre de jours) entre la date prévue (la date de départ) et la date observée à laquelle nous observons les noms de domaine de la famille DGA dans les données de trafic DNS.
L'axe des ordonnées est le nombre unique des domaines observés dans les données de trafic.
Nous nous attendons à ce que la graine change toutes les 24 heures, c'est-à-dire que chaque jour, juste après minuit, le DGA activera un nouvel ensemble de noms de domaine à partir de la nouvelle graine. Cela suggère qu'un ensemble de noms de domaine est disponible pendant 24 heures, puis est remplacé. Ceci est représenté par la barre rouge. La barre rouge nous montre ce que nous nous attendons à observer chez ces familles DGA, dans un monde idéal dépourvu de latence.
À droite, représenté par la barre violette, est ce que nous nous attendons à voir lorsque nous prenons en compte la latence à différents stades, avant que les données DNS n'atteignent nos systèmes. La plupart des périodes de latence ne causeront qu'un léger décalage vers la droite, généralement mesuré en minutes ou en heures plutôt qu'en jours, à moins que la conception impose autre chose.
À gauche, cependant, un événement inattendu est représenté par la barre verte. Que se passe-t-il ici ? Nous observons les noms de domaine DGA avant leurs dates de génération théoriques !
Ce comportement étrange suggère que les acteurs malveillants ont modifié ces DGA pour compliquer davantage la détection et protéger leurs activités malveillantes.
Trafic de la famille Pushdo
Pour la famille Pushdo, nous nous attendons à voir tous les domaines interrogés dans une fenêtre de 24 heures entre 0 et 1 jour sur l'axe des abscisses (Figure 2). Ceci est représenté par la zone ombrée rouge.
Ce que nous observons en fait est une distribution de noms de domaine uniques dans le trafic de -50 à +50 jours à partir de sa date prévue. Le pic se situe à 10 000, juste avant la marque zéro.
Il semble que la graine (la date) a été modifiée jusqu'à 50 jours par quelque chose qui ressemble à une distribution normale.
Le code Python utilisé pour cela pourrait ressembler au suivant :
import numpy as np
import pandas as pd
from datetime import datetime
seed = datetime.now().date()
shift = np.random.normal(loc=0, scale=15, size=1).astype(int)[0]
modified_seed = seed + pd.to_timedelta(f'{shift} days')
Pour nous, cela traduit la volonté d'un acteur malveillant de contrarier ou d'embrouiller les chercheurs en matière de sécurité.
Heureusement, nous sommes passés outre ! Nos systèmes de détection de DGA couvrent tout le spectre visible sur la Figure 2.
Trafic de la famille Necurs
Pour la famille Necurs, nous voyons une distribution des noms de domaine uniques de -7 à +7 jours (Figure 3). Un pic beaucoup plus petit est aussi visible au niveau de la marque +12 jours, mais il est assez grand pour être considéré comme un résultat de la conception.
Cela suggère qu'un sous-ensemble d'acteurs malveillants attendent assez longtemps pour utiliser le même ensemble de domaines, mais en déplaçant son utilisation jusqu'à 7 jours après sa date prévue ; les noms de domaine accusent alors un retard de 7 jours.
Conclusion
Lors de l'analyse de l'activité des DGA à graines dynamiques dans les requêtes DNS, nous avons observé un comportement inattendu. Nous concluons que ces anomalies peuvent être attribuées à des acteurs malveillants qui modifient les graines de DGA de diverses manières. Les deux familles de DGA que nous avons examinées, Pushdo et Necurs, émettent des domaines malveillants avant et après la date de génération prévue, jusqu'à 50 jours avant et après la date de génération prévue.
Notre analyse suggère qu'il s'agirait d'une tentative d'éviter les systèmes de détection des DGA et de compliquer le travail des équipes de recherche en sécurité. Alors que les acteurs malveillants continuent de chercher des moyens de protéger leurs botnets et de prolonger la durée de vie de leurs canaux de communication C2, il incombe aux chercheurs en sécurité de contrer ces techniques et de mieux identifier la réalité par rapport aux attentes.
Restez à l'écoute
Vous pouvez retrouver nos dernières sur la sécurité sur Twitter.