YARA-Regeln werden zur Klassifizierung und Identifizierung von Malware-Proben verwendet, indem Beschreibungen von Malware-Familien auf Grundlage von Text- oder Binärmustern erstellt werden.
In diesem Artikel behandeln wir die folgenden Themen:
YARA-Regeln sind wie ein Stück Programmiersprache – sie funktionieren, indem eine Reihe von Variablen mit Mustern definiert wird, die in einer Malware-Probe gefunden wurden. Wenn je nach Regel einige oder alle Bedingungen erfüllt sind, kann sie verwendet werden, um Malware zu identifizieren.
Bei der Analyse von Malware-Proben können Forscher eindeutige Muster und Strings innerhalb der Malware identifizieren. Anhand dieser lässt sich ermitteln, zu welcher Bedrohungsgruppe und Malware-Familie sie gehört. Durch die Erstellung einer YARA-Regel aus mehreren Proben der gleichen Malware-Familie ist es möglich, mehrere Proben zu identifizieren, die wahrscheinlich alle mit der gleichen Kampagne oder dem gleichen Bedrohungsakteur in Verbindung stehen.
Bei der Untersuchung von Malware kann ein Analytiker eine YARA-Regel für ein neues zu untersuchendes Muster erstellen. Diese Regel kann dann verwendet werden, um seine eigene private Malware-Datenbank oder Online-Repositories wie VirusTotal nach ähnlichen Proben zu durchsuchen.
Wenn der Malware-Analyst für eine Organisation arbeitet, die ein IPS oder eine andere von YARA unterstützte Plattform für den Malware-Schutz einsetzt, dann können YARA-Regeln als Vorfallsreaktions-Tool verwendet werden. Dadurch lassen sich dann bösartige Binärdateien innerhalb der Organisation erkennen.
YARA ist in der Informationssicherheits-Community äußerst beliebt. Der Grund dafür ist, dass es eine Reihe von Anwendungsfällen für YARA-Implementierungen gibt:
Um eine verwendbare YARA-Regel zu erstellen, müssen Sie die verschiedenen Elemente kennen, aus denen benutzerdefinierte YARA-Regeln erstellt werden.
Metadaten haben keinen Einfluss darauf, wonach die YARA-Regel suchen wird, sondern liefern praktische Informationen über die Regel selbst.
Innerhalb einer Malware-Probe lassen sich oft eindeutige und interessante Strings finden. Diese eignen sich ideal zur Erstellung einer YARA-Regel. Um einen String innerhalb einer Regel zu definieren, muss der String selbst als Variable deklariert werden.
Neben der Deklarierung eines Strings können wir auch Modifikatoren nach dem deklarierten String anhängen, um die Suche zu optimieren.
Im Bild unten habe ich den Hex-Editor HxD verwendet. Wir sehen hier einige Strings innerhalb des Tools.
Ich habe die ASCII-Zeichenfolge “\photo.png” hervorgehoben, die entsprechende hexadezimale Darstellung wird ebenfalls hervorgehoben. Mit diesen Informationen können Sie innerhalb einer YARA-Regel einen Hex-String deklarieren.
Einige Strings und eindeutige Kennungen, die sehr gut für YARA-Regeln geeignet sind:
Der Abschnitt „Strings“ definiert die Suchkriterien, die für eine YARA-Regel verwendet werden. Der Abschnitt „Conditions“ (Bedingungen) definiert die Kriterien, nach denen die Regel einen Treffer auslösen soll. Es gibt mehrere Bedingungen, die verwendet werden können und die ich kurz erläutern werde.
Es gibt verschiedene Möglichkeiten, die Bedingung für die Dateigröße anzugeben.
Sobald die Strings innerhalb einer Regel deklariert wurden, können Sie festlegen, wie viele Treffer als Bedingung ausgelöst werden müssen, damit die Regel eine erfolgreiche Bedingung zurückgibt.
Wenn möglich, versuchen Sie, 2–3 Gruppen von Bedingungen zu verwenden, um falsch-positive Ergebnisse zu vermeiden und für eine zuverlässige Regel zu sorgen.
Importe sind eine hervorragende Möglichkeit, zusätzliche Bedingungen in Ihren YARA-Regeln zu implementieren. In diesem Artikel werde ich einige Beispiele für die Verwendung des PE-Imports behandeln.
PE-Bibliothek:
Wenn Sie die Syntax “import pe” zu Beginn einer YARA-Regel hinzufügen, können Sie die PE-Funktionalität von YARA nutzen. Das ist nützlich, wenn Sie keine eindeutigen Zeichenfolgen identifizieren können.
Exporte sind sehr gute Ergänzungen für YARA-Regeln. Dabei handelt es sich um Funktionen, die der Autor der Malware erstellt hat, also achten Sie darauf, ihre eindeutigen Namen zu verwenden. In der Abbildung unten habe ich einige Exporte identifiziert, die von einer DLL verwendet werden, die von einer Formbook-Malware abgelegt wurde.
In der Abbildung unten habe ich winhttp.dll identifiziert, eine interessante DLL, die für HTTP-Konnektivität verwendet wird:
Wir können auch sehen, dass diese Bibliothek eine Reihe interessanter APIs importiert, die in eine Regel aufgenommen werden könnten.
Ein Imphash ist der Hash der Importadressentabelle (IAT), den wir im vorherigen Bild mit PEStudio ermittelt haben. In einer Malware-Familie wird oft dieselbe IAT verwendet. Wenn man sie also in einer YARA-Regel verwendet, sollten sich damit ähnliche Proben erkennen lassen.
Damit ein Datei-Zeitstempel in einer YARA-Regel verwendet werden kann, muss er in einen Unix-Epochen-Zeitstempel umgewandelt werden. Im folgenden Bild habe ich ermittelt, wann die Malware kompiliert wurde.
Mit der Syntax ‘//’ können Kommentare innerhalb der Regel gemacht werden. Unten konnte ich also einen Kommentar hinzufügen, der angibt, was der Epochen-Zeitstempel ist.
Der Versionsbereich von PEStudio zeigt, dass dieses Beispiel von Lokibot einige eindeutige Versionskennungen hat. Mit der Funktion pe.version_info können wir festlegen, welche Versions-Eigenschaften verwendet werden sollen, z. B. das Feld ‘CompanyName’.
Im Bild weiter unten habe ich einige Bereiche in der Malware identifiziert, die in anderen von mir analysierten ausführbaren Windows-Dateien häufig nicht zu finden sind. Mithilfe dieser Informationen kann ich bestimmte Abschnittsnamen und die zugehörige Abschnittsnummer angeben.
Beachten Sie, dass die Abschnitte null-indiziert sind, d. h. der erste Abschnitt wäre ‘0’, der zweite ‘1’ usw. Im folgenden Beispiel habe ich also den Abschnitt mit dem Namen “BSS” verwendet, also Abschnitt Nummer zwei.
Die folgende Abbildung zeigt eine YARA-Regel, die ich auf Grundlage einer Probe der Redline-Malware erstellt habe:
Die YARA-Regel beginnt mit der Syntax ‘rule’, gefolgt von dem Namen der Regel. Das ‘{‘ am Ende des Namens kennzeichnet dann den Inhalt der YARA-Regel.
Direkt darüber habe ich die PE-Funktionalität mit der Anweisung “import pe” importiert. Diese Funktionalität wird im Bedingungsteil der Regel verwendet.
In der Beispielregel habe ich den Autor, den Dateityp der Malware, das Datum, an dem die Regel geschrieben wurde, die Regelversion, einen Verweis darauf, woher ich die Probe habe, sowie einen Hash der Malware angegeben. Dadurch erhalten alle anderen, die die Regel verwenden, einige kontextbezogene Informationen. Auch kann das für den Autor von Nutzen sein, wenn er die Regel zu einem späteren Zeitpunkt wieder aufgreift.
Als Nächstes habe ich einige Strings angegeben, die ich in der Malware-Probe gefunden habe. Diese werden als Variablen innerhalb der Regel deklariert und können verwendet werden, um nach Dateien mit ähnlichen Inhalten zu suchen.
Die von mir verwendeten Strings wurden mit PEStudio identifiziert und sind eine Mischung aus interessanter Windows-API und Strings, die meiner Meinung nach eindeutig für diese Malware-Familie sind.
Im Abschnitt „Conditions“ (Bedingungen) wird festgelegt, welche Bedingungen erfüllt sein müssen, damit die YARA-Regel einen Treffer auslöst. Die erste Regel, die ich festgelegt habe, ist, dass der Datei-Header eine ausführbare Windows-Datei sein muss. Dazu müssen die Hex-Werte im Header einer ausführbaren Windows-Datei angegeben werden. In der folgenden Abbildung sehen Sie, wie dies mit einem Hex-Editor identifiziert wird.
Bei der Dateiversion innerhalb der Malware fiel mir auch auf, dass diese für die Malware eindeutig sein könnte. Ich habe sie also auch in die Regel aufgenommen – “Versium Research 5 Installation”.
Außerdem habe ich festgelegt, dass drei Importe vorhanden sein müssen, die PEStudio als verdächtig markiert hat.
Mit der Zeit und Erfahrung werden Sie in der Lage sein, verdächtige Bereiche innerhalb von Proben zu erkennen. Einige Beispiele für häufig vorkommende Abschnitte sind: ‘.data’, ‘.reloc’ und ‘.rsrc’. In diesem Beispiel habe ich einige Abschnitte gefunden, die nicht in dieses Muster passen. Meine YARA-Regel sucht daher nach Abschnitten namens ‘CODE’ und ‘BSS’.
Die anderen Bedingungen, die ich festgelegt habe und die erfüllt werden müssen, sind: Der erste String, der als ‘$a1’ deklariert wurde, muss vorhanden sein, ODER drei der ‘$b’-Strings oder einer der ‘$c’-Strings. Die verbleibende Bedingung ist, dass die Dateigröße kleiner als 50.000 Bytes sein muss.
Diese Regel kann nun verwendet werden, um mit der Jagd nach zusätzlichen Redline-Proben zu beginnen.
Sie haben nun das Wissen, um Ihre eigenen YARA-Regeln zu erstellen, neue Proben für die Analyse zu finden oder alternativ aktive Erkennungen innerhalb Ihrer Organisation zu implementieren.
Wenn Sie die Sicherheitsvorkehrungen in Ihrem Unternehmen ausbauen möchten, sollten Sie einen Blick auf Varonis’ Edge: Perimeter Detection und auf die Data Security Platform werfen.