Auf www.frankysweb.de erschienen folgende Artikel mit einem Ansatz zum blockieren von Ransomware (Vielen Dank an Frank Zöchling):

https://www.frankysweb.de/windows-fileserver-vor-ransomware-crypto-locker-schuetzen/

https://www.frankysweb.de/windows-fileserver-vor-ransomware-schuetzen-update/

Die Idee auf Frankysweb.de:
Wenn ein Nutzer auf einer festgelegten Netzwerkfreigabe versucht eine Datei mit einer Dateinamenerweiterung aus der "Ransomware-List" abzuspeichern wird:

1. Das Speichern der Datei unterbunden
2. Damit die Daten auf der Netzwerkfreigabe nun nicht stattdessen gelöscht werden wird dem Nutzer der Zugriff auf die betreffende Netzwerkfreigabe durch Setzen einer Zugriffsverweigerung auf die Freigabe entzogen
3. Der Nutzer und ein hinterlegter Admin bekommen eine Mail mit dem dokumentierten Zugriffsversuch. Zusätzlich wird der Name des Benutzers und die betroffene Freigabe in eine Textdatei auf dem Server dokumentiert.
 
Grenzen des Vorgangs:
1. Dateinamenerweiterungen müsssen gepflegt werden
2. False positives bei Dateinamenerweiterungen (z.B. *.key)

 
Nun stellte sich die Frage, wie man den Ansatz unter Microsoft Windows Server 2008, Windows Server 2008 R2 und SBS2011 umsetzen kann. Hier stehen die verwendeten PowerShell Cmdlets des 2012/R2 Servers nicht zur Verfügung. Auch ein Update der vorhandenen Powershell Version 2.0 auf Version 4 hilft nicht weiter.

Als Alternative funktioniert unter den genannten Serverversionen folgendes:

Wir arbeiten mit "SubInACL" von Microsoft. (Download hier:  https://www.microsoft.com/en-us/download/details.aspx?id=23510)
Das Tool wird für dieses Beispiel in C:\ bereitgestellt (oder Script entsprechend anpassen). Die Ransomware-Liste importieren wir per Batch-Datei wie in einem Kommentar des Ursprungsartikels beschrieben.

Dann muss die "block-smbshare.ps1" wie folgt angepasst werden, da das Tool die Freigabe über den UNC-Pfad anspricht, der Ansatz auf Frankysweb.de aber mit dem lokalen Pfad zum freigegebenen Ordner arbeitet:

Dazu wird der Variable $smbsharepath der Ordnernamen entnommen:
 
$pos = $smbsharepath.LastIndexOf("\")
$rightPart = $smbsharepath.Substring($pos+1)
 
Dann den UNC Pfad ergänzen, den Befehl zusammensetzen und verwenden:
 
$smbcacl = "C:\subinacl /verbose=1 /share \\127.0.0.1\" + "$rightPart" + " /deny=" + "$sourceuser"
cmd /c $smbcacl
 
Achtung:
Das funktioniert so nur, wenn die jeweilige Freigabe den gleichen Namen wie der freigegebene Ordner hat.
Das ist z.B. bei Verwendung eines angehängten "$", oder einer Standard SBS-Installation mit der Freigabe "UserShares" nicht der Fall. Wenn man nicht den Schönheitspreis gewinnen will kann man z.B. einfach folgendes ergänzen:
 
$smbcacl2 = "C:\subinacl /verbose=1 /share \\127.0.0.1\" + "$rightPart" + "$" + " /deny=" + "$sourceuser"
$smbcacl3 = "C:\subinacl /verbose=1 /share \\127.0.0.1\UserShares" + " /deny=" + "$sourceuser"
cmd /c $smbcacl2
cmd /c $smbcacl3



Auf diesem Wege kann man - sofern gewollt - auch gleich alle Freigaben eines Servers für den betroffenen User sperren. Dann laufen direkt alle Versuche ins Leere - macht aber auch mehr Arbeit bei einem False Positiv in der Ransomware-Liste.
 
Wir haben übrigens auch in der Ransomware-List den Dateinamen "Readme.txt" entfernt.
Zusätzlich muss die Dateiendung *.key entfernt werden, wenn z.B. ProfiCash im Einsatz ist.
 
Da in der Regel mehrere Freigaben geschützt werden sollen empfehlen wir den Ansatz auf Frankysweb.de dahingehend zu verändern, dass man im Ressourcenmanager unter Dateiprüfungsverwaltung eine Dateiprüfungsvorlage erstellt und diese als Basis für die jeweiligen Dateiprüfungen verwendet.
 
Nachtrag:
Gerne stellen wir nachfolgend das gewünschte Beispiel für Server 2008/2008R2/2011 zur Verfügung:

Die angepasste "block-smbshare.ps1" könnte also wie folgt aussehen:

$logfile = "c:\Scripts\logfile.csv"
$events = Get-EventLog -LogName application -Source SRMSVC -After (get-date).AddMinutes(-10) | select ReplacementStrings -Unique
if ($events.count -gt 50)
    {
        stop-computer -force
    }
else
    {
        foreach ($event in $events)
            {
                $sourceuser = $event.ReplacementStrings[0]
                $smbsharepath = $event.ReplacementStrings[1]
                
                $pos = $smbsharepath.LastIndexOf("\")
                $rightPart = $smbsharepath.Substring($pos+1)
                
                $smbcacl1 = "C:\subinacl /verbose=1 /share \\127.0.0.1\" + "$rightPart" + " /deny=" + "$sourceuser"
                $smbcacl2 = "C:\subinacl /verbose=1 /share \\127.0.0.1\" + "$rightPart" + "$" + " /deny=" + "$sourceuser"

                #Die Raute vor der nächsten Zeile entfernen, wenn die Freigabe UserShares auch gesperrt werden soll
                #$smbcacl3 = "C:\subinacl /verbose=1 /share \\127.0.0.1\UserShares" + " /deny=" + "$sourceuser"
                
                cmd /c $smbcacl1
                cmd /c $smbcacl2
                #Die Raute vor der nächsten Zeile entfernen, wenn die Freigabe UserShares auch gesperrt werden soll
                #cmd /c $smbcacl3
                
                $log = "$sourceuser" + ";" + "$smbsharepath"
                $log | add-content $logfile
            }
    }