Windows Fileserver vor Ransomware schützen (Update)

Gestern hatte ich ja bereits darüber berichtet, wie sich Windows Fileserver mittels Dem „Resourcen-Manager für Dateiserver“ vor Ransomware wie Cryptolocker, Cryptwall oder Locky schützen lassen.

Zu dem Artikel wurde der folgende Kommentar abgegeben:

Hallo Frank,

super Beitrag!
Gibt es einen Trick, wie man den Benutzer abfangen kann und ggf. nur dem Benutzer den Zugriff auf die Freigabe/en verweigert?
Dann müsste man den Server nicht vom Netz nehmen und andere Benutzer könnten weiterarbeiten.

Gruß

Chonta

Erst einmal vielen Dank für die gute Idee und um die Frage zu beantworten: Ja die Möglichkeit gibt es, zwar über Umwege aber es ist möglich.

Auf dem folgenden Weg, ist es mit Server 2012 R2 möglich:

Ladet zunächst das folgende ZIP-Archiv runter und entpackt die beiden enthaltenen Scripte nach c:\Scripts (oder einem anderen Ordner)

Falls ein anderer Ordner als c:\Scripts gewählt wurde, müssen in den beiden Scripten die Pfade entsprechend angepasst werden.

image

Jetzt kann in den Dateiprüfungseigenschaften das Senden von Warnungen an das Ereignisprotokoll aktiviert werden:

Ransomware

Dann wird auf dem Reiter „Befehl“ die CMD-Datei wie folgt hinterlegt:

Ransomware

In den Optionen des Ressourcen-Managers werden jetzt noch die Limits für Ereignisprotokollbenachrichtigungen und Befehlsbenachrichtigungen aufgehoben

Ransomware

Die Funktionsweise ist nun folgende:

Wenn ein Benutzer (oder eben der Trojaner) auf dem Netzlaufwerk eine Datei mit der geblockten Endung erstellt, erzeugt der Ressourcen-Manager das Event mit der ID 8215 im Ereignisprotokoll:

Ereignisprotokoll

Zusätzlich wird das Script „block-smbshare.cmd“ gestartet, welches nur dazu dient, das PowerShell Script „block-smbshare.ps1“ zu starten. Den Umweg über die CMD-Datei musste ich gehen, da sonst immer die UAC dazwischen gefunkt hat.

Das PowerShell Script holt sich nun auf dem Ereignisprotokoll das Benutzerkonto welches versucht hat, eine Datei zu verschlüsseln, bzw. eine geblockte Datei anzulegen. Dann wird dem Benutzer auf der jeweiligen Freigabe der Zugriff verweigert:

Rechte

In diesem Fall war es der Benutzer „Administrator“. Damit später nachvollzogen werden kann, auf welchen Freigaben der Benutzer gesperrt wurde, wird im Order Scripts eine CSV-Datei erstellt, welches den Benutzer und den Pfad zur Freigabe enthält:

Log

Die Scripte lassen sich natürlich auch weiter anpassen, ich habe zum Beispiel in dem PowerShell Script eingebaut, dass der Server runtergefahren wird, wenn mehr als 50 Ereignisse von unterschiedlichen Benutzern auftreten, denn das würde einen Flächenbrand bedeuten.

Denkbar wäre ja auch mittels des Benutzernamens das AD-Konto zu sperren, allerdings wirkt das nicht sofort und im Fall der Fälle ist Eile geboten.

