SMB Server Message Block-Protokoll

Was ist SMB?

Das Server Message Block-Protokoll (SMB-Protokoll) ist ein Client-Server-Kommunikationsprotokoll, welches den gemeinsamen Zugriff auf Dateien, Drucker, serielle Schnittstellen und andere Ressourcen in einem Netzwerk ermöglicht. 

SMB wurde im Jahre 1983 von Barry Feigenbaum bei IBM vorgestellt. Im Laufe der Zeit wurde SMB hauptsächlich für die Verbindung von Windows-Computern weiterentwickelt, allerdings erhielten über die Jahre die meisten anderen Systeme – wie Linux und macOS – ebenfalls die Client-Komponenten für die Verbindung zu SMB-Ressourcen. 

Das Protokoll hat seitdem mehrere Varianten hervorgebracht, um den sich im Laufe der Jahre entwickelnden Netzwerkanforderungen gerecht zu werden. Während dieser Zeit wurde SMB in großem Umfang implementiert und ist nach wie vor eine der beliebtesten Lösungen für die gemeinsame Nutzung von Dateien am Arbeitsplatz.

Du möchtest eine professionelle & individuelle Beratung?
Teste jetzt deine IT durch einen professionellen Penetrationstest!
Zum Penetrationstest

Wie funktioniert SMB?

Die Netzwerkkommunikation über SMB findet über das Request-Response (Anfrage-Antwort) Verfahren statt. Dies ist eine der am häufigsten verwendeten Methoden für die Kommunikation innerhalb eines Netzwerkes. Angesiedelt ist das SMB-Protokoll auf der siebten Schicht des OSI-Modells (Application Layer). Der Client sendet eine Anfrage (Negotiate-Protocol-Request) an einen zuständigen Server, um eine Verbindung aufzubauen. Dabei sendet er dem Server eine Offerte der von ihm unterstützten Dialekte. 

Folgende Dialekte können dazu verwendet werden: 

  • Core 
  • Core Plus
  • LAN Manager 1.0
  • LAN Manager 2.0
  • LAN Manager 2.1
  • NT LAN Manager 1.0
  • Samba’s NT LM 0.12
  • Common Internet File System

Um eine SMB Session zu initiieren, sendet der Client eine SMB-Request auf dem TCP-Port 445 (Ab SMBv2). Der Server erhält die Anfrage und schickt anschließend eine SMB-Antwort (Negotiate-Protocol-Response) zurück. Zudem wird sich auf ein SMB-Dialekt geeinigt. Daraufhin erfolgt die Client/Server Authentifizierung, hierzu nutzt SMB standardmäßig das ATM (NT LAN Manager) Authentifizierungsprotokoll.

Allerdings können hier auch alternative Protokolle wie beispielsweise Kerberos genutzt werden.

Wie funktioniert eine NTLM Authentifizierung?

Die NTLM Authentifizierung wird mit einer „Session Setup Request“ (NTLM Negotiate) eingeleitet auf welche der Server mit einer „Session Setup Response“ (NTLM Challenge) reagiert. Sobald der Client die NTLM Challenge erhält, sendet dieser erneut eine „Session Setup Request“ (NTLM Authenticate) um die Verbindung zwischen Client und Server zu bestätigen.

Die NTLM Authentifizierung
Grafische Darstellung der NTLM Authentifizierung
SMB Session Aufbau mit NTLM Authentifizierung in Wireshark
SMB Session Aufbau mit NTLM Authentifizierung in Wireshark

Die Tree Connect Anfrage

Wenn die Authentifizierung erfolgreich durchgeführt wurde, kann der Client auf die angefragten Netzwerkressourcen zugreifen. Dafür sendet der Client einen „Tree-Connect-Request“ welcher vom Server mit einem „Tree-Connect-Response“ beantwortet wird.

In dieser Anfrage übergibt der Server dem Client auch sämtliche Infos über Zugriffsberechtigungen auf der beantragten SMB Freigabe. Wenn der Freigabename ein $ am Ende hat (wie IPC$ oder C$), bedeutet dies, dass die Freigabe versteckt ist; normalerweise erstellt das System versteckte Freigaben, aber auch Benutzer können sie erstellen. Versteckt bedeutet, dass die versteckten Freigaben nicht aufgelistet werden, wenn Sie zum Stammverzeichnis der Ressource gehen. Die IPC$-Freigabe wird hierbei auch als NULL-Sitzungsverbindung bezeichnet. 

Mithilfe dieser Sitzung wird es Windows Nutzern ermöglicht, bestimmte Aktivitäten auszuführen, z. B. das aufzählen der Namen von Domänenkonten und Netzwerkfreigaben.

Tree Connect Response mit Access Mask in Wireshark nach erfolgreicher NTLM Authentifizierung:
Tree Connect Response mit Access Mask in Wireshark nach erfolgreicher NTLM Authentifizierung:

Anfrage des Clients

  1. Die Benutzter-Interaktion (User Application) führt einen Systemaufruf (Syscall) auf die angefragte Datei aus, die an einem Share zur Verfügung liegt. 
  2. Der Redirector nimmt den Syscall vom Client entgegen und sendet diesen über das SMB-Protokoll an den zuständigen Server weiter.
  3. Auf dem angefragten Server ist ein Server Service implementiert, welcher eingehende SMB-Anfragen entgegen nimmt und bearbeitet.
SMB Anfrage Client

Antwort des Servers

  1. Der Server Service öffnet die eingegangene Anfrage und bekommt vom System einen Handle zurück. Ein Handle ist ein eindeutiger Referenzwert einer Systemressource von einem Betriebssystem. Dies kann auch eine einzelne Datei sein. 
  2. Dieser Handle wird anschließend vom Server einer FID (File ID) zugewiesen. Der Handle wird dabei nur innerhalb eines Systems verwendet. 
  3. Dabei enthält jedes übertragene Paket zur entsprechenden Datei die zugewiesene File ID.
SMB Antwort Server

Was sind Protocol Identifier?

Damit vom Redirector sowie Server eine erfolgreiche Identifizierung von Objekten für Input/Output Requests durchgeführt werden kann, bedarf es an sogenannten SMB-Protocol-Identifier.

SMB nutzt hierzu folgende Identifier:

User Identifier (UID)

Die UID wird dazu verwendet, um Zugriffsrechte auf Benutzerebene zu definieren. Bei dem „Session Setup Request“ (oben bereits beschrieben), gibt der Client einen sogenannten „Session Setup ANDX“ Befehl mit. Dieser dient zur Authentifizierung des Benutzers und der Anfrage einer UID. Der Redirector sendet die UID des Benutzers mit jedem Request zum Server. Es können aber auch mehrere UID’s einem Client zugeordnet werden. Dies sind dann meistens Zugriffsrechte für Systemprozesse.

Process Identifier (PID)

Damit jeder Request dem richtigen Prozess zugeordnet werden kann, enthält dieser eine PID.

Multiplex Identifier (MID)

Der Redirector kann gleichzeitig über mehrere ausstehende Befehle verfügen. Mit Hilfe der MDI, die vom Redirector selber erzeugt wird, kann er die Antwort des Servers entsprechend zuordnen. 

Tree Identifier (TID)

Die TID wird vom Server erzeugt, um die Freigabe eindeutig identifizieren zu können. Dabei wird jede Ressource auf dem Server durch eine Freigabe definiert. Der Redirecter verknüpft die Freigabe auf dem Client mit der Tree-ID des Servers. 

File Identifier (FID)

Die FID wird vom Server generiert. So wird der Zugriff (Freigabe) auf eine Datei eindeutig identifiziert. Für jeden einzelnen File sowie Request wird eine andere FID erzeugt, sogenanntes Handler-Mapping. Die FID wird bei jedem Request für ein bestehendes Objekt mitgesendet. In einer SMB-Sitzung können mehrere FID’s gleichzeitig benutzt werden.

Search Identifier (SID)

Die SID wird vom Server erzeugt. Sie ist für einen serverseitigen Suchvorgang verantwortlich. Zudem kann die SID für Caching, sprich Leistungsoptimierungen, verwendet werden. 

Verbessere jetzt die Sicherheit Deines IT-Systems!
Von uns erhältst Du eine ausführliche Beratung!
Jetzt kontaktieren

SMB-Versionen

Seit der Einführung des SMB-Protokolls wurden verschiedenste SMB-Dialekte veröffentlicht. Diese wurden mit der Zeit weiterentwickelt, um Funktionen, Skalierbarkeit, Sicherheit und Effizienz zu verbessern.  

SMB 1.0 (1984)

Entwickelt wurde SMB in seiner ersten Version von IBM im Jahre 1984. Es führt OpLock als clientseitigen Caching-Mechanismus ein, um Netzwerkverkehr zu reduzieren. Als Transportquelle verwendet SMB 1.0 das Network Basic Input/Output System (NetBios) über TCP. Aktuelle Windows Versionen unterstützen die Verwendung von SMB v1 nicht mehr da es zahlreiche Schwachstellen birgt. Diese Schwachstellen können Angreifern die Remote-Code-Ausführung sowie Denial-of-Service-Exploits erlauben. Systeme, bei denen dieses veraltete Protokoll aktiviert ist, bieten so eine Angriffsfläche für potentielle Attacken und eine hohe Anfälligkeit auf Ransomeware da viele Viren SMB v1 Nutzen um sich im Netzwerk nach einer erfolgreichen Infektion zu verbreiten.

SMB 2.0 (2006)

SMB 2.0 wurde mit Windows Vista und Windows Server 2008 veröffentlicht. Sowohl die Kommunikation im Netzwerk, deren Leistung, Skalierbarkeit sowie die Ausfallsicherheit verbesserte sich. Eine Unterstützung für WAN-Beschleunigung wurde ebenfalls hinzugefügt. In späteren Iterationen wurde das klassische OpLock-System durch das OpLock-Leasingmodell ersetzt um, auch da, die Leistung zu steigern. Weitere Aktualisierungen umfassten die Unterstützung großer maximaler Übertragungseinheiten und eine verbesserte Energieeffizienz. Diese ermöglichten es den Clients, mit einer aktiven Sitzung zu einem SMB-Server, in den Ruhezustand zu wechseln.

SMB 3.0 (2012)

SMB 3.0 wurde erstmals in Windows 8 und Windows Server 2012 eingeführt. Es fügte mehrere wichtige Upgrades hinzu, um die Verfügbarkeit, Leistung, Sicherung, Sicherheit und Verwaltung zu verbessern. Zu den neuen Funktionen gehörten der SMB-Multichannel, SMB-Direct, transparentes Failover des Client-Zugriffs, Unterstützung des Remote Volume Shadow Copy Service und SMB-Encryption. Ab Version 3.02 enthielt es zusätzlich Leistungsaktualisierungen und die Möglichkeit, die Unterstützung für CIFS/SMB 1.0 zu deaktivieren. SMB 3.1.1 wurde 2015 anschließend mit Windows 10 und Windows Server 2016 veröffentlicht. Es fügte neben anderen Aktualisierungen, Unterstützung für erweiterte Verschlüsselung, Integrität und von der Authentifizierung zur Verhinderung von Man-in-the-Middle Angriffen (MitM) hinzu.

Samba

Der Name Samba leitet sich vom Netzwerkprotokoll „SMB” ab und dient als Unix/Linux Implementation. Es wurde 1992 veröffentlicht und ist wie SMB immer wieder aktualisiert / verbessert worden. Seitdem SMBv3 in Samba als Standard gilt, wird das veraltete sowie unsichere SMB in seiner ersten Version als Grundeinstellung nicht mehr unterstützt. 

ANDERE BEITRÄGE

Inhaltsverzeichnis

Willst Du Teil unseres Teams werden?

Wir verwenden Cookies, um Ihnen die bestmögliche Erfahrung zu bieten. Wenn Sie unsere Website weiterhin besuchen, stimmen Sie der Verwendung von Cookies zu, wie in unserer Datenschutzerklärung beschrieben.