SMB1 Abschaltung

Aktuell sind wir bei SMB3 als Nachfolger von SMB2. Aber vielleicht nutzen einige Dienste von ihnen immer noch SMB1. Hier beschreibe ich, warum sie SMB1 endlich abschalten sollten und es schon seit Herbst 2017 nicht mehr zu Standardumfang von Windows 10 gehört. Höchste Zeit also den Zugang auch auf den Servern abzuschalten. Aber wie können Sie sicherstellen, dass danach alles weiter funktioniert?

Aus meiner Sicht ist SMB1 unsicher und sollte umgehend abgeschaltet werden.

SMB1 ist unsicher!

Microsoft hat mit Windows 10 1709 per Default schon nicht mehr SMB1 mit installiert und seit Windows 2008/Vista unterstützen Microsoft Server und Clients das modernere und sicherere SMB2. Mittlerweile ist es aber so, dass SMB1 einige Schwächen hat, die einen Weiterbetrieb nicht mehr ratsam werden lassen. SMB1 wurde vor über 30 Jahren (Erstmalig um 1983 von IBM, Quelle https://de.wikipedia.org/wiki/Server_Message_Block ) entwickelt, als Funktion vor Sicherheit stand und viele moderne Ansätze haben es nicht in das Protokoll geschafft. Daher gibt es ja SMB2 und mittlerweile SMB3. Vielleicht erinnern Sie sich noch an "WannaCry" (https://de.wikipedia.org/wiki/WannaCry) Verwundbar waren Systeme, die noch SMB1-Verbindungen angenommen haben.

SMB1 fehlen wichtige Schutzfunktionen wie z.B.:

Und selbst wenn Sie diese Funktionen durch Patches alles nachrüsten, so kann mit SMB 1 ein "Man in the Middle" die Endpunkte dazu zwingen, diese Funktionen nicht zu nutzen

SMB1 ist langsam!

Neben der Sicherheit gibt es auch noch jede Menge Performance-Optimierungen mit SMB2:

  • Größere Lese/Schreib-Operationen (SMB 2.0.2+)
    Wer dachte schon 1986 an Gigabit und WAN-Stecken mit hohen Latenzzeiten. Größere MTU-Werte erlauben eine höhere Performance
  • Caching auf dem Client für Dateien und Ordner (2.02+)
    Durch die Funktion "Branch-Cache" kann der Client entsprechende Teile lokal cachen und muss nur Änderungen übertragen. Für die Applikation ist dies transparent
  • Beständige Dateihandles (2.02, 2.1)
    Wenn die Netzwerk-Verbindung unterbrochen wurde, sind die Verweise auf die UNC-Dateien nicht mehr ungültig, sondern werden durch SMB wieder aufgebaut.
  • Optimiertes Locking (Client oplock leasing model) (2.02+)
    Diese Verbesserung optimiert das Locking von Dateien über langsame Netzwerke, reduziert die Datenmenge und erhöht die Skalierbarkeit der Server
  • Multichannel & SMB Direct (3.0+)
    Version SMB3 bringt deutliche Verbesserungen bezüglich redundanten Pfaden, sehr schnellen Netzwerken und direkten Speicherzugriff. Relevant ist dies im Server Backend wie Storage Spaces, Hochverfügbarkeit, Hyper-V Hosting etc.
  • Directory Leasing (3.0+)
    Verbesser die Reaktionszeit von Anwendungen bei Niederlassungen mit BranchCache durch weiteres Caching

Es gibt durchaus Gründe auch bei Clients und Servern auf SMB2+ zu setzen. Glücklicherweise ist SMB2 oder 3 seit Windows Vista/2008 schon der Standard. Aus Performanceüberlegungen ist es also langsam an der Zeit, zumindest die Windows 2003 Server und ältere Clients zu ersetzen.

Kritischer sind aus meiner Sicht aber die Sicherheitslücken, die nicht nur bei "SMB over Internet" sondern auch im LAN durchaus relevant sind.

SMB1,2,3 Kompatibilität

Auf der einen Seite hat Microsoft schön dokumentiert, welche Windows Version mit welcher anderen Version sich auf welche SMB-Version verständigt. Sie müssen dabei nur die Windows-Version der Endpunkte ermitteln und prüfen, welche Maximalversion angeboten wird. Beide Endpunkten einigen sich dann, zumindest wenn kein Angreifer diesen Handshake stört, auf die höchste gemeinsame Version.

Betriebssystem SMB1 SMB2 SMB3 Quelle

Windows Server 2016, Windows 10, Samba 4.3

optional

2.1

3.1.1

 

Windows Server 2012R2, Windows 8.1

ja

2.1

3.0.2

 

Windows Server 2012, Windows 8, Samba 4.0

ja

2.1

3.0

 

Windows 2008 R2, Windows 7

ja

2.1

nein

 

Windows 2008, Windows Vista, Samba 3.5

ja

2.0

nein

 

Windows 2000, Windows 2003, Windows XP

1.0

nein

nein

 

Windows NT 4.0/3.51

CIFS

nein

nein

 

Synology Disk Station NAS

1.0

2.0

3.0

QNAP NAS

1.0

2.0+

nein?

Samba Server

EOL

2.0

3.0

Ab Version 3.50

Wenn also ein Windows XP Client eine Verbindung aufbaut, dann kann das nicht besser als SMB1 werden, da SMB2 erst ab Windows Vista möglich ist. Wenn Sie aber SMB1 abschalten wollen, möchten Sie natürlich das Risiko eine Produktionsstörung vermindern. Wenn Sie höhere SMB-Versionen daher nicht "geblockt" haben, dann sollten alle Clients und Server ja SMB2 oder höher miteinander sprechen und nur die Systeme weiter SMB1 nutzen, die wirklich auch nur SMB1 können. Wenn Sie ein gut verwaltetes Netzwerk haben, dann sollte es eine Liste aller Endgeräte geben, zu denen Sie dann auch die Software und Version ermitteln können. Mit einer hoffentlich vollständigen Liste können Sie zumindest einen Großteil der bekannten Endgeräte prüfen. Eine Liste der MAC-Adressen und die Port-Zuordnung aus dem Switch hilft schon mal bei der Aufstellung der Liste.

Schritt 1: Wer nutzt SMB1?

Allerdings wissen viele Firmen immer noch nicht, welche Dienste und Endgeräte in ihrem Netzwerk wie miteinander sprechen. Oft können Sie nicht einmal sicher sein, alle Endgeräte zu kennen. Sie können aber auf Windows Servern eine Protokollierung aktivieren, damit SMB1-Zugriffe im Eventlog erscheinen:

# SMB1 Auditing per PowerShell einschalten
Set-SmbServerConfiguration -AuditSmb1Access $true

Alternativ können Sie per Gruppenrichtlinie natürlich auch den Eintrag direkt ändern

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]
"AuditSmb1Access"=dword:00000001