28 Gedanken zu „Windows Fileserver vor Ransomware schützen (Update)“

  1. Erst einmal vielen Dank für die Tipps und die Scripte hier. Nun aber eine Frage:

    was tun bei Cryto-Trojanern, die keine Dateiendung anhängen, sondern einfach nur die Datei verschlüsseln und eine Nachricht hinterlassen ?
    Gibt es eine Möglichkeit, anhand von Dateizugriffen (Anzahl / Minute) eine Aktion zu triggern ?
    also z.b. wenn ein User in einem Share mehr als 10 Dateien / Minute ändert (wenn sich der Hash des Files ändert etc.) -> Block-Script auslösen, Mail schicken etc.

    Vielen Dank Euch allen,

    GADRECS

    Antworten
  2. Hallo
    auch von meiner Seite auch einen grossen Dank, am 2012R2 funktioniert alles wunderbar.

    Hat eventuell jemand eine Idee, ob es möglich ist, mit dem Resourcenmanger irgendwie die IP Adresse des „AngreiferPC“ in das Eventlog schreiben.
    Wir werten gewisse EventID´s aus und könnten somit eine AccessRule auf den Switsch Bord legen. Somit wären von dem PC alle anderen Server auch sicher

    Danke Robert

    Antworten
    • Hi, kannst du dir auch Scripten.
      Finde ich ehrlich gesagt auch schöner den Client runterzufahren anstatt den Fileserver, gerade bei false positives:

      (Script ist ungetestet aber Sinn dahiner sollte klar sein)

      $AttackerIP = (Get-SmbSession |?{$_.ClientUsername -eq $Source_Io_Owner} | select ClientComputerName).ClientComputername

      &Shutdown -computername $AttackerIP /s /f /t 0

      Muss dann natürlich noch validierung dazu. Wenn mehrere Sessions von dem selben User mit verschiedenen Clients offen sind wird es schwieriger. Oder man passt das Script entsprechend an und fährt vorsichtshalber alle Clients runter.

      Antworten
  3. Hallo,

    das würde mich ebenfalls interessieren.
    Wir haben die Freigabe über DFS laufen. Beim Ausführen wird mir das Schreiben der Datei verweigert, die Freigabe allerding bleibt unangetastet.

    Danke,
    Jaro

    Antworten
  4. Vielen Dank für den großartigen Ansatz und die klare Beschreibung!

    Allerdings wird mir die Freigabe für den Benutzer unter Server 2012 R2 nicht gesperrt.
    Der Ereignisprotokolleintrag wird angelegt und das Schreiben der Datei wird verweigert. Wenn ich die .cmd aus einer Administrator Eingabeaufforderung oder PowerShell starte funktioniert das sperren der Freigabe. Sobald ich Versuche über den hinterlegten Befehl ‚C:\Windows\System32\cmd.exe /e „C:\Scripts\block-smbshare.cmd“‚ auszuführen (ebenfalls aus einer Administrator Konsole heraus) passiert, so wie bei der Ausführung durch die Dateiprüfung, nichts.
    Hat jemand einen Hinweis für mich?

    Danke,
    pauleb

    Antworten
  5. Kleiner Tip, falls noch nicht bekannt: Man kann bei den Eigenschaften der Dateiprüfungsvorlagen und Dateiprüfungen unter dem Reiter „Befehl“ die gleichen Variablen als Argumente an ein Script übergeben, welche auch für die E-Mail-Nachrichten und das Ereignisprotokoll funktionieren. Somit kann der Benutzer ohne Umweg über die Ereignisanzeige direkt an ein Batch oder Powershellscript übergeben werden [Source Io Owner] .

    Antworten
  6. Hallo Frank, danke für deine Idee.
    Dein Script hat noch einen Schönheitsfehler.
    Du schreibst den kompletten Pfad in das Eventlog wo die Datei erstellt wurde.
    Danach versuchst du diese Freigabe zu sperren was aber nicht immer funktioniert.

    Beispiel:

    Freigabename: f:\shares\testordner\

    Datei wird nun unter f:\shares\testordner\meinOrdner\crypt.locky erstellt.
    Das Script versucht nun meinOrdner zu sperren aber diese Freigabe existiert nicht.

    Da ich nicht der Script Guru bin habe ich das Script erst einmal so geändert das ein fester Pfad genommen wird ( f:\shares\* ) .

    Antworten
  7. Hey Frank, ich habe leider ein kleines Problem mit Deinem Script. Ich habe (wie Du glaube ich auch in Deinem ersten Post angeraten hast) ein File Screening für die komplette Datenplatte angelegt. (Sonst hätte ich ein wenig Arbeit…) Jetzt nimmt er aber als $smbpath in Deinem Script nur den Laufwerksbuchstaben der Festplatte. Da kann er natürlich keine Rechte setzen, dann die ist nicht Freigegeben ;) Hast Du eine Idee, wie ich nur die Freigabe blocken kann, bei der es aufgetreten ist, und dabei das FileScreening aber „allgemein“ für die ganze Platte belassen kann? Vielleicht sollte ich da auch dazu sagen, dass die Ordner auf der Platte nicht genauso heißen wie die Freigabe ;)

    Danke!!

    Antworten
  8. Vielen Dank(!) Frank
    für diese bisher fast unerwähnte Möglichkeit Schadsoftware von Fileservern fernzuhalten.

    Vielen Dank(!) den Jungs und Mädels
    der lanwerker.de, die Deine Entwicklung weiterführten, um auch ältere Serverversionen zu unterstützten.

    Ganz dickes DANKE von einem kleinen IT Licht, der sich sehr über diese Ausarbeiten freut :-)
    Anstelle nach einer Third Party Lösung zu suchen, hast Du, Frank, einfach mal in Ruhe nachgedacht und das aus meiner Sicht richtige getan. TOP.

    Lieben Dank
    Michael

    Antworten
  9. Da ich kein Scripting Meister bin würde einen von euch der es auf einem 2008er r2
    geschafft hat bitten das angepasste script zu posten. Am 2012 läufts bei mir auch nur schaff ich es nicht das Script für 2008 umzubauen.
    Wäre sehr nett ;)

    Antworten
  10. Nachtrag zu meiner Frage: Ich war zwar im falschen Bereich (Berechtigungen, nicht Freigabe). Dennoch klappt das nicht: Habe explizit einem bestimmten User die Freigabe auf einen Ordner gegeben und mit diesem die Änderung der Dateiendung versucht. Das wird sauber verhindert, aber die Freigabe bleibt wie eingerichtet. Bitte um Hilfe…

    Antworten
  11. Hallo, ich habe das soweit erfolgreich eingebaut, aber dem Benutzer wird der Zugriff nicht verweigert. Dazu muß ich vielleicht sagen, daß es für ihn keine eigenen Zugriffsrechte gibt, sondern er Mitglied einer Gruppe ist. Gibt es die Chance, das Script so anzupassen, daß in solch einem Fall der Benutzer einen eigenen Eintrag bekommt mit verweigerten Zugriffsrechten? Soweit ich weiß, würde dieser Eintrag ja die Gruppen-Rechte für ihn außer Kraft setzen.

    Antworten
  12. @Lanwerker
    Danke! So klappt es.
    Wenn man das Script noch wie folgt anpasst, kommt es auch mit Leerzeichen im Freigabenamen klar.
    $smbcacl = „C:\subinacl /verbose=1 /share „“\\127.0.0.1\“ + „$rightPart“ + „““ /deny=“ + „$sourceuser“

    Antworten
  13. Herzlichen Dank an diese Seite für die hilfreiche Veröffentlichung!

    Auch uns hat die Verwendbarkeit unter 2008/2008R2/SBS2011 keine Ruhe gelassen. Wir haben daher eine Anpassung des hier beschriebenen Vorgangs für die genannten Betriebssysteme unter https://www.lanwerker.de/support/lan-tipps.html veröffentlicht. Nicht erschrecken – ist etwas ausführlicher beschrieben – aber pro Server in „5-Minuten“ umgesetzt.

    Antworten
  14. Ach ja, noch eins: Die Liste der Ransom-typischen Dateinamen beinhaltet „readme.txt“, damit habe ich mich heute gleich direkt selbst rausgekegelt. *DEN* File Name sollte man vielleicht doch besser streichen aus der Liste ;-)

    Antworten
  15. Hi.
    Danke für die Anleitung. Für Win2008-R2 klappt es nicht, weil die SMBShare CMDlets fehlen, auch nachinstallieren von PS4/PS5 bringt leider nichts.

    Da das Upgrade eh‘ ansteht, ziehe ich den 2008-R2 Fileserver gerade hoch auf 2012-R2, damit sollte sich das Problem erledigt haben.

    Aber möglicher Weise könnte es auch auf 2008-R2 klappen mit WMI, als Einstieg:

    Get-WmiObject -class win32_share | FL

    Siehe auch hier: http://windowsitpro.com/powershell/managing-file-shares-windows-powershell

    Antworten
  16. Hi Frank,
    zuerst einmal vielen Dank für dein Mühe und Zeit für diese tollen Tips und Tricks.
    Also wir haben hier etliche Shares mit eine Leerzeichen im Namen z.B. „Home privat“.
    Hier sperrt aktuell dein Script gleich zweimal einmal „Home privat“ und einmal Home.
    Besteht die Chance das du dein Script entsprechend anpassen kannst, damit er auch Ordnernamen mit Leerzeichen sauber verarbeitet.

    Danke und Gruß
    Stefan

    Antworten
  17. Hy There,

    found this script very useful. Have added the domain-user-lock but one problem, we use a DFS and then the command „Block-SmbShareAccess“ will only return a „No mapping between account names and security ID’s was done“.

    Username is resolved correct.
    Do you have any idea about that?

    Antworten
  18. Mich würde auch interessieren, wie man das mit 2008 R2 so realisieren kann. Das wäre unglaublich heiß ;)

    ich hab hier einen Ansatz aus dem Script mit dem ich Benutzer Home Laufwerke erstellen lasse:

    Set-ACL -path $userfolder -AclObject $currentACL

    das AclObject legt man vorher fest.

    Gruß

    Matze

    Antworten
  19. Moin,

    soweit funktioniert das sehr gut, danke für die detaillierte Anleitung!
    Nur das Setzen der Berechtigungen auf die Freigabe geht leider nicht, da wir noch einen Windows Server 2008 R2 einsetzen. Gibt es da eine Möglichkeit? Die Scripte die ich bisher gefunden haben setzen immer die Dateiberechtigungen.

    Gruß
    Michael

    Antworten

Schreibe einen Kommentar