Cryptotrojaner auf Samba verhindern

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.