Das Signaturverzeichnis befindet sich bei einem Arch Linux unter /var/lib/clamav
.
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.
Feld | Inhalt |
---|---|
1 | Hashwert |
2 | Dateigröße in Bytes |
3 | Dateiname |
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.
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
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.
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.
Feld | Typ | Beschreibung | Anmerkung |
---|---|---|---|
1 | Zeichenkette | Beliebiger Name | Im Beispiel: Malware_name |
2 | Ganzzahl | Dateityp | Im Beispiel: 0 für alle Dateien |
3 | Zeichenkette | Logischer Ausdruck | Im Beispiel wurde das Wildcard * verwendet, das für den ganzen Dateiinhalt steht. |
4 | Zeichenkette | Inhalt 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.
Die Signatur kann hiermit auf Funktionalität geprüft werden.
clamscan -d mysignature.ndb datei_mit_der_zeichenkette_als_inhalt
Logische Signaturen sind folgendermaßen aufgebaut:
SignatureName;Zielbeschreibungblock;LogischerAusdruck;Subsig0;Subsig1;Subsig2;…
Es werden die einzelnen Werte mithilfe eines ;
getrennt.
Feld | Typ | Beschreibung | Anmerkung |
---|---|---|---|
1 | Zeichenkette | Signatur Name | Ein beliebieger Name |
2 | Zeichenkette | Zielbeschreibungblock | Hier wird die zu verwendene ClamAV Engine und zu untersuchende Dateitypen angegeben |
3 | Zeichenkette | Logischer Ausdruck | Hier stehen die Bedingungen, wie mit den folgenden Sub-Signaturen umgegangen werden soll |
4 | Zeichenkette | Sub-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
Feld | Typ | Inhalt | Anmerkung |
---|---|---|---|
1 | Zeichenkette | Malware_name | Selbstbeschreibend |
2 | Zeichenkette | Engine:81-255,Target:0 | Es wird die ClamAV Engine von 81-255 verwendet, sowie alle Dateitypen (Target:0) untersucht |
3 | Zeichenkette | 0 | Logischer Ausdruck: Die verwendung der einfachen Zahl 0 bringt nur zum Ausdruck, das nach der ersten Sub-Signature gesucht werden soll. Keine weitere Logik dahinter. |
4 | Zeichenkette | 46696e6465206d696368::i | Sub-Signatur mit der Zeichenkette „Finde mich“ als Hex. Mit abschließender Option ::i an der Signatur das Großklein Schreibung ignoriert werden soll. |
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.