Advertisement
Guest User

Untitled

a guest
Apr 12th, 2016
330
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.64 KB | None | 0 0
  1. Ich und Astorion (Freund von mir) kamen schon letzte Woche auf die Idee, FSRM dafür einzusetzen.
  2. Das Problem bei Monitoring ist jedoch, dass wir nicht nur zusehen wollen, wie die Dateien verschlüsselt werden sondern dies gar nicht erst erlauben wollen.
  3. Daher haben wir uns dazu entschlossen, ein Block beim Schreibeversuch benannter Dateien mit Endung .locky(.crypt, etc..) bei File-Screening zu erzeugen.
  4. Tritt so ein Event am Server auf, wird ein PowerShell Scrip aufgerufen, welches die IP des Clients ermittelt und diese auf der Server Firewall für Microsoft-SMB-Ports blockt.
  5. Unten angeführtes Script enthält derzeit kein foreach Statement bei der „net session“ Auswertung – wäre erforderlich, wenn ein Benutzer von 2 oder mehreren Rechner mit demselben Benutzernamen auf den Share zugreift. Dies ist wichtig, da beim „net session“ die aktuelle Verbindung nicht immer an erster Stelle der Liste steht.
  6. Script wurde auf folgenden Betriebssystemen getestet:
  7. Windows 2008, Windows 2008r2, Windows 2012, Windows 2012r2
  8. Aufgrund der Vielzahl an OS, sind nicht alle Befehle im Script selbst reine Powershell-Befehle, da manche Befehle erst ab bestimmten Powershell- bzw. Betriebssystemversionen verfügbar sind.
  9. Aus Sicherheitsbedenken haben wir nicht gleich den LANMAN Dienst gestoppt und auch nicht alle Ports des betroffenen Clients am Server geblockt (Stichwort: DDOS)
  10. Folgende Voraussetzungen müssen für das Script erfüllt sein:
  11. Als erstes muss natürlich FSRM, wie oben angegeben, eingerichtet werden. Einzige Ausnahme: E-Mail Notification (Benachrichtigung) muss bei File-Screen aktiviert sein, damit man als Admin davon etwas erfährt. Aber gleichzeitig muss Event-Log aktiviert werden – mit folgendem Inhalt (sonst klappt Script nicht):
  12. User [Source Io Owner] attempted to save [Source File Path] to [File Screen Path] on the [Server] server. This file is in the [Violated File Group] file group, which is not permitted on the server.e.g:
  13. Und bei Run-Command muss natürlich anstelle dem Lanmanserver Stop unter Program: %system32%\Powershell-Path für powershell.exe drinnen stehen (z.B. c:\windows\system32\WindowsPowershell\V1.0\powershell.exe und als Argument/Parameter muss der Pfad des Scriptes eingebeben werden – z.b.: c:\temp\Blockit.ps1
  14. Wird nun durch File-Screening ein Block aktiv (= infizierter Client hat versucht einer der Crypto-Dateien zu erstellen), wird erstens dies geblockt, zweitens erscheint im Windows Eventlog Applications der Event 8215 mit folgendem Beispieltext:
  15. User TestDomain1\Testuser1 attempted to save X:\Userdata\Filename.locky to X:\Userdata on the TESTSERVER1 server. This file is in the „Test-Crypto-File-Screen-FileGroup-Name“ file group, which is not permitted on the server.
  16. Und drittens wird das Powershell-Script aufgerufen.
  17. Dieses liest zuerst mal die letzten beiden Einträge vom Windows-Eventlog Applications aus.
  18. Ist Teiltext von „Test-Crypto-File-Screen-FileGroup-Name“ enthalten, dann wird dieser String eingelesen (sollte obiger Beispieltext sein) – danach wird daraus der Username ermittelt (Computername bzw. Domainname hier nicht wichtig)
  19. Aus dem Output von „net session“ wird dieser Username ermittelt und die IP-Adresse extrahiert.
  20. Anhand der IP Adresse können nun die Firewall-Regeln erstellt werden. Das Script loggt auch zusätzlich mit – damit hat man die Sicherheit, zu wissen, was genau das Script gemacht hat – der Einfachheit halber, haben wir für das Beispiel c:\temp\Blockit.log hier genannt
  21. Hier das Script – dies muss von euch natürlich als [Path\Filename.ps1] gespeichert werden:
  22. $Messages = get-eventlog -logname application -newest 2 | where { $_.EventID -eq 8215} | select Message
  23. $old_username = „“
  24. $Username = „“
  25. foreach ($M in $Messages)
  26. {
  27. if ($M -like „*Test-Crypto-File-Screen-FileGroup-Name*“)
  28. {
  29. $Username = Out-String -inputobject $M
  30. #evaluate the username of the full event-message
  31. $pos1 = $Username.IndexOf(„\“)
  32. $pos2 = $Username.IndexOf(„attempted“)
  33. $string1 = $Username.substring($pos1+1,(($pos2 – $pos1)-2))
  34. $Username = $string1.trim();
  35. #compair, if next username is not like the current username
  36. if($Username -ne $old_username)
  37. {
  38. #set old username to current username
  39. $old_username = $Username
  40. #start logging for further investigations
  41. out-file -filepath c:\temp\Blockit.log -InputObject „——————————-“ -Append
  42. $logdate = „$(get-date)“
  43. out-file -filepath c:\temp\Blockit.log -InputObject $logdate -Append
  44. out-file -filepath c:\temp\Blockit.log -InputObject $Username -Append
  45. #get net session and save it as string
  46. $sessions = net session
  47. $sessionstr = Out-String -inputobject $Sessions
  48. #get IP as String from net session
  49. $IP = $sessionstr.substring($sessionstr.IndexOf($Username)-21,14)
  50. out-file -filepath c:\temp\Blockit.log -InputObject $IP -Append
  51. #Convert String to IP and remove blanks
  52. [IPAddress]$Address = $IP.Trim();
  53. #Block IP-Address of infected Client in WindowsFireWall for SMB-Sharing
  54. netsh advfirewall firewall add rule name=“Block-Crypto Client TCP 139 $IP“ dir=in action=block protocol=tcp localport=139 remoteip=$Address profile=any enable=yes
  55. netsh advfirewall firewall add rule name=“Block-Crypto Client TCP 445 $IP“ dir=in action=block protocol=tcp localport=445 remoteip=$Address profile=any enable=yes
  56. netsh advfirewall firewall add rule name=“Block-Crypto Client UDP 137 $IP“ dir=in action=block protocol=udp localport=137 remoteip=$Address profile=any enable=yes
  57. netsh advfirewall firewall add rule name=“Block-Crypto Client UDP 138 $IP“ dir=in action=block protocol=udp localport=138 remoteip=$Address profile=any enable=yes
  58. }
  59. }
  60. }
  61. lg
  62. Full article
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement