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)
Block-SMBShare
Falls ein anderer Ordner als c:\Scripts gewählt wurde, müssen in den beiden Scripten die Pfade entsprechend angepasst werden.
Jetzt kann in den Dateiprüfungseigenschaften das Senden von Warnungen an das Ereignisprotokoll aktiviert werden:
Dann wird auf dem Reiter „Befehl“ die CMD-Datei wie folgt hinterlegt:
In den Optionen des Ressourcen-Managers werden jetzt noch die Limits für Ereignisprotokollbenachrichtigungen und Befehlsbenachrichtigungen aufgehoben
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:
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:
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:
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.
Super Block, einen Herzlichen DANK mal an der stelle, hat mir echt schon so viel geholfen, danke für die Super Anleitungen!
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
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
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.
Hallo,
auch von mir ein großes Danke für diese elegante Lösung. Ich hoffe das wir von diesem Mist verschont bleiben..
Gruß und Danke!!
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
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
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] .
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\* ) .
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!!
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
Vielen Dank :-)
Wir haben ein angepasstes Beispielscript für 2008R2 unter https://www.lanwerker.de/support/lan-tipps.html ergänzt.
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 ;)
Noch ’n Nachtrag: Hab es gefunden, jetzt klappt es. Super Sache!
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…
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.
@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“
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.
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 ;-)
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
für 2008er Server hilft wohl das hier:
http://windowsitpro.com/powershell/managing-file-shares-windows-powershell
wer kann da was passendes draus basteln? :-)
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
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?
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
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
Ok fuktioniert wunderbar, aber man muss die Überprüfung direkt auf den Freigabeordner machen.
Echt eine Super Sache!
Gruß
Chonta
Hallo Frank,
hätte ich einen Hut auf, würde ich ihn sofort ziehen :-)
Werde das nachher gleich mal testen.
Tausend Dank!
Gruß
Chonta