Seiten: [1]
|
|
|
|
Autor
|
Thema: Eigene Signaturen für clamav schreiben (Gelesen 229 mal)
|
|
Sebastian
Sr. Member
Offline
Einträge: 377
|
|
Eigene Signaturen für clamav schreiben
« am: 14. April 2024, 15:54:33 »
|
|
Einleitung
Hallo Suletuxe,
Erst ein einmal vorweg, ich selbst bin immer noch in der Lernphase Signaturen für Malware für die clamav Engine zu schreiben. Dennoch möchte ich für euch meine Erfahrungen hier festhalten. Vielleicht kann der ein oder andere davon auch etwas Lernen.
Zudem kann man auch gut clamav verwenden um einen bestimmten Inhalt zu finden. Es muss ja nicht immer was Gefährliches sein. The sky is the limit
Standard Signatur Verzeichnis:
/var/lib/clamav
Hash-based Signatures
https://docs.clamav.net/manual/Signatures/HashSignatures.html
Die einfachste Art eine Signatur für clamav zu erstellen ist es den Dateiinhalt Hash von einer Datei zu verwenden. Diese erzeugt die wenigsten False/Positives ist aber auch am striktesten. Mit anderen Worten die kleinste Veränderung der Datei sorgt dafür das die Malware nicht mehr gefunden wird.
clamav unterstützt dabei 3 verschiedene Hash Algorithmen: md5, sha1, sha256
um die Hash Signatur für eine Datei zu erzeugen, können wir das sigtool Programm verwenden, das clamav mit beiliegt
sigtool --md5 test.exe > test.hdb
|
|
Dies rezeugt eine hdb (Hash Data Base) File Signature mit folgendem Inhalt:
48c4533230e1ae1c118c741c0db19dfb:17387:test.exe
|
|
Die Werte werden mit einem : getrennt.
Wert 1 = Hashwert Wert 2 = Dateigröße in Bytes Wert 3 = Dateiname
Der Dateiname kann nach Belieben geändert werden. Diese Informationen wird später bei Fund in der Ausgabe angegeben. Hier könnt ihr euch also einen Namen ausdenken, der euch gefehlt.
Signatur Testen:
Am schnellsten könnt ihr die Signatur testen ob diese Funktioniert, indem ihr die Option -d verwendet von clamscan
clamscan -d test.hdb test.exe
|
|
Wenn eure Signatur funktioniert, könnt ihr diese in euer Signatur Verzeichnis kopieren.
Hinweis:
Ihr solltet Hash-Based Signaturen nicht für Textdateien verwenden. Clamav führt für Text Dateien eine Normalisierung durch. Das heißt entfernt vor den eigentlichen Scan überflüssige Leerzeichen/Steuerzeichen, konvertiert alle ASCI Zeichen zu Kleinbuchstaben etc. dadurch würde sich der Hashwert ändern und eure Signatur funktioniert dadurch nicht. Wenn ihr dies trotzdem verwenden wollt, so müsst ihr den Hashwert aus der normalisierten Datei verwenden. Dafür müsst ihr clamav mitteilen, dass ihr die tmp Dateien behalten möchtet. Wie das geht, schaut bitte in der Dokumentation nach
Content-based Signaturen
https://docs.clamav.net/manual/Signatures/BodySignatureFormat.html
Möchtet ihr clamav verwenden um einen bestimmten String oder Inhalt in einer Datei zu finden, so könnt ihr das mit Inhaltsbasierten Signaturen bewerkstelligen. Diese werden als *.ndb Dateien gespeichert.
Beispiel:
Wir möchten folgende Zeichenkette in Dateien suchen: "Finde mich"
Zuerst werden wir die Zeichenkette als Hexwert mithilfe von sigtool konvertieren:
❯ echo -n 'Finde mich' | sigtool --hex-dump 46696e6465206d696368
|
|
Diesen Hexwert können wir nutzten, um eine Signatur daraus zu erstellen:
Malware_name:0:*:46696e6465206d696368
|
|
Auch hier wird die Signatur, wieder in mehre Werte unterteilt, die durch ein : getrennt werden.
Wert 1 = Beliebiger Name für den Fund Wert 2 = Eine Nummer die den Dateityp beschreibt die clamav untersuchen soll (Dateiliste, In unseren Beispiel wird jeder Dateityp untersucht) Wert 3 = ist ein Offset bzw. ein Offset Berreich an welcher stelle in der Datei nach der Zeichenkette gesucht werden soll. (In userem Beispiel ist der * ein Wildcard der für den Kompletten Dateiinhalt steht) Wert 4 = Unsere Zeichenkette als Hexwert
Damit ist unsere Siganture auch schon fertig.
Hinweis:
Erinnert euch daran das clamav Text Dateien vor dem scan normalisiert. Das bedeutet, wenn unsere Zeichenkette 'Finde mich' in einer Text Datei drin steckt, wird clamav diese nicht finden, da wir den Hexwert nicht für die Zeichenkette "finde mich" berechnet haben. Man achte auf das kleine f
Wir können dafür einfach die Zeile verdoppen und den Hexwert der Zeichenkette kleingeschrieben auch noch mit einfügen. Mithilfe von Logical Signaturen geht das auch noch besser bei der man unteranderen die groß und Kleinschreibung Unterscheidung abschalten kann. Dazu aber ein ander mal mehr.
Testen können wir unsere Signatur dann wieder so:
clamscan -d mysignature.ndb datei_mit_der_zeichenkette_als_inhalt
|
|
Damit könnt ihr nun Alle Unterstützen Dateiformate auf diese Zeichenkette untersuchen. Also auch zip, odt, doc etc. überall wo diese Zeichenkette gefunden wird, wird diese euch gemeldet. Selbst wenn ihr solche Dinge macht und z.b. einen Bild eure Zeichenkette anfügt, würde dies detektiert werden.
Somit könntet ihr euch auch einem einfachen Schimpfwort filter bauen
LG Sebastian
|
« Letzte Änderung: 15. April 2024, 17:25:28 von Sebastian » |
Gespeichert
|
|
|
|
Sebastian
Sr. Member
Offline
Einträge: 377
|
|
Re:Eigene Signaturen für clamav schreiben
« Antwort #1 am: 15. April 2024, 18:28:06 »
|
|
Logische Signaturen:
https://docs.clamav.net/manual/Signatures/LogicalSignatures.html
Eine Logische clamav Signatur ist folgendermaßen aufgebaut:
SignatureName;Zielbeschreibungblock;LogischerAusdruck;Subsig0;Subsig1;Subsig2;...
|
|
Hierbei werden die einzelnen Werte mithilfe eines ; getrennt.
SignatureName = Ist selbstbeschreibend, Hier ein Namen eurer Wahl Zielbeschreibungblock = Gibt die verwendete Clamav Engine sowie die zu untersuchende Dateitypen an (Details in den docs) LogischerAusdruck = In diesem Bereich werden die Bedingungen niedergeschrieben wie, die Sub Signaturen behandelt werden müssen um einen Match (Fund) zu ergeben. Subsig0...64 = Es folgen die Hex Signaturen der einzelnen Zeichenketten.
Um unsere Inhaltsbasierte Signatur aus dem vorherigen Beispiel zu einer logischen Signatur umzubauen, und damit auch die Möglichkeit bietet Großkleinschreibung zu ignorieren, gehen wir wie folgt vor:
Vorherige ndb Signatur:
Malware_name:0:*:46696e6465206d696368
|
|
Umgeschrieben zu einer Logischen Signatur (ldb)
Malware_name;Engine:81-255,Target:0;0;46696e6465206d696368::i
|
|
Malware_name Ausgabe Name bei einem Fund
Engine:81-255,Target:0
Die zu verwendene Clamav Engine, und der zu untersuchende Dateityp (0, Alle Typen) (Die Werte werden durch , getrennt, weitere Informationen in den docs)
0
Hier wurde der logische Ausdruck mit einer einfachen 0 gekürzt, so das einfach nach den Inhalt der ersten Zeichenkette ("Finde mich") gesucht wird, ohne weitere Logik.
46696e6465206d696368
Unsere Zeichenkette "Finde mich" als Hex
::i
Der Kleinbuchstabe i aktiviert das clamav case-insensitive arbeitet, also das Groß- und Kleinschreibung deaktiviert wird. Dies lösst unser Problem auf einfache weise, dass unsere Zeichenkette "Finde mich" in Normalisieren Dateien wie Text Dateien nicht gefunden wird. Da durch die Normalisierung alle Zeichen in der Zeichenkette "finde mich" kleingeschrieben werden.
Die zwei :: dienen hierbei als Trenner zum letzten Hex wert einer Zeichenkette. Dies ist so ähnlich wie bei einem regulären Ausdruck, womit der Engine zum Schluss mitgeteilt wird, welche zusätzlichen Funktionen diese aktivieren soll.
Prüfen ob die Signature funktioniert kann man dann wieder am einfachsten mit:
clamscan -d mysignature.ldb datei_mit_der_zeichenkette_als_inhalt
|
|
Damit würde die Zeichenkette auch in Containerformaten wie zip, odt, doc etc. gefunden werden, also alle die clamav unterstützt.
Dies ist natürlich nicht die beste Signatur, die man schreiben kann, da sie so gut wie keine Logik enthält und somit viele False/Positives erzeugen würde. Dies sollte nur veranschaulichen, wie mächtig clamav sein kann um Dateiinhalte (Auch in Container Formate) aufzuspüren. Man kann seiner Signatur natürlich noch um einiges mehr Logik hinzufügen. Diese entnimmt bitte der Dokumentation, wenn das noch tiefgehender interessiert.
Später werde ich euch dann zeigen, wie Dateien anhand eines Bildes (auch in leicht abgewandelter Form) mithilfe eines Rolling Hashes Verfahren mit clamav detektiert werden kann.
LG Sebastian
|
« Letzte Änderung: 15. April 2024, 18:29:34 von Sebastian » |
Gespeichert
|
|
|
|
Seiten: [1]
|
|
|
|
|
|
|