DGA-Familien mit dynamischen Startwerten: Unerwartetes Verhalten in DNS-Traffic
Redaktion und weitere Kommentare von Tricia Howard und Lance Rhodes
Zusammenfassung
Forscher von Akamai zeigen und erklären, warum sichin DNS-Trafficdaten (DNS: Domain Name System)Verhalten von DGA-Familien (DGA: Domain Generation Algorithm) mit dynamischen Startwerten beobachten lässt, das sich von dem unterscheidet, was ihr Reverse-Engineering-Algorithmus vermuten lässt.
Das geänderte Verhalten legt nahe, dass Cyberkriminelle versuchen, die Fähigkeit der DGA-Familien zur Verlängerung der Lebensdauer ihrer C2-Kommunikationskanäle (Command and Control) weiter zu erhöhen und so ihre Botnetze zu schützen.
Für Sicherheitsforscher ist es schwieriger, die zukünftig generierten Domainnamen für DGAs mit dynamischen Startwerten vorherzusagen, als dies bei DGAs mit statischen Startwerten der Fall ist.
Ein genauerer Blick auf die DGA-Familien Pushdo und Necurs zeigt, dass sie sowohl vor als auch nach dem erwarteten Generierungsdatum schädliche Domains ausgeben.
Einführung
In diesem Blogbeitrag geben wir einen kurzen Überblick über DGAs, bevor wir über einige interessante Ergebnisse berichten.
Die Akamai Security Intelligence Group ist in der Lage, anonymisierte Protokolle von DNS-Abfragen zu analysieren, die von CacheServe-DNS-Servern stammen. Im Rahmen unserer Bemühungen zur Botnet-Erkennung beobachten und überwachen wir das reale Verhalten von mehr als 100 bekannten DGA-Familien.
Wir haben herausgefunden, dass DGAs mit dynamischen Startwerten (eine Untergruppe von DGAs) oft ein signifikant anderes Verhalten aufweisen, als der per Reverse Engineering rekonstruierte DGA-Algorithmus vermuten ließe. Konkret beobachten wir, dass DGA-Domainnamen vor dem erwarteten Generierungsdatum aktiviert werden.
Was sind DGAs (Domain Generation Algorithms)?
Malware, wie zum Beispiel Botnets, muss häufig mit einem zentralisierten Server kommunizieren, um Befehle oder Updates zu empfangen.
DGAs sind Algorithmen, die in Malware verwendet werden, um eine große Anzahl von halbzufälligen Domainnamen zu generieren.
Ein infiziertes Gerät versucht regelmäßig, eine Verbindung mit dem gesamten Satz algorithmisch generierter Domains herzustellen, die vom DGA bereitgestellt werden. Es muss nur eine Domain erfolgreich erreicht werden, damit eine Verbindung zum C2-Server hergestellt werden kann. Dies erschwert es den Experten für Cybersicherheit, die C2-Kommunikation zu unterbinden.
So funktioniert es
Stellen Sie sich beispielsweise ein Botnet vor, das eine hypothetische DGA-Familie oder -Variante verwendet, die 500 schädliche Domainnamen pro Tag generiert.
Ein infiziertes Gerät, das diese DGA-Familie verwendet, fragt jeden Tag alle 500 dieser Domainnamen ab. Der C2-Server des Botnets generiert an jedem Tag die gleichen 500 Domainnamen (wir gehen davon aus, dass derselbe Startwert verwendet wird – mehr dazu später). Der Cyberkriminelle muss jedoch nur eine dieser 500 Domains kontrollieren, damit die Kommunikation mit den infizierten Rechnern (Bots) hergestellt werden kann.
Manchmal ändert sich der Startwert, wodurch eine neue Domain-Gruppe generiert wird, und der Prozess beginnt von vorn. Dies erschwert es Sicherheitsforschern, den schädlichen Traffic zu blockieren, da die Domains häufig wechseln und oft zufällig aussehende Domains sind, wie zum Beispiel „ghlidae[.]com“.
Die Top-Level-Domains (TLDs) sind hartcodiert und meist auf TLDs beschränkt, die günstig zu erwerben sind.
Es gibt viele verschiedene DGAs. Sobald die Sicherheits-Community einen neuen Algorithmus entdeckt (und es manchmal schafft, ihn rückzuentwickeln), erhält er in der Regel einen „Familiennamen“. Einige der bekanntesten DGA-Familien sind Conficker, Mirai und CryptoLocker.
Die Geschichte der DGAs
Malware, wie zum Beispiel Botnets, Crimeware und Ransomware muss mit den infizierten Geräten kommunizieren. Bevor es DGAs gab, codierten die Malware-Autoren einfach die Domain oder eine Liste von Domains in den Malware-Code. Infizierte Rechner versuchten dann regelmäßig, eine Verbindung zu diesen hartcodierten Domains herzustellen, um die Kommunikation mit dem C2-Server aufzubauen.
Sobald die Sicherheitsteams den Quellcode der Malware in die Hände bekamen, war es ein Leichtes, all diese hartcodierten Domains auf eine Blockliste zu setzen.
Forscher: 1. Schurken: 0.
Die erste Malware-Familie, die DGAs implementierte, war Anfang 2008 die Kraken-Familie. Doch es war die Conficker-Familie, die später im selben Jahr DGAs bekannt machte.
Conficker.A generierte 250 Domainnamen pro Tag. Conficker.C übertraf diesen Wert noch einmal deutlich und spuckte sagenhafte 50.000 Domains pro Tag aus. Dies führte plötzlich dazu, dass Sicherheitsteams jeden Tag haufenweise neue Domains erkennen und sperren mussten. Die Cyberkriminellen brauchten dagegen jeden Tag nur einen dieser Domainnamen zu kontrollieren.
Forscher: 1. Schurken: 1.
Leistungsstärkere C2-Kommunikation
Mit DGAs konnte die Leistung der C2-Kommunikation gesteigert werden, was die Weiterentwicklung folgender Bereiche ermöglichte:
DDoS-Angriffe (Distributed Denial of Service)
Kryptomining
Verkauf vertraulicher Informationen von infizierten Geräten
Spyware
Werbung und E-Mail-Betrug
Selbstverbreitung von Malware
Dies sind einige der Kampagnen, die die Cybersicherheits-Community bis heute plagen. DGAs haben sich als überaus effektiv erwiesen.
Was sind dynamische und statische Startwerte?
Es gibt zwei Hauptkategorien von DGAs: dynamische Startwerte und statische Startwerte. Um den Unterschied zu verstehen, muss man zuerst das Konzept des „Startwerts“ verstehen.
Der Startwert ist im Grunde ein Starteingang für einen Pseudozufallszahlengenerator (Pseudorandom Number Generator, PRNG). Der Startwert hat einen direkten Einfluss auf die Ausgabe jedes Algorithmus, der einen PRNG verwendet.
Beispiel: Eine bestimmte DGA-Familie, die einen Startwert von 42 verwendet, gibt immer genau die gleiche Liste von Domainnamen aus. Wird der Startwert auf einen anderen Wert geändert, zum Beispiel auf 50, ergibt sich eine vollständig anderer Output.
Wie man sich denken kann, spielt der Startwert eine entscheidende Rolle für DGAs. Infizierte Botnet-Geräte müssen nicht nur den gleichen DGA-Algorithmus wie die C2-Server verwenden, mit denen sie Kontakt aufnehmen müssen. Sie müssen auch den gleichen Startwert verwenden.
DGA-Startwerte können auf verschiedene Weise und auf der Grundlage verschiedener Quellen erzeugt werden
Wenn sich die DGA-Startwerte im Laufe der Zeit nicht ändern (oft sind sie hartcodiert), bezeichnen wir sie als DGAs mit statischem Startwert.
Einige DGAs verwenden Startwerte, die sich im Laufe der Zeit ändern. Diese bezeichnen wir als DGAs mit dynamischem Startwert.
DGAs mit statischem Startwert
Statische Startwerte können zufällige Zahlen, Namen von Prominenten, die Unabhängigkeitserklärung, ein Wörterbuch oder alles sein, was Cyberkriminelle einfach gegen etwas anderes austauschen können.
Diese Startwerte bleiben in der Regel über einen langen Zeitraum konstant und erzeugen eine konsistente Sequenz von Domainnamen.
Diese Kombinationen von DGAs und Startwerten bleiben nur so lange wirksam, wie für den Algorithmus kein Reverse Engineering durchgeführt wird und der Startwert nicht von Cybersicherheitsforschern entdeckt wird. Wenn dieser Punkt erreicht ist, werden alle generierten Domainnamen unverzüglich auf Sperrlisten gesetzt. Die Cyberkriminellen müssen dann den Startwert ändern, um eine neue Liste mit Domainnamen zu generieren.
Intern bezeichnen wir DGAs mit statischen Startwerten einfach als „statische DGAs“. Diese Bezeichnung verwenden wir auch im weiteren Verlauf diese Beitrags.
DGAs mit dynamischen Startwerten
DGAs mit dynamischen Startwerten (oder einfach „dynamische DGAs“) sollen Sicherheitsforschern das Leben noch schwerer machen.
Dynamische DGAs verwenden zeitabhängige Startwerte. Am häufigsten wird das aktuelle Datum verwendet. Es gibt auch DGAs, die Devisenkurse, Temperaturen oder auch Google-Trends oder Twitter-Trendthemen verwenden.
Wenn der Startwert vorhersagbar ist, können wir Sicherheitsexperten vorhersagen, welche Domainnamen der DGA zu einem bestimmten Zeitpunkt in der Zukunft erstellen wird. Voraussetzung dafür ist natürlich, dass für die DGA-Familie erfolgreich ein Reverse Engineering durchgeführt wurde.
Wenn der Startwert auf dem Datum basiert, sehen wir in der Regel die gleichen Domainnamen in 24-Stunden-Zeitfenstern (das heißt, jeden Tag kurz nach Mitternacht wird eine neue Gruppe von Domains generiert).
Wenn wir wissen, welche DGA-Domains morgen aktiviert werden, können wir diese Domains proaktiv auf unsere Sperrlisten setzen, um Endnutzer vor Botnets zu schützen.
Leider ist dieses Szenario bei nicht vorhersagbaren Startwerten wie Google-Trends, Temperaturen oder Devisenkursen nicht möglich. Selbst wenn wir den Quellcode der Familie haben, sind wir nicht in der Lage, zukünftig generierte DGA-Domainnamen korrekt vorherzusagen.
Dynamische DGAs: Mythos versus Realität
Unser Forschungsteam hat unerwartetes Verhalten für mehr als ein Dutzend DGAs beobachtet und untersucht. Zwei besonders interessante Fälle wollen wir uns genauer ansehen.
Beide Beispiele beziehen sich auf dynamische DGA-Familien, die das Datum als Startwert verwenden. Das bedeutet: Wenn wir den Startwert (das Datum) mit dem rückentwickelten DGA kombinieren, sollten wir vorhersagen können, welche Domainnamen zu welchem Zeitpunkt in DNS-Abfrageprotokollen auftauchen werden.
Unsere Vorhersagen vergleichen wir mit dem, was wir tatsächlich in den DNS-Trafficdaten gesehen haben.
Aus Gründen der Kürze verwenden wir im weiteren Verlauf dieses Abschnitts einfach „DGA“ oder „DGA-Familie“ als Kürzel für „dynamische DGA-Familien, die das Datum als Startwert verwenden“.
Anzeige von DGAs in Trafficdaten
Abbildung 1 gibt uns einen allgemeinen Überblick über die DGAs in unseren Trafficdaten. Zum richtigen Verständnis der Darstellung benötigen wir ein wenig Kontext.
Als Erstes wollen wir die Achsen bestimmen.
Die X-Achse zeigt die Zeitdifferenz (gemessen in der Anzahl von Tagen) zwischen dem erwarteten Datum (dem Startwert-Datum) und dem beobachteten Datum, an dem Domainnamen aus der DGA-Familie in DNS-Trafficdaten angezeigt werden.
Die Y-Achse gibt die eindeutige Anzahl der Domains an, die in Trafficdaten erscheinen.
Wir erwarten, dass sich der Startwert alle 24 Stunden ändert. Das heißt, dass der DGA jeden Tag direkt nach Mitternacht aus dem neuen Startwert eine neue Gruppe von Domainnamen aktiviert. Das würde bedeuten, dass wir für einen Zeitraum von 24 Stunden denselben Satz von Domainnamen haben, der sich dann ändert. Dies wird durch den roten Bereich der Grafik dargestellt. Der rote Balken zeigt an, was wir in einer idealen Welt ohne Latenz von diesen DGA-Familien erwarten können.
Der violette Balken rechts zeigt an, was zu erwarten ist, wenn wir die Latenz in verschiedenen Phasen berücksichtigen, bevor die DNS-Daten unsere Systeme erreichen. Die meisten Latenzzeiten führen nur zu einer leichten Verschiebung nach rechts. Sie bemisst sich normalerweise in Minuten oder Stunden statt in Tagen – es sei denn, dass sie beabsichtigt ist.
Auf der linken Seite zeigt sich jedoch etwas Unerwartetes, das durch den grünen Balken dargestellt wird. Was passiert hier? Wir beobachten die DGA-Domainnamen vor ihrem theoretischen Generierungsdatum!
Dieses seltsame Verhalten deutet darauf hin, dass die Cyberkriminellen diese DGAs geändert haben, um die Erkennung weiter zu erschweren und ihre schädlichen Aktivitäten abzusichern.
Traffic der Pushdo-Familie
Für die Pushdo-Familie erwarten wir, dass uns alle abgefragten Domains in einem 24-Stunden-Zeitfenster zwischen 0 und 1 Tag auf der X-Achse angezeigt werden (Abbildung 2). Dies wird durch den rot gefärbten Bereich dargestellt.
Was wir beobachten, ist eine Verteilung eindeutiger Domainnamen im Traffic von -50 bis +50 Tagen ab dem erwarteten Datum. Die Spitze liegt bei 10.000, unmittelbar vor der Nullmarke.
Es scheint, als sei der Startwert (das Datum) um bis zu 50 Tage durch etwas verschoben worden, das wie eine Normalverteilung aussieht.
Python-Code hierfür könnte wie folgt aussehen:
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')
Wir interpretieren dies als Versuch von Cyberkriminellen, Sicherheitsexperten zu frustrieren oder zu verwirren.
Uns verwirrt das zum Glück nicht! Unsere DGA-Erkennungssysteme decken das gesamte Spektrum ab, das in Abbildung 2 zu sehen ist.
Traffic der Necurs-Familie
Für die Necurs-Familie sehen wir eine Verteilung eindeutiger Domainnamen von -7 bis +7 Tagen (Abbildung 3). Um die 12-Tage-Marke herum gibt es noch eine deutlich niedrigere Spitze, aber sie ist groß genug, um sie als beabsichtigt zu interpretieren.
Dies deutet darauf hin, dass eine Untergruppe von Cyberkriminellen lange genug wartet, um dieselbe Gruppe von Domains zu verwenden, aber ihre Nutzung auf 7 Tage nach dem erwarteten Datum verschiebt und Domainnamen um diese 7 Tage verzögert.
Fazit
Bei der Analyse der Aktivität von dynamischen DGAs in DNS-Anfragen haben wir unerwartetes Verhalten beobachtet. Wir kommen zu dem Schluss, dass diese Anomalien Cyberkriminellen zugeschrieben werden können, die die DGA-Startwerte auf verschiedene Weise verändern. Die beiden untersuchten DGA-Familien, Pushdo und Necurs, geben schädliche Domains sowohl vor als auch nach dem erwarteten Generierungsdatum aus – und zwar bis zu 50 Tage vor und nach dem erwarteten Generierungsdatum.
Unserer Analyse zufolge ist dies ein Versuch, DGA-Erkennungssystemen auszuweichen und die Arbeit von Sicherheitsforschungsteams zu erschweren. Solange Cyberkriminelle weiter nach Möglichkeiten suchen, ihre Botnets zu schützen und die Lebensdauer ihrer C2-Kommunikationskanäle zu verlängern, ist es Aufgabe der Sicherheitsexperten, diesen Maßnahmen entgegenzuwirken und das Reale in Abgrenzung zum Erwarteten effektiver zu erkennen.
Wir halten Sie auf dem Laufenden
Wenn Sie in Echtzeit über die neuesten Sicherheitsstudien auf dem Laufenden gehalten werden möchten, folgen Sie uns auf Twitter.