Als het gaat om het selecteren van een protocol om bestanden over het netwerk te delen, kom je vaak de termen SMB en CIFS tegen in software-interfaces en documentatie. Sommige gebruikers denken dat SMB en CIFS hetzelfde zijn, en het verschil duidelijk identificeren kan moeilijk zijn. Laten we echter eens kijken waarom CIFS niet als synoniem voor SMB kan worden gebruikt. Leer over de verschillen tussen de SMB- en CIFS-protocollen en hoe de termen te gebruiken.
Wat Is SMB?
SMB, of Server Message Block, is een netwerkprotocol dat werkt op de toepassingslaag van het OSI-communicatiemodel. SMB wordt gebruikt om gedeelde toegang tot bronnen over het netwerk te bieden. Het SMB-protocol wordt veel gebruikt om bestanden te delen op bestandsservers, bestanden te delen tussen gebruikerscomputers en bestanden te kopiëren tussen computers.
Naast het manipuleren van bestanden, is het andere gebruiksscenario voor SMB berichten en afdrukken (algemene doelstellingen voor externe transacties), evenals het doorbladeren van computers in het netwerk. IBM ontwikkelde SMB in 1983, en sindsdien is het protocol meerdere keren verbeterd.
Wat is SMB-bestandsdeling?
SMB-bestandsdelingen zijn mappen op een externe host die beschikbaar worden gesteld via het SMB-protocol. Ze zijn geconfigureerd op bestandsservers, en lees- en schrijftoegang kan worden geconfigureerd voor deze delingen. Een bestandsserver kan meerdere SMB-delingen hebben.
Hoe SMB werkt: Wat doet SMB?
SMB werkt op basis van het client-server netwerkprincipe. Het protocol maakt gebruik van een reeks gegevenspakketten met daarin een verzoek verzonden door een client of een antwoord verzonden door een server. Cliënten kunnen verbinding maken met een server door een IP-adres of hostnaam te gebruiken. Deze SMB-gegevenspakketten kunnen worden geclassificeerd als:
- Sessiebesturingspakketten, die verbindingen met bestandsdelingen tot stand brengen/stoppen
- Bestandstoegangspakketten, die, zoals de naam al aangeeft, toegang krijgen tot de bestandsdelingen en de bestanden manipuleren
- Algemene berichtpakketten
SMB opent een sessie nadat er een verbinding is tot stand gebracht en de authenticatie is voltooid. Vervolgens kunnen SMB-berichten over deze sessie worden verzonden. Bij het initiëren van een sessie stuurt een SMB-client een lijst met zijn mogelijkheden (mogelijkheden zijn afhankelijk van de SMB-versie van de client).
Het SMB-protocol kan werken:
- direct via TCP door poort 445 te gebruiken (zonder NetBIOS) – dit is de moderne aanpak.
- via NetBIOS API door UDP-poorten 137 en 138 en TCP-poorten 137 en 139 te gebruiken – dit is de legacy-aanpak die werd gebruikt tot Windows 2000. De eerste versies van SMB gebruikten NetBIOS over TCP/IP voor transport.
Het SMB-protocol ondersteunt batchen, dat wil zeggen het groeperen van meerdere berichten en ze in één transmissie verzenden om de prestaties te verbeteren.
Aanvullende functionaliteit omvat bestandsvergrendelingsmechanismen om gedeelde bestanden te beschermen wanneer meerdere gebruikers hetzelfde bestand openen. Bestanden vergrendelen voorkomt dat gegevens gelijktijdig door meerdere gebruikers worden geschreven en inconsistentie van gegevens in een bestand veroorzaken.
IPC (inter-procesverbinding) staat ook bekend als een null-sessieverbinding. De IPC$-share gemaakt door Windows wordt gebruikt voor tijdelijke verbindingen tussen clients en servers. Deze verborgen share is gemaakt voor het delen van gegevens die niet kunnen worden geclassificeerd als bestanden/mappen en printers, bijvoorbeeld gebruikers- en share-enumeratie.
Windows-systemen bevatten een ingebouwde SMB-client en -server. Echter, clientversies van Windows hebben een limiet op het aantal gebruikers dat verbinding kan maken met een host, in tegenstelling tot Windows Server-versies, die dergelijke beperkingen niet hebben.
- Windows XP en Vista – maximaal 10 gelijktijdige verbindingen
- Windows 7 en Windows 10 – maximaal 20 gelijktijdige verbindingen
Een SMB-server op Linux wordt geïnstalleerd door Samba te configureren, wat een gratis implementatie van een SMB-server voor Linux is. Merk op dat Samba ook het mogelijk maakt om Linux aan te sluiten bij een Active Directory-domein en Linux te laten fungeren als een domeincontroller. SMB-clientsoftware is ook beschikbaar op Linux (gratis) en op andere besturingssystemen.
Wat is CIFS?
CIFS, of Common Internet File System, is een specifieke implementatie of dialect van SMB ontwikkeld door Microsoft in 1996 na de release van Windows 95. Een dialect is een versie en geen apart onafhankelijk protocol. Een dialect is een reeks berichtenpakketten die worden verzonden/ontvangen voor communicatie tussen hosts die een bepaalde protocolversie definiëren. CIFS is geen bestandssysteem, in tegenstelling tot wat de naam suggereert.
De CIFS-protocolspecificatie is gebaseerd op het originele SMB-protocol, maar met enkele extra functies toegevoegd door Microsoft. Microsoft heeft directe verbindingen geïmplementeerd via TCP en poort 445 zonder NetBIOS over TCP te gebruiken (dat werd gebruikt bij de eerste SMB 1-implementaties). CIFS is een implementatie van SMB 1 en geen apart protocol voor bestandsdeling.
SMB-protocoldialecten
Wanneer we het hebben over de SMB1-implementatie door Microsoft, kunnen we de term CIFS gebruiken. In alle andere gevallen, en in het algemeen, is SMB de juiste term om naar dit netwerkprotocol te verwijzen. Laten we eens nader kijken naar SMB-versies die na CIFS zijn uitgebracht om een beter begrip te krijgen van het verschil tussen CIFS en andere (nieuwere) SMB-dialecten (versies).
SMB 2.0
Microsoft bracht SMB 2.0 (of SMB2) uit in 2006 met Windows Vista. Deze SMB-versie is betrouwbaarder dan SMB 1.0/CIFS, en het is niet CIFS. Het aantal benodigde commando’s om bestanden over te dragen is verminderd van meer dan 100 naar 20. De prestaties zijn hoger door de pipelinemechanismen, dat wil zeggen de mogelijkheid om een extra verzoek te verzenden voordat het antwoord op het vorige wordt ontvangen. Het samenvoegen van meerdere acties in één verzoek vermindert het aantal verzoeken aan een client, wat de prestaties verbetert.
SMB 2.1
SMB 2.1 biedt minimale verbeteringen in prestaties en blokkeringsmechanismen in vergelijking met SMB 2.0. Deze protocolversie werd uitgebracht met Windows 7 en Windows Server 2008 R2.
SMB 3.0
In eerste instantie werd deze protocolversie SMB 2.2 genoemd, maar hij werd later hernoemd naar SMB 3.0 met Windows 8. De SMB 3.0-versie:
- voegde SMB Direct (directe toegang tot geheugen), SMB Multichannel en SMB Transport Failover toe
- verbeterde beveiliging
- voegde ondersteuning toe voor end-to-end encryptie
- verbeterde netwerk-efficiëntie door latentie te verminderen
SMB 3.0.2
SMB 3.0.2 of 3.02 is beschikbaar sinds Windows 8.1 en Windows Server 2012 R2. In deze versie kan de SMB 1.0 compatibiliteit worden uitgeschakeld om de beveiliging te verbeteren.
SMB 3.1.1
Deze versie is beschikbaar vanaf Windows 10 en Windows Server 2016. De verbeteringen omvatten betere versleuteling (AES 128 GCM en AES 128 CCM) en SHA-512 hash voor pre-authenticatie integriteitscontroles.
SMB in Windows en Microsoft Server
SMB is beschikbaar in Windows vanaf Windows 3.1 (Windows for Workgroups). SMB-versies en compatibiliteit voor verschillende Windows-versies worden uitgelegd in de tabel.
Kolommen en rijen bevatten Windows-versies die een SMB-client of SMB-server kunnen uitvoeren (kolommen en rijen zijn uitwisselbaar). Een cel op het snijpunt van een kolom en rij geeft weer welke SMB-protocolversie wordt gebruikt voor communicatie tussen de respectievelijke Windows-versies.
Windows 10
Server 2016 en nieuwer |
Windows 8.1
Server 2012 R2 |
Windows 8
Server 2012 |
Windows 7
Server 2008 R2 |
Windows Vista
Server 2008 |
Win XP, Server 2003 en ouder | |
Windows 10
Server 2016 en nieuwer |
SMB 3.1.1 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 8.1
Server 2012 R2 |
SMB 3.02 | SMB 3.02 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 8
Server 2012 |
SMB 3.0 | SMB 3.0 | SMB 3.0 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows 7
Server 2008 R2 |
SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.1 | SMB 2.0 | SMB 1.0 |
Windows Vista
Server 2008 |
SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 2.0 | SMB 1.0 |
Win XP, Server 2003 en ouder | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 | SMB 1.0 |
CIFS vs SMB: De Waarschijnlijke Bron van de Verwarring
Laten we aan de hand van een voorbeeld ontdekken waarom de termen CIFS en SMB nog steeds verward worden door gebruikers. Om dat te doen, laten we zeggen dat we een bestandsserver gebruiken met een SMB-share geconfigureerd op Windows Server 2019 en een Linux-machine die verbinding maakt met deze bestandsserver via het SMB-protocol. Ubuntu 20.04 is de Linux-distributie die we in dit voorbeeld gebruiken. Merk op dat de configuratie hetzelfde is voor Ubuntu 22.
We hebben de volgende configuratie in onze omgevingen:
- Windows Server 2019: 192.168.101.209
- Linux Ubuntu 20.04: 192.168.101.210
- SMB-share op Windows Server: \\192.168.101.209\share
In Windows Server 2019 is het SMB 1.0/CIFS-protocol standaard uitgeschakeld. Om deze instelling te controleren en handmatig de SMB1.0/CIFS-client en -server in te schakelen/uitschakelen, ga naar Serverbeheer > Rollen en functies toevoegen > Kenmerken.
We houden SMB 1.0/CIFS uitgeschakeld op onze Windows Server 2019-machine. Dit betekent dat SMB 3 standaard wordt gebruikt met de mogelijkheid om over te schakelen naar SMB 2 voor compatibiliteit met clients die SMB 2-versies (dialecten) gebruiken.
Het CIFS-protocol is standaard uitgeschakeld in moderne Windows-versies zoals Windows 10 voor een betere beveiliging, en u kunt het indien nodig handmatig inschakelen.
Opmerking:In 2017 werden massale wereldwijde ransomware-aanvallen (WannaCry en NotPetya) uitgevoerd door gebruik te maken van exploits voor SMB 1-kwetsbaarheden. Deze exploits kregen de naam EternalBlue, EternalRomance en EternalChampion. Microsoft bracht beveiligingspatches uit voor zijn besturingssystemen, te beginnen bij Windows XP en Windows Server 2003, ondanks het feit dat deze OS’en destijds geen officieel ondersteunde versie waren. Microsoft raadde aan om SMB 2 en SMB 3 (ondersteuning voor pre-authenticatie-integriteit) te gebruiken in plaats van SMB 1.0/CIFS.
Zoals hierboven vermeld, is de naam van de SMB-server voor Linux Samba (samba is de pakketnaam). We gebruiken een SMB-server op Windows. Dus we hebben geen Samba nodig in dit voorbeeld, maar eerder hebben we een SMB-client nodig voor Ubuntu Linux.
Een SMB-client voor Linux is inbegrepen in Linux CIFS Utils (cifs-utils is de pakketnaam). Hier komt de verwarring vandaan. De eerste versie van deze client voor Linux werd gemaakt in een tijd waarin SMB 1.0/CIFS veel werd gebruikt. Het SMB-protocol is bijgewerkt, SMB-versies 2 en 3 zijn uitgebracht, maar de naam van de Linux SMB-client blijft hetzelfde, en het pakket met de SMB-client heet nog steeds CIFS Utils. Het pakket cifs-utils maakt geen deel uit van samba.
We zullen verbinding maken vanaf Linux met behulp van CIFS Utils naar een SMB-share op Windows Server 2019 om erachter te komen of CIFS nog steeds wordt gebruikt. Om CIFS Utils te installeren, voer je het volgende commando uit met rootrechten:
sudo apt-get install cifs-utils
Maak een directory aan die als koppelingspunt voor de SMB-share zal worden gebruikt:
mkdir /mnt/share
Maak verbinding met de SMB-bestandsshare die zich op een externe Windows-bestandsserver bevindt:
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator
We gebruiken een Windows-beheerdersaccount in ons voorbeeld voor educatieve doeleinden.
CIFS vs SMB – welke wordt gebruikt in de huidige sessie voor verbinding met de bestandsserver? Controleer de SMB-versie van clients die verbonden zijn met de SMB-share op Windows Server met het PowerShell-commando op Windows Server 2019:
Get-SmbSession | Select-Object -Property ClientComputerName,ClientUserName,Dialect
Zoals we kunnen zien in de PowerShell-uitvoer, wordt SMB 3.1.1 gebruikt voor onze verbinding vanaf Ubuntu Linux. SMB 1.0/CIFS wordt niet gebruikt wanneer we verbinden met cifs-utils en het mount.cifs commando naar een bestandsserver geconfigureerd op Windows Server 2019.
We kunnen ook de SMB-protocolversie controleren in /proc/mounts met het cat /proc/mounts commando in Linux. We kunnen het volgende commando gebruiken om alleen de benodigde resultaten te filteren:
cat /proc/mounts | grep cifs
Zoals we zien in de uitvoer, is de protocolversie voor het verbinden met het bestandsaandeel gemarkeerd als cifs, maar de weergegeven versie is 3.1.1 (vers=3.1.1), wat geen versie van CIFS is. Dit is nog een voorbeeld dat laat zien hoe de termen SMB vs CIFS verward kunnen raken.
In feite wordt SMB 3.1.1 gebruikt en niet CIFS. We kunnen dit bewijzen met nog een methode door nmap te gebruiken, wat een gratis netwerkontdekkingstool is die wordt gebruikt voor analyse en probleemoplossing.
Om nmap te installeren in Ubuntu, voer het volgende commando uit als root:
sudo apt-get install nmap
Om alle hosts te scannen die online zijn en verbonden met ons 192.168.101.0/24 netwerk, gebruiken we het commando:
nmap --script smb-protocols 192.168.101.0/24
We zijn geïnteresseerd in het bekijken van het resultaat voor 192.168.101.209, dat het IP-adres is van onze Windows Server 2019 die als bestandsserver fungeert. Linux is verbonden met de bestandsshare op deze server. In de uitvoer zien we dat de dialecten voor SMB-protocollen die worden ondersteund door onze Windows Server 2.02, 2.10, 3.00, 3.02 en 3.11 zijn. Er is geen SMB 1.0/CIFS, hoewel de term CIFS nog steeds wordt gebruikt in Linux-configuratiebestanden en -opdrachten.
We kunnen handmatig CIFS gebruiken door de parameter vers=1.0 toe te voegen aan de mount-opdracht in Linux (aan de clientzijde) om alleen het SMB 1.0/CIFS-protocol te gebruiken bij het verbinden met een bestandsshare op een externe server.
mount -t cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0
of
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=1.0
Het resultaat is als volgt:
Server heeft de verbinding plotseling verbroken. Dit kan gebeuren als de server de SMB-versie die u probeert te gebruiken, niet ondersteunt. De standaard SMB-versie is onlangs gewijzigd van SMB1 naar SMB2.1 en hoger.
Dit resultaat komt overeen met de eerdere resultaten van ons onderzoek naar SMB vs CIFS in moderne besturingssystemen. CIFS wordt niet gebruikt en SMB 1.0/CIFS is uitgeschakeld op onze Windows Server.
Als we het instellen om minstens SMB 2.0 te gebruiken, kunnen we verbinding maken met de server (onthoud de lijst met SMB-dialecten die worden ondersteund door onze Windows Server 2019 die wordt weergegeven in nmap):
mount.cifs //192.168.101.209/share /mnt/share -o user=administrator,vers=2.0
Bij het gebruik van de grafische gebruikersinterface in Linux of andere besturingssystemen, gebruik smb:// in de adresregel bij het definiëren van het te gebruiken netwerkprotocol voor het verbinden met een bestandsdeling op een externe server.
Bij het invoeren van het adres naar een SMB-bestandsdeling, moet je gebruiken:
smb://server-naam/deling-naam
Gebruik niet:
cifs://server-naam/deling-naam
omdat de client zal proberen verbinding te maken via het SMB1.0/CIFS-protocol, dat mogelijk is uitgeschakeld op een server (als de client zelfs de cifs:// syntaxis ondersteunt).
Conclusie
Nu het CIFS-protocol verouderd is, is SMB een van de protocollen die worden gebruikt om verbinding te maken met gedeelde opslag op bestandsservers en NAS (de andere veelgebruikte is NFS). Omdat gedeelde opslag bijzonder vatbaar is voor gegevenscorruptie, ransomware en andere bedreigingen die zich gemakkelijk over een netwerk kunnen verspreiden, zorg ervoor dat je bestanden en mappen die zijn opgeslagen op gedeelde bronnen back-upt om gegevensverlies te voorkomen. Het besmetten van de computer van zelfs één gebruiker met schrijfrechten voor gedeelde bestanden kan gegevensverlies veroorzaken voor alle gebruikers.
NAKIVO Backup & Replication is een gegevensbeschermingsoplossing die incrementele back-ups ondersteunt via SMB en NFS van gegevens die zijn opgeslagen op NAS en Windows/Linux bestandsservers.