ADS ist keine Krankheit
Versteckte Datenströme im NTFS-Dateisystem. Funktion, Anwendung und Missbrauch durch Malware

Alternate Data Streams (ADS) sind ein Feature des NTFS-Dateisystems, das oft in der IT-Security-Welt diskutiert wird. Dieser Artikel beleuchtet die Grundlagen von ADS, demonstriert ihre praktische Anwendung und erklärt die technischen Hintergründe.
Ich habe bereits über verschiedene Aspekte von Steganografie und Kryptografie berichtet:

Thematisch gehört dieser Beitrag ein wenig zur Steganografie. Aber eigentlich nur, weil man meistens vergisst danach zu suchen.
Ich möchte hier den ursprünglichen Zweck als auch die Relevanz für Malware betrachten. Ziel ist es, ein gutes Verständnis für ADS zu vermitteln und die potenziellen Risiken aufzuzeigen.
Was sind Alternate Data Streams?
Alternate Data Streams (ADS), zu Deutsch "alternative Datenströme", sind eine Funktion des NTFS-Dateisystems von Microsoft Windows. Sie ermöglichen es, mehr als einen Datenstrom mit einer einzigen Datei zu assoziieren. Jede Datei im NTFS-Dateisystem besteht aus mindestens einem Datenstrom, dem sogenannten $DATA
Datenstrom. Dieser Hauptdatenstrom enthält die üblichen Dateiinformationen. ADS erlauben es, zusätzliche Datenströme an eine Datei anzuhängen, ohne den Hauptdatenstrom oder die sichtbaren Dateiattribute zu verändern.
Diese zusätzlichen Datenströme sind standardmäßig im Windows Explorer oder in der normalen Kommandozeilenansicht nicht sichtbar. Sie werden nicht in der Dateigröße angezeigt und sind für den Benutzer auf den ersten Blick nicht erkennbar. ADS werden durch einen Doppelpunkt (:
) gefolgt vom Namen des Datenstroms an den Dateinamen angehängt. Beispielsweise könnte an die Datei datei.txt
ein ADS namens geheim.txt
angehängt werden, indem man auf den Datenstrom über datei.txt:geheim.txt
zugreift.
Praktische Beispiele
Um die Funktionsweise von ADS zu demonstrieren, werden im Folgenden einige praktische Beispiele in der Windows-Kommandozeile gezeigt.
Erstellen eines Alternate Data Streams:
Um einen ADS zu erstellen und Daten hineinzuschreiben, kann der echo
-Befehl in Kombination mit der ADS-Syntax verwendet werden.
echo "Dies ist ein versteckter Datenstrom" > datei.txt:geheim.txt
Dieser Befehl erzeugt, falls nicht vorhanden, die Datei datei.txt
und erstellt einen ADS namens geheim.txt
. Der Text "Dies ist ein versteckter Datenstrom" wird in diesen ADS geschrieben.
Anzeigen des Hauptdatenstroms:
Der Inhalt des Hauptdatenstroms von datei.txt
kann mit dem type
-Befehl angezeigt werden. Da wir bisher nur einen ADS erstellt haben, ist der Hauptdatenstrom leer, sofern die Datei nicht bereits existierte und Inhalt hatte.
type datei.txt
Die Ausgabe ist leer oder zeigt den ursprünglichen Inhalt, falls datei.txt
bereits existierte.
Anzeigen des Alternate Data Streams:
Um den Inhalt des ADS geheim.txt
anzuzeigen, wird wiederum der type
-Befehl verwendet, diesmal mit der ADS-Syntax.
type datei.txt:geheim.txt
Dieser Befehl gibt den Inhalt des ADS aus: Dies ist ein versteckter Datenstrom
.
Auflisten von Dateien mit ADS:
Standardmäßig zeigt der dir
-Befehl keine ADS an. Um ADS sichtbar zu machen, muss der Parameter /r
verwendet werden.
dir /r
Die Ausgabe des dir /r
Befehls zeigt nun Dateien mit ADS in einer zusätzlichen Spalte <Datei-ADS>
. Dort wird die Größe des ADS, falls vorhanden, angezeigt. Für datei.txt:geheim.txt
würde man in dieser Spalte die Größe des ADS geheim.txt
sehen. Die normale Dateigröße von datei.txt
bleibt unverändert, da sie sich auf den Hauptdatenstrom bezieht.
Lesen des ADS mit more
:
Auch der Befehl more
kann verwendet werden, um den Inhalt eines ADS anzuzeigen:
more < datei.txt:geheim.txt
Dieser Befehl zeigt ebenfalls den Inhalt des ADS geheim.txt
an.
Löschen eines Alternate Data Streams:
Um einen ADS zu löschen, kann der Befehl del
mit der ADS-Syntax verwendet werden.
del datei.txt:geheim.txt
Dieser Befehl löscht den ADS geheim.txt
von der Datei datei.txt
. Der Hauptdatenstrom und die Datei datei.txt
selbst bleiben erhalten.
Nicht nur in der Kommandozeile
Ich kann auch Programme starten, die ADS dann direkt nutzen. Folgende Beispiele sollen zum nachdenken anregen.
Keylogger direkt in Notepad anschauen:
%windir%\system32\notepad.exe %windir%\system32\notepad.exe:keystrokes.txt
Eine Datei, die auf jedem Windows-System vorhanden ist, ist notepad.exe
. Es erregt wenig Verdacht, dort Informationen zu verstecken.
Bilder bearbeiten:
photoshop.exe zeugnis.pdf:spionagefoto.jpg
Hier könnten Bilder einer Werks-Spionage verbessert werden...
Größere Dateien anhängen
Es ist entsprechend einfach, bereits vorhandene Daten an unscheinbar aussehende anzuhängen.
Firmengeheimnisse exfiltrieren:
type raketenbauplaene.pdf > C:\inetpub\wwwroot\default.asp:you_just_lost_it.pdf
Nutzt eine Firma tatsächlich noch einen Microsoft-Webserver und der obige Befehl ist durchführbar, dann kann der Angreifer die Unterlagen auch über eine URL folgender Art abgreifen:
https://www.lame-company.de/default.asp%3Ayou_just_lost_it.pdf
Ganze Archive verstecken:
type verschlüsseltes_passwortgeschuetztes.7z > coole_musik.mp3:coverbilder.7z
Hier wird ein 7z Archiv an scheinbar belanglose Musik gehängt.
Kombination mit Verschlüsselung
Die Datei, die man in einem ADS versteckt, muss natürlich nicht offensichtlich im Klartext vorliegen. Sie kann natürlich vorher verschlüsselt werden. Wie das geht habe ich ja bereits vorgestellt.
Technische Grundlagen: NTFS und Alternate Data Streams
Die Möglichkeit, Alternate Data Streams zu nutzen, ist tief in der Architektur des NTFS-Dateisystems verwurzelt. NTFS behandelt Dateien als eine Sammlung von Attributen. Eines dieser Attribute ist der bereits erwähnte $DATA
Datenstrom, der den Hauptinhalt der Datei enthält. ADS sind im Wesentlichen zusätzliche $DATA
-Attribute, die an eine Datei angehängt werden können.
Jede Datei und jedes Verzeichnis in NTFS wird als ein Datensatz in der Master File Table (MFT) repräsentiert. Dieser MFT-Eintrag enthält Attribute, die Metadaten und die Dateidaten selbst beschreiben. Attribute sind in Attributlisten organisiert und können resident oder non-resident sein. Residente Attribute sind klein und werden direkt im MFT-Eintrag gespeichert. Non-resident Attribute, wie der $DATA
Datenstrom großer Dateien oder eben ADS, werden außerhalb des MFT-Eintrags in Clustern auf der Festplatte gespeichert. Der MFT-Eintrag enthält dann Zeiger auf diese externen Daten.
ADS werden als unbenannte oder benannte $DATA
-Attribute innerhalb des MFT-Eintrags einer Datei verwaltet. Der Doppelpunkt (:
) in der ADS-Syntax dient dazu, auf diese zusätzlichen $DATA
-Attribute zuzugreifen. Das NTFS-Dateisystem handhabt diese zusätzlichen Datenströme transparent, wodurch Anwendungen und das Betriebssystem selbst auf diese Weise Metadaten oder zusätzliche Informationen an Dateien anfügen können, ohne den Hauptdatenstrom zu verändern.
Übertragung über das Netz
Es ist sogar möglich, diese Dateien über das Netz zu übertragen, ohne dass der zusätzliche Inhalt verloren geht. Voraussetzung ist natürlich NTFS auf dem Zielsystem.
Aber auch das Übertragungsprotokoll muss mit ADS umgehen können. FTP kann dies zum Beispiel nicht. Experimente mit SMB waren jedoch erfolgreich.
Ursprung und Zweck von Alternate Data Streams
Alternate Data Streams wurden in NTFS eingeführt, um die Kompatibilität mit dem Dateisystem HFS+ von Apple macOS zu gewährleisten. HFS+ verwendete sogenannte "Resource Forks" und "Data Forks". Data Forks entsprachen dem Hauptdatenstrom in NTFS, während Resource Forks für Metadaten wie Dateityp, Icons und andere Ressourcen verwendet wurden.
Um eine reibungslose Interoperabilität zwischen Windows und macOS zu ermöglichen, implementierte Microsoft ADS in NTFS. So konnten Resource Forks von macOS-Dateien beim Kopieren auf NTFS-Volumes in ADS gespeichert werden und umgekehrt. Dies erlaubte es, Metadaten und Ressourcen von macOS-Dateien auch unter Windows zu erhalten, auch wenn Windows selbst dieses Konzept nicht nativ nutzte.
Obwohl der ursprüngliche Zweck die Kompatibilität war, wurden ADS auch für andere Zwecke genutzt. Beispielsweise verwendet der Internet Explorer (und später andere Browser) ADS, um die "Zone-Information" zu speichern. Wenn eine Datei aus dem Internet heruntergeladen wird, speichert Windows in einem ADS namens Zone.Identifier
die Information, aus welcher Sicherheitszone die Datei stammt (z.B. Internet, Lokales Intranet). Diese Information wird von Windows verwendet, um Sicherheitswarnungen anzuzeigen, wenn der Benutzer versucht, potenziell unsichere Dateien auszuführen.
ADS und Malware
Die versteckte Natur von Alternate Data Streams macht sie zu einem attraktiven Werkzeug für Malware-Autoren. Schadcode kann in einem ADS versteckt werden, wodurch er für den Benutzer und für viele herkömmliche Sicherheitslösungen unsichtbar wird.
Verstecken von Schadcode:
Malware kann ausführbaren Code in einem ADS ablegen. Da ADS standardmäßig nicht angezeigt werden, kann der Schadcode unentdeckt auf dem System verbleiben. Ein harmlos erscheinendes Programm oder Skript kann dann so manipuliert werden, dass es den versteckten Schadcode im ADS ausführt.
Umgehen von Sicherheitsmaßnahmen:
Viele Antivirenprogramme und andere Sicherheitslösungen scannen standardmäßig nur den Hauptdatenstrom von Dateien. Wenn Schadcode in einem ADS versteckt ist, kann er möglicherweise die Erkennung umgehen. Obwohl moderne Antivirenprogramme in der Regel auch ADS scannen, war dies in der Vergangenheit nicht immer der Fall, und es gibt immer noch Möglichkeiten, die Erkennung zu erschweren.
Persistenz von Malware:
ADS können verwendet werden, um Malware persistent zu machen. Auch wenn die zugehörige "Host"-Datei (der Hauptdatenstrom) bereinigt oder gelöscht wird, kann der ADS mit dem Schadcode weiterhin auf dem System vorhanden sein, sofern er nicht explizit entfernt wird.
Datenexfiltration:
ADS können auch für die Datenexfiltration genutzt werden. Sensible Daten können in einem ADS einer unauffälligen Datei versteckt und dann unbemerkt übertragen werden.
Erkennung und Entfernung von ADS-basierter Malware:
Um ADS-basierte Malware zu erkennen und zu entfernen, ist es wichtig, Tools zu verwenden, die ADS berücksichtigen. Moderne Antivirenprogramme scannen in der Regel auch ADS. Zusätzlich gibt es spezielle Tools und Befehle, um ADS aufzuspüren und zu entfernen. Der bereits erwähnte dir /r
Befehl ist ein erster Schritt, um ADS sichtbar zu machen. Für eine detailliertere Analyse und Entfernung können spezialisierte Security-Tools oder Skripte verwendet werden, die das NTFS-Dateisystem gründlich untersuchen.
Wer eine EDR Lösung sein Eigen nennt, freut sich hier sicherlich darüber, das sein System automatisch diesbezüglich beobachtet und geschützt ist.

Fazit
Alternate Data Streams sind ein mächtiges, aber oft übersehenes Feature des NTFS-Dateisystems. Ursprünglich für die Kompatibilität mit macOS eingeführt, ermöglichen sie das Verstecken von Datenströmen an Dateien. Während ADS legitime Anwendungen haben, birgt ihre versteckte Natur auch Risiken, insbesondere im Kontext von Malware. Ein Verständnis von ADS und deren potenziellen Missbrauch ist für IT-Security-Experten unerlässlich, um Systeme effektiv zu schützen und Bedrohungen zu erkennen.