Null Funde heißt nicht sauber
TL;DR
- Unser Virenscan meldete null Funde, nach 13 Minuten für mehrere hundert GB. Gescannt hatte er nichts, der Container war beim Start abgebrochen.
- Aufgefallen ist es nur an der unplausiblen Laufzeit. Exitcodes hatte niemand ausgewertet.
- So prüfen wir jetzt: EICAR vorab im selben Aufbau, Exitcodes auswerten, gescannte Dateien gegen die Dateizahl zählen.
Nach einem Ransomware-Angriff haben wir Daten aus einem wiederhergestellten Server herausgeholt. Bevor sie zurückgehen, wird gescannt. Die ganze Geschichte steht in Der Decryptor läuft, und die großen VMs bleiben zu .
Der Scan lief, und nach 13 Minuten kam das Ergebnis: null Funde. Mehrere hundert GB, sauber.
Das war unser Fehler, und er wäre fast durchgegangen.
Was faul war
Aufgefallen ist es nur an der Zeit. ClamAV schafft bei uns mit sechs parallelen Läufen knapp 50 MiB pro Sekunde. Für die Datenmenge hätte der Scan Stunden dauern müssen, nicht 13 Minuten.
Also nachgesehen. Über 3.500 Einzelläufe, jeder mit Exitcode 1, keiner hatte eine Datei angefasst. Unser Skript hatte nur nach Fundmeldungen gesucht. Keine Meldung, also kein Fund.
Warum nichts gescannt wurde
ClamAV lief im offiziellen Container. Die Signaturen haben wir nur lesend eingehängt, damit der Scan sie nicht verändert. Das Startskript des Images will aber die Rechte am Signaturordner ändern. Das scheitert an einem nur lesenden Volume, der Container bricht ab, bevor clamscan überhaupt startet.
Kurios dabei: Bei clamscan heißt Exitcode 1 „Fund“. Hier hieß er „nicht gestartet“. Hätten wir den Exitcode ausgewertet, hätten 3.500 „Funde“ immerhin Alarm geschlagen, aber aus dem falschen Grund. Man muss wissen, welches Programm den Code liefert.
So scannen wir jetzt
- Startskript umgehen.
docker run --entrypoint clamscan …startet den Scanner direkt. - Erst mit EICAR testen. Die EICAR-Testdatei ist harmlos, wird aber von jedem Scanner erkannt. Sie kommt in denselben Aufbau, mit denselben Volumes, vor dem echten Lauf. Meldet der Scan sie nicht, scannt er nicht.
- Exitcodes auswerten. Bei
clamscan: 0 sauber, 1 Fund, 2 Fehler. Und prüfen, ob der Code wirklich vonclamscankommt. - Zählen.
clamscanmeldet am Ende „Scanned files“. Die Summe muss zur Dateizahl passen, diefindliefert. Weicht sie ab, fehlt etwas. - Was nicht gescannt wird, auflisten. ClamAV lässt sehr große Dateien aus, bei uns alles über 2 GiB, typisch Postfach-Archive und ISO-Abbilder. Die stehen auf einer eigenen Liste, damit niemand sie für geprüft hält.
Docker zeigt den Container danach als „unhealthy“, weil der Healthcheck einen Dienst sucht, den wir gar nicht starten. Das ist harmlos.
Was bleibt
Eine Prüfung, die nichts findet, sieht genauso aus wie eine Prüfung, die nicht läuft. Das gilt für Virenscanner wie für Monitoring, das ohne Daten grün bleibt. Eine ähnliche Geschichte steht in Die Statusseite war grün .
Gerettet hat uns keine Technik, sondern eine Plausibilitätsfrage: Kann das in dieser Zeit überhaupt gehen?
Quellen
- ClamAV-Dokumentation, Scanning
- EICAR, Anti Malware Testfile