Die Zugriffe sind dann im Eventlog sichtbar.

Die Events gibt es aber auch noch mal bei SMBClient\Audit:

Diese Events lassen sich mit der passenden Monitoring-Software auch überwachen und melden.

Dieser Weg ist ideal, wenn Sie Server für Server die SMB1-Funktion abschalten wollen, um diese besser abzusichern.

Wenn Sie die Server identifiziert haben, können Sie in Windows 2008 oder 2012 über WMI und PowerShell auch hier eine Momentaufnahme der Verbindungen mit dem SMB-Dialekt ermitteln. Diese Daten können Sie z.B. über einige Tage immer wieder erfassen und zusammenführen.

Get-SmbSession `
   | ft clientcomputername,clientUsername,dialect `
        -AutoSize

clientcomputername clientUsername      dialect
------------------ --------------      -------
192.168.178.62     MSXFAQ\fcarius      3.02
192.168.178.59     MSXFAQ\winxpUser    1.0

Schritt 1b: SMB1 Erkennung im Netzwerk

SMB ist ein Netzwerkprotokoll und natürlich können Sie auch auf dem Kabel nach SMB-Paketen suchen und filtern. Wireshark und Co machen hier einen recht guten Job. Sie müssen allerdings die Pakete auf dem Computer selbst oder über einen TAP oder Mirror-Port die Pakete zuführen. Microsoft hat die Spezifikationen zu SMB im Jahren 2007 öffentlich gemacht

Demnach können Sie ein SMB-Paket am String "SMB" erkennen, der bei SMB1 mit einem "0xFF" vorangestellt ist und bei SMB2/3 mit einem 0xFE beginnt.

Solange SMB1 noch aktiv ist, werden Sie beim "Negotiate" der Verbindung sehen, dass hier ein "FF" davor steht und auch die alten Dialekte angeboten werden.

According to Microsoft's [MS-CIFS] specification, the first 4 bytes of the header for an SMB message "MUST contain the 4-byte literal string '\xFF', 'S', 'M', 'B', with the letters represented by their respective ASCII values in the order shown."
According to their [MS-SMB2 specification], the first 4 bytes of the header for an SMB2 message "MUST be (in network order) 0xFE, 'S', 'M', and 'B'."
So the first byte of the message is 0xFF for SMB and 0xFE for SMB2
Quelle: https://osqa-ask.wireshark.org/questions/9647/can-smb-v1-vs-smb-v2-be-detected-in-the-header

Leider habe ich keinen Capture-Filter erstellen können, der nur SMB1 mitschneidet. Insofern ist es etwas gefährlich, wenn man alle Pakete auf Port 445 mitnimmt und erst bei der Anzeige filtert. Besser wäre es daher gleich die mitgeschnittenen Daten auszuwerten und nur die SMB1-Client zu melden.

So charmant der passive Ansatz eines Netzwerk-Capture ist, so ist es in vielen Netzwerken nur eingeschränkt möglich. Sie müssen müssen ja quasi jedes Paket der Analyse zuführen. Und selbst dann wissen Sie ja nie sicher, ob Sie alle Geräte gefunden haben. Es könnte aber interessant sein, mit einer passenden Analyse zu erkennen, wer noch SMB1 im P2P-Verkehr miteinander spricht. Nicht immer haben Sie als Admin alle Server unter Kontrolle. Aber auch hier ist es sicher besser z.B. den Zugang zum Netzwerk über 802.1x abzusichern und nur für Geräte zu erlauben, die eben SMB1 nicht mehr nutzen dürfen.

Schritt 2: SMB1 auf dem Server abschalten

Damit sind wir beim Punkt: "Wie schalte ich SMB1 ab". Das hängt natürlich wieder von dem eingesetzten Client ab. Bei Windows erfolgt die Konfiguration der SMB-Protokolle wieder über Registrierungsschlüssel, die wie per PowerShell, Regedit oder Gruppenrichtlinie auf Servern und Clients setzen können:

Betriebssystem Befehle

Windows 10
Windows 2012R2
Windows 2016

Hier wird das optimale Feature "smb1protocol" einfach deinstalliert

# Feature abschalten. Erfordert Neutart des Servers
Disable-WindowsOptionalFeature `
   -Online `
   -FeatureName smb1protocol

# SMB Server Konfiguration anpassen
Set-SmbServerConfiguration -EnableSMB1Protocol $false

Windows Server 2012

Hier ist es ein Feature

# Abschalten
Set-SmbServerConfiguration -EnableSMB1Protocol $false -force 

# Feature entfernen erfordert ggfls.Neustart
Remove-WindowsFeature FS-SMB1

Windows Vista
Windows Server 2008
Windows 7
Windows Server 2008 R2
Windows 8

Auf älteren Systemen kann SMB1 nur deaktiviert aber nicht deinstalliert werden. Die Steuerung erfolgt über einen Registrierungsschlüssel.

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters]
"SMB1"=dword:00000000

Das geht auch per PowerShell

Set-ItemProperty `
   -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters" `
   -Name SMB1 `
   -Type DWORD `
   -Value 0 `
   –Force

Synology

Über die Webverwaltung können Sie die Min und Max-Version einstellen. Bei meiner DS216j war SMB1 als Minimum aber SMB2 als Maximum eingestellt. Ich habe die Change genutzt und gleich SMB2 als Minimum und SMB3 als Maximum eingestellt.

Ich würde die Einstellung Server für Server manuell machen und die Auswirkungen beobachten. Später sollten Sie aber diese Einstellung über eine Gruppenrichtlinie erzwingen, damit sicher alle SMB-Server kein SMB1 mehr anbieten

SMB1 auf dem Client abschalten

Zur Vollständigkeit sollten Sie auch den Clients die Nutzung von SMB1 unterbinden. Zwar kommt SMB1 nicht mehr zum Einsatz, wen der Server diese Version nicht mehr anbietet, aber es kann durchaus Server geben, die sie nicht über eine Gruppenrichtlinie (z.B.: NAS, Unix) in ihrem Netzwerk haben. Auf dem Windows Client müssen Sie dazu einen Dienst aus "disabled" stellen und die Abhängigkeit austragen. Auch hier müssen sie unterscheiden

Betriebssystem Befehle

Windows 10
Windows 2012R2
Windows 2016

Hier wird das optimale Feature "smb1protocol" einfach deinstalliert.

Disable-WindowsOptionalFeature `
   -Online `
   -FeatureName smb1protocol

Windows Vista
Windows Server 2008
Windows 7
Windows Server 2008 R2
Windows 8
Windows Server 2012

Hier muss dein Dienst auf deaktiviert gesetzt und die Abhängigkeit beim Client-Dienst entfernt werden.

sc.exe config lanmanworkstation depend= bowser/mrxsmb20/nsi
sc.exe config mrxsmb10 start= disabled

Hinweis: Der Text "bowser" ist richtig und muss nicht "browser" lauten.

Weitere Links