Yesterday I already reported on how Windows file servers can be protected against ransomware such as Cryptolocker, Cryptwall or Locky using the "Resource Manager for File Servers". protect.
The following comment was made on the article:
Hallo Frank,
great contribution!
Is there a trick how to intercept the user and possibly only deny the user access to the share/s?
Then the server would not have to be taken off the network and other users could continue working.Gruß
Chonta
First of all, thank you for the good idea and to answer the question: Yes, it is possible, albeit in a roundabout way, but it is possible.
In the following way, it is possible with Server 2012 R2:
First download the following ZIP archive and extract the two scripts it contains to c:\Scripts (or another folder)
If a folder other than c:\Scripts was selected, the paths in the two scripts must be adjusted accordingly.
You can now activate the sending of warnings to the event log in the file check properties:
The CMD file is then stored on the "Command" tab as follows:
The limits for event log notifications and command notifications are now removed in the Resource Manager options
The mode of operation is now as follows:
If a user (or the Trojan) creates a file with the blocked extension on the network drive, the Resource Manager generates the event with the ID 8215 in the event log:
In addition, the script "block-smbshare.cmd" is started, which is only used to start the PowerShell script "block-smbshare.ps1". I had to take the detour via the CMD file, as otherwise the UAC would always interfere.
The PowerShell script now retrieves the user account that tried to encrypt a file or create a blocked file from the event log. The user is then denied access to the respective share:
In this case, it was the "Administrator" user. A CSV file containing the user and the path to the share is created in the Scripts folder so that it can later be traced on which shares the user was blocked:
The scripts can of course also be further customized, for example I have built into the PowerShell script that the server is shut down if more than 50 events occur from different users, because that would mean a wildfire.
It would also be conceivable to block the AD account by means of the user name, but this does not work immediately and, if the worst comes to the worst, haste is required.
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