====== 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.
^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.
==== 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 [[https://docs.clamav.net/|ClamAV Dokumentation]]
==== Siehe auch ====
* [[https://docs.clamav.net/manual/Signatures/HashSignatures.html|ClamAV Dokumentation - Hash-based Signatures]]
===== 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.
^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 ''"**f**inde 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 ====
* [[https://docs.clamav.net/manual/Signatures/BodySignatureFormat.html|ClamAV Dokumentation - Content-based Signature Format]]
===== Logische Signaturen =====
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.|
==== 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 =====
* [[.:clamav|Wikiseite zu ClamAV]]
* [[https://www.suletuxe.de/forum/index.php?board=18;action=display;threadid=873|Suletuxe Forum Diskussionsthread]]
* [[https://docs.clamav.net/manual/Signatures.html|ClamAV Dokumentation - Signatures]]