In Zeiten von Cryptotrojanern ist es sinnvoll den Fileserver vor Verschlüsselung aller Daten zu schützen, da Locky und Co alle erreichbaren Laufwerke bzw. deren Inhalte verschlüsseln. In diesem Fall lässt sich Samba in Kombination mit Fail2Ban so einsetzen, dass ein befallener Rechner sofort vom Fileserver ausgeschlossen wird. Die Konfiguration geschieht dabei in zwei Steps.
Wie es funktioniert
Zum Einen wird Samba so konfiguriert, dass es alle Aktivitäten mitlogt. Genauer gesagt das Schreiben und Umbenennen von Dateien. In den Logs findet sich dann ein Eintrag wie dieser:
Mar 11 10:44:33 fileserver smbd_audit: IP=192.168.4.211|USER=joe|MACHINE=desktop-joe|VOLUME=public|pwrite|ok|zaehlerstaende - Kopie.locky
Im zweiten Step weisen wir Fail2Ban mit vordefinierten RegEx an, dass er sich diese Logs anschauen und nach Logeinträgen wie diese untersuchen soll. Wird ein Eintrag gefunden, so ist der Client-Computer sofort mittels IPTABLES-Regel vom Server zu entfernen und dem Administrator eine Email zuzuschicken. Eine vordefinierte Bantime ist groß genug gewählt, dass der Administrator genug Zeit zum reagieren hat.
Die Samba-Konfiguration
Wir öffnen also die Datei /etc/samba/smb.conf und fügen folgenden Inhalt ein:
In die [GLOBAL] Sektion gehört folgendes:
full_audit:failure = none
full_audit:success = pwrite write rename create_file
full_audit:prefix = IP=%I|USER=%u|MACHINE=%m|VOLUME=%S
full_audit:facility = local7
full_audit:priority = NOTICE
und dann in jede Freigabe, die Überwacht werden soll das hier:
vfs objects = full_audit
Danach abspeichern und Samba neu starten.
Die Fail2Ban-Konfiguration
Wir brauchen dazu zwei Teile: Zum einen die Datei in der steht auf was genau Fail2Ban achten soll und in der anderen Datei welche Regelungen für diesen Audit gelten.
Zunächst erstellen wir die Datei /etc/fail2ban/filter.d/samba.conf und füllen sie mit folgendem Inhalt:
[Definition]
failregex = smbd.*\:\ IP=<HOST>\|.*\.locky$
smbd.*\:\ IP=<HOST>\|.*_Locky_recover_instructions\.txt$
ignoreregex =
Nun erstellen wir die Datei /etc/fail2ban/jail.d/samba.conf und füllen auch diese mit Inhalt:
[samba]
filter = samba
enabled = true
action = iptables-multiport[name=samba, port="135,139,445,137,138", protocol=tcp]
mail[name=samba, dest=admin@MYDOMAIN.DE]
# Einträge in die Syslog werden beobachtet
logpath = /var/log/syslog
# Die erste umbenannte oder erstellte Datei mit der
# Endung .locky führt zum Ausschluss vom Fileserver
maxretry = 1
# Die letzten 10 Min des Logs werden berücksichtigt
findtime = 600
# Der Client ist für einen Tag ausgesperrt
bantime = 86400
Nun noch Fail2Ban neu starten und der Schutz ist aktiv. Man beachte, dass in jedem Fall eine Datei umbenannt werden wird bevor der Schutz greift. Der Eintrag in die Log geschieht leider nun mal erst nach der Aktion. Somit ist diese Datei leider verschlüsselt.
Noch mehr Dateiendungen eintragen
Man kann es nach folgendem Vorbild quasi machen. Dabei natürlich auf die Einrückungen achten, da Fail2Ban sehr empfindlich reagiert. In meinem Beispiel schließe ich alle mp3- und crypt-Dateien aus.
smbd.*\:\ IP=<HOST>\|.*\.mp3$
smbd.*\:\ IP=<HOST>\|.*\.crypto$
Das Kreuz mit der Groß- und Kleinschreibung
Jetzt haben wir uns so schön überlegt wie wir Dateien auf dem Fileserver schützen. Blöde ist nur, dass das System Unterschiede zwischen .locky und Locky und erst Recht .LOCKY macht. Die Entwickler der Cryptotrojaner sind ja auch nicht doof. Man könnte sich nun die Mühe machen jede mögliche Kombination in die /etc/fail2ban/filter.d/samba.conf einzutragen. Nimmt man dann noch die "1337"-Schrift dazu, dann erhöht sich das noch mal imens.
In diesem Fall sind Reguläre Ausdrücke dein Freund. Wir geben einfach Fail2Ban die möglichen Buchstaben mit aus denen .locky gebildet werden könnte. Beispielsweise deckt [lL][oO][cC][kK][yY] alle Kombinationen aus Groß- und Kleinschreibung ab. Fail2Ban geht automatisch alle Möglichkeiten durch. In der /etc/fail2ban/filter.d/samba.conf müsste das dann so ausschauen:
smbd.*\:\ IP=<HOST>\|.*\.[lL][oO][cC][kK][yY]$
Wir brauchen mehr
Natürlich reicht die Endung .locky nicht aus. Auch nicht die Kombinationen. Schließlich sind weitere Verschlüsselungstrojaner hinzugekommen, die alle eigenen Dateiendungen haben. Hier mal eine gängige Liste, die ich empfehle mit RegEx wie im oben genannten Beispiel abzuändern, um Groß- und Kleinschreibung zu berücksichtigen:
smbd.*\:\ IP=<HOST>\|.*\.key$
smbd.*\:\ IP=<HOST>\|.*\.ecc$
smbd.*\:\ IP=<HOST>\|.*\.ezz$
smbd.*\:\ IP=<HOST>\|.*\.exx$
smbd.*\:\ IP=<HOST>\|.*\.zzz$
smbd.*\:\ IP=<HOST>\|.*\.xyz$
smbd.*\:\ IP=<HOST>\|.*\.aaa$
smbd.*\:\ IP=<HOST>\|.*\.abc$
smbd.*\:\ IP=<HOST>\|.*\.ccc$
smbd.*\:\ IP=<HOST>\|.*\.vvv$
smbd.*\:\ IP=<HOST>\|.*\.xxx$
smbd.*\:\ IP=<HOST>\|.*\.ttt$
smbd.*\:\ IP=<HOST>\|.*\.micro$
smbd.*\:\ IP=<HOST>\|.*\.encrypted$
smbd.*\:\ IP=<HOST>\|.*\.locked$
smbd.*\:\ IP=<HOST>\|.*\.crypto$
smbd.*\:\ IP=<HOST>\|.*\_crypt$
smbd.*\:\ IP=<HOST>\|.*\.crinf$
smbd.*\:\ IP=<HOST>\|.*\.r5a$
smbd.*\:\ IP=<HOST>\|.*\.xrtn$
smbd.*\:\ IP=<HOST>\|.*\.XTBL$
smbd.*\:\ IP=<HOST>\|.*\.crypt$
smbd.*\:\ IP=<HOST>\|.*\.R16M01D05$
smbd.*\:\ IP=<HOST>\|.*\.pzdc$
smbd.*\:\ IP=<HOST>\|.*\.good$
smbd.*\:\ IP=<HOST>\|.*\.LOL$
smbd.*\:\ IP=<HOST>\|.*\!.OMG$
smbd.*\:\ IP=<HOST>\|.*\!.RDM$
smbd.*\:\ IP=<HOST>\|.*\.RRK$
smbd.*\:\ IP=<HOST>\|.*\.encryptedRSA$
smbd.*\:\ IP=<HOST>\|.*\.crjoker$
smbd.*\:\ IP=<HOST>\|.*\.EnCiPhErEd$
smbd.*\:\ IP=<HOST>\|.*\.LeChiffre$
smbd.*\:\ IP=<HOST>\|.*\.keybtc@inbox_com$
smbd.*\:\ IP=<HOST>\|.*\.0x0$
smbd.*\:\ IP=<HOST>\|.*\.bleep$
smbd.*\:\ IP=<HOST>\|.*\.1999$
smbd.*\:\ IP=<HOST>\|.*\.vault$
smbd.*\:\ IP=<HOST>\|.*\.HA3$
smbd.*\:\ IP=<HOST>\|.*\.toxcrypt$
smbd.*\:\ IP=<HOST>\|.*\.magic$
smbd.*\:\ IP=<HOST>\|.*\.SUPERCRYPT$
smbd.*\:\ IP=<HOST>\|.*\.CTBL$
smbd.*\:\ IP=<HOST>\|.*\.CTB2$
smbd.*\:\ IP=<HOST>\|.*\.locky$
smbd.*\:\ IP=<HOST>\|.*\.wnry$
smbd.*\:\ IP=<HOST>\|.*\.wcry$
smbd.*\:\ IP=<HOST>\|.*\.wncry$
smbd.*\:\ IP=<HOST>\|.*\.wncryt$
smbd.*\:\ IP=<HOST>\|.*\.uiwix$
Testen
Nun kopiert man vom Client aus eine Datei auf den Fileserver, die mit .wncryt bspw. endet. Fail2Ban sollte nun den Zugriff auf das Netzlaufwerk sperren. Die eine Datei ist allerdings auf dem Zielort abgelegt worden. Nur eben keine weitere.
Ob die Sperrung funktioniert hat sieht man mit "iptables -nvL".
Möchte man die Sperre wieder aufheben, so macht man das mit folgender Zeile:
fail2ban-client set "samba" unbanip 192.168.110.206
Die IP sollte dir bekannt sein sowie der Name der Chain. Falls nicht, so schau mit iptables -nvL nach.