Inhaltsverzeichnis

ClamAV Signaturen schreiben

Signaturverzeichnis

Das Signaturverzeichnis befindet sich bei einem Arch Linux unter /var/lib/clamav.

Hash basierte Signaturen

Die einfachste Art eine Signatur für ClamAV zu erstellen ist es den Hashwert 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, dass die Malware nicht mehr gefunden wird. ClamAV unterstützt 3 verschiedene Hash Algorithmen dafür: md5, sha1, sha256

Um die Hash Signatur für eine Datei zu erzeugen, kann man das sigtool Programm verwenden, das ClamAV mit beiliegt.

sigtool –md5 test.exe > test.hdb

Dies erzeugt eine hdb (Hash Data Base) File Signatur mit folgendem Inhalt:

48c4533230e1ae1c118c741c0db19dfb:17387:test.exe

Die einzelnen Felder werden mit einem : getrennt.

FeldInhalt
1Hashwert
2Dateigröße in Bytes
3Dateiname

Der Dateiname kann nach Belieben geändert werden. Diese Informationen wird später bei Fund in der Ausgabe angegeben. Hier kann ein beliebiger Name verwendet werden.

Signatur Testen

Am schnellsten testet man die Signatur, indem die Option -d verwendet von clamscan

clamscan -d test.hdb test.exe

Wenn die Signatur funktioniert, kann diese in das Signaturverzeichnis kopiert werden.

Hash basierte Signaturen sollten nicht für Textdateien verwendet werden. ClamAV führt für Textdateien eine Normalisierung durch. Das bedeutet es werden vor den eigentlichen Scan überflüssige Leerzeichen/Steuerzeichen entfernt und alle ASCI Zeichen zu Kleinbuchstaben konvertiert. Dadurch ändert sich der Hashwert und Signatur funktioniert dadurch nicht mehr.

Wenn der Hashwert einer Textdatei trotzdem verwendet werden soll, so muss der Hashwert aus der normalisierten Datei dafür verwendet werden. Siehe hierzu die ClamAV Dokumentation

Siehe auch

Inhaltsbasierte (Content-based) Signaturen

Um einen bestimmten String oder Inhalt in einer Datei zu finden, so kann das mit einer Inhaltsbasierten Signatur bewerkstelligt werden. Diese werden als *.ndb Dateien gespeichert.

Beispiel

Es soll folgende Zeichenkette in Dateien gefunden werden: „Finde mich“

Zuerst wird die Zeichenkette als Hexwert mithilfe von sigtool konvertieren:

❯ echo -n 'Finde mich' | sigtool --hex-dump
46696e6465206d696368

Diesen Hexwert kann nun genutzt werden, um eine Signatur daraus zu erstellen:

Malware_name:0:*:46696e6465206d696368

Auch hier ist die Signatur, in mehrere Werte unterteilt, die durch ein : getrennt werden.

FeldTypBeschreibungAnmerkung
1ZeichenketteBeliebiger NameIm Beispiel: Malware_name
2GanzzahlDateitypIm Beispiel: 0 für alle Dateien
3ZeichenketteLogischer Ausdruck Im Beispiel wurde das Wildcard * verwendet, das für den ganzen Dateiinhalt steht.
4ZeichenketteInhalt Signatur Im Beispiel: 46696e6465206d696368 das in Hex die Zeichenkette Finde mich entspricht.

ClamAV normalisiert Textdateien vor dem eigentlichen Scan. Dies bewirkt, dass die Zeichenkette „Finde mich“ vor dem Scan zu finde mich“ wird. Das dazuführt, dass die Zeichenkette im Beispiel oben nicht gefunden wird. Es sei den man schaltet die Normalisierung beim Scannen mit –normalize=no aus.

Es wäre eine logische Signatur der inhaltsbasierten Signatur hierfür vorzuziehen.

Signatur Testen

Die Signatur kann hiermit auf Funktionalität geprüft werden.

clamscan -d mysignature.ndb datei_mit_der_zeichenkette_als_inhalt

Siehe auch

Logische Signaturen

Logische Signaturen sind folgendermaßen aufgebaut:

SignatureName;Zielbeschreibungblock;LogischerAusdruck;Subsig0;Subsig1;Subsig2;…

Es werden die einzelnen Werte mithilfe eines ; getrennt.

FeldTypBeschreibungAnmerkung
1ZeichenketteSignatur NameEin beliebieger Name
2ZeichenketteZielbeschreibungblockHier wird die zu verwendene ClamAV Engine und zu untersuchende Dateitypen angegeben
3ZeichenketteLogischer AusdruckHier stehen die Bedingungen, wie mit den folgenden Sub-Signaturen umgegangen werden soll
4ZeichenketteSub-Signaturen (das wonach gesucht werden soll) als Hexwert. Es können maximal 64 Sub-Signaturen angegeben werden.

Um die Inhaltsbasierte Signatur aus dem vorherigen Beispiel zu einer logischen Signatur umzubauen, und damit auch die Möglichkeit zu bieten Großkleinschreibung zu ignorieren, geht man wie folgt vor:

Umgeschriebene inhaltsbasierte Signatur (ndb) zu einer logischen Signatur (ldb):

Malware_name;Engine:81-255,Target:0;0;46696e6465206d696368::i

FeldTypInhaltAnmerkung
1ZeichenketteMalware_nameSelbstbeschreibend
2ZeichenketteEngine:81-255,Target:0Es wird die ClamAV Engine von 81-255 verwendet, sowie alle Dateitypen (Target:0) untersucht
3Zeichenkette0Logischer Ausdruck: Die verwendung der einfachen Zahl 0 bringt nur zum Ausdruck, das nach der ersten Sub-Signature gesucht werden soll. Keine weitere Logik dahinter.
4Zeichenkette46696e6465206d696368::iSub-Signatur mit der Zeichenkette „Finde mich“ als Hex. Mit abschließender Option ::i an der Signatur das Großklein Schreibung ignoriert werden soll.

Signatur Testen

Geprüft kann die Signatur wieder mit:

clamscan -d mysignature.ldb datei_mit_der_zeichenkette_als_inhalt

Seite sollte mit Beispielen zu den Restlichen Signatur Arten verfolständigt werden.

Siehe auch