[[Vorlage(Getestet, focal)]] {{{#!vorlage Wissen [:Pakete installieren: Installation von Programmen] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis()]] [http://virustotal.github.io/yara/ YARA] {en} ist ein Programm, mit dem sich der Inhalt von Dateien nach definierten Mustern durchsuchen lässt. YARA kann sowohl text-basierte als auch Binärdateien durchsuchen. Die Entwickler von YARA bezeichnen das Programm selbst als "The pattern matching swiss knife for malware researchers (and everyone else)", was auf Deutsch so viel heißt wie: "Das Schweizer Taschenmesser für den Musterabgleich für Malware-Forscher (und jeden anderen)". Dies kommt daher, dass YARA auch in den Programmen namhafter Anti-Malware Softwareanbieter zum Einsatz kommt. Das Programm selber steht unter einer OpenSource Lizenz und kann frei genutzt werden. Neben dem Einsatz auf der Kommandozeile bietet YARA auch eine API für [http://yara.readthedocs.io/en/v3.6.0/yarapython.html Python] {en} und [http://yara.readthedocs.io/en/v3.6.0/capi.html C] {en}. = Installation = == aus den Paketequellen == YARA ist in den Paketquellen enthalten und kann über das Paket '''yara''' installiert werden[1]: {{{#!vorlage Paketinstallation yara, universe }}} Wer auch die Dokumentation lokal installieren möchte, der installiert noch zusätzlich folgendes Paket: {{{#!vorlage Paketinstallation yara-doc, universe }}} == manuell installieren == Wenn die neueste bzw. eine neueren Version von YARA benötigt wird, als in den Paketquellen vorliegt, kann YARA manuell installieren werden, indem das Programm direkt aus dem Quelltext kompiliert wird. Die notwendigen Schritte für Ubuntu sind [http://yara.readthedocs.io/en/v3.6.0/gettingstarted.html#compiling-and-installing-yara in der Dokumentation] {en} beschrieben. = Benutzung = YARA wird über die Kommandozeile genutzt[2], die allgemeine Syntax lautet: {{{#!vorlage Befehl yara [OPTIONEN] RULES_DATEI ZIELVERZEICHNIS }}} Die `RULES_DATEI` enthält dabei die Regel bzw. Regeln, nach der alle Dateien im Verzeichnis `ZIELVERZEICHNIS` durchsucht werden. Die Suche erfolgt standardmäßig nicht rekursiv, d.h. es wird nur das angegebene Zielverzeichnis durchsucht, nicht dessen Unterverzeichnisse. Die Datei, die die Regeln bzw. Muster enthält, nach der die Dateien durchsucht werden sollen, kann mehrere Regeln enthalten und pro Regel müssen mindestens die Sektionen `strings` und `conditions` vorhanden sein. Eine Regeldatei kann z.B. so aussehen: {{{ rule UbuntuusersTest { meta: my_meta_string = "Beispiel für ubuntuusers.de" strings: $my_jpg_string = { FF D9 } $my_png_string = { 89 50 4E 47 0D 0A 1A 0A } $my_txt_string = "Hallo Welt!" condition: $my_jpg_string or $my_png_string or $my_txt_string } }}} Die Zeile `rule UbuntuusersTest` leitet einen neue Regel mit dem Namen `UbuntuusersTest` ein, die zugehörigen Regeln sind dann in geschweifte Klammern eingeschlossen. Die Sektion `strings` enthält ein oder mehrere Strings, nach der die Dateien durchsucht werden sollten. Die Namen der Strings müssen mit dem Dollarzeichen $ beginnen, die Strings können, wie in der 1. und 2. Zeile, entweder hexadezimal sein oder, wie in der 3. Zeile, Text. Im Abschnitt `condition` wird definiert, unter welchen Umständen beim Durchsuchen ein Treffer gemeldet werden soll. In Beispiel wäre dies der Fall, wenn einer der drei Strings gefunden wird. Der Abschnitt `meta` dient der zusätzlichen Dokumentation. Er ist optional und hat keine Einfluss auf die Suchregeln. Eine Regeldatei kann dabei auch mehr als eine Regel enthalten. Jede Regel muss, wie oben bereits gesagt mit `rule NameDerRegel` eingeleitet werden. Regeldateien können dabei unter einem beliebigen Namen gespeichert werden. Das Ergebnis einer Suche kann dann z.B. so aussehen: {{{#!vorlage Befehl yara uude.rule Bilder/ }}} {{{ UbuntuusersTest Bilder//spamegg.txt UbuntuusersTest Bilder//foo.png UbuntuusersTest Bilder//20170703_174902.jpg UbuntuusersTest Bilder//20170703_174818.jpg }}} Die Datei '''uude.rule''' wird auf das Verzeichnis '''Bilder''' angewendet. In der Trefferliste wird ausgegeben, welche Regel zutrifft, gefolgt vom Dateinamen, auf die die Regel zutrifft. Ruft man `yara` zusätzlich mit der Option `-s` auf, wird zusätzlich noch die Position des Treffers in der Datei mit ausgegeben und gezeigt, welcher der Strings den Treffer ausgelöst hat: {{{ UbuntuusersTest Bilder//spamegg.txt 0x7:$my_txt_string: Hallo Welt! UbuntuusersTest Bilder//foo.png 0x0:$my_png_string: 89 50 4E 47 0D 0A 1A 0A UbuntuusersTest Bilder//20170703_174902.jpg 0x13bc05:$my_jpg_string: FF D9 UbuntuusersTest Bilder//20170703_174818.jpg 0x24ae:$my_jpg_string: FF D9 0x13ed06:$my_jpg_string: FF D9 }}} YARA bietet noch viel mehr Möglichkeiten, Regeldateien mit wesentlich komplexeren Regeln zu schreiben. Eine umfassende Übersicht inklusive vieler Beispielen ist in [http://yara.readthedocs.io/en/v3.6.0/writingrules.html der Dokumentation] {en} zu finden. == Optionen == YARA kennt eine Reihe von Optionen: {{{#!vorlage Tabelle <-2 rowclass="titel">Optionen von YARA +++ Option Erklärung +++ `-s`, `--print-strings` Zeigt zusätzlich den String an, der den Treffer ausgelöst hat und die Position des Treffers in der Datei. +++ `-n` Zeigt nur die Regeln an, die keinen Treffer ausgelöst haben. +++ `-p ANZAHL`, `--threads=ANZAHL` YARA startet `ANZAHL` Threads zum (parallelen) Durchsuchen der Dateien. +++ `-a SEKUNDEN`, `--timeout=SEKUNDEN` Die Suche wird nach `SEKUNDEN` abgebrochen. +++ `-r`, `--recursive` Das Zielverzeichnis wird rekursiv durchsucht. }}} YARA kennt noch eine Reihe weitere Optionen, welche in der [:man:Manpage] und auch der [http://yara.readthedocs.io/en/v3.6.0/commandline.html Dokumentation] {en} erklärt sind. == Dokumentation aufrufen == Hat man die Dokumentation über die Paketverwaltung installiert, kann man diese über die URL `file:///usr/share/doc/yara-doc/html/index.html` aufrufen. Die Online-Dokumentation ist unter `http://yara.readthedocs.io/en/v3.9.0/` zu finden, wobei das `v3.9.0` gegebenenfalls. durch die Version zu ersetzen ist, die man verwendet. = Links = * [github:virustotal/yara:Github-Seite] * [https://www.first.org/resources/papers/conference2014/first_2014_-_schuster-_andreas_-_yara_basic_and_advanced_20140619.pdf Tutorial zur Nutzung von YARA] #tag: Programmierung, Shell, Sicherheit