Открыть сервис

Протокол SMB

Протокол SMB (Server Message Block) — это сетевой протокол прикладного уровня, предназначенный для предоставления общего доступа к файлам, принтерам, последовательным портам и другим сетевым ресурсам, а также для межпроцессного взаимодействия (IPC) в локальных вычислительных сетях. Протокол работает в модели «клиент-сервер», где клиентское устройство отправляет серверу запросы на чтение, запись, открытие или закрытие файлов, а сервер обрабатывает эти запросы и возвращает результат. SMB является основным протоколом для организации файловых служб в операционных системах семейства Windows, однако поддерживается и другими операционными системами, включая Linux, macOS и Unix-подобные системы (через реализацию Samba).

История развития

SMB 1.0 / CIFS (1980-е — 1990-е годы)

Первая версия протокола SMB была разработана в 1983 году компанией IBM для операционной системы DOS и предназначалась для организации совместного доступа к файлам в локальной сети. В 1987 году Microsoft и Intel совместно опубликовали спецификацию протокола, которая легла в основу реализации SMB в MS-NET и OS/2. В 1996 году Microsoft выпустила расширенную версию протокола под названием Common Internet File System (CIFS), которая добавила поддержку работы через Интернет, улучшенную аутентификацию и поддержку длинных имён файлов. SMB 1.0/CIFS использовал NetBIOS поверх TCP/IP (порт 139) или напрямую TCP (порт 445). Протокол был плохо защищён: передача данных и паролей часто происходила в открытом виде, что делало его уязвимым для атак типа «человек посередине» и перехвата трафика.

SMB 2.0 (2006 год)

Выход SMB 2.0 совпал с выпуском Windows Vista и Windows Server 2008. Основные изменения были направлены на повышение производительности и снижение сетевого трафика. Вместо множества отдельных команд (около 100) в SMB 1.0, новая версия использовала всего 19 команд, что сократило количество транзакций между клиентом и сервером. Была введена возможность пакетной обработки запросов (pipelining), поддержка символических ссылок и улучшенное кэширование. SMB 2.0 также требовал обязательной аутентификации и шифрования трафика (через NTLM или Kerberos), что повысило безопасность.

SMB 2.1 (2010 год)

Версия 2.1, выпущенная с Windows 7 и Windows Server 2008 R2, добавила механизм «аренды» (leasing) для уменьшения числа запросов на открытие/закрытие файлов, а также поддержку «крупных MTU» (Jumbo Frames) для повышения пропускной способности.

SMB 3.0 (2012 год)

SMB 3.0 (также известный как SMB 2.8) был представлен с Windows 8 и Windows Server 2012. Это стало одним из самых значительных обновлений протокола. Ключевые нововведения:

SMB 3.02 (2014 год)

Небольшое обновление, выпущенное с Windows 8.1 и Windows Server 2012 R2, включало улучшения производительности для SMB Direct и исправления ошибок.

SMB 3.1.1 (2015 год)

Текущая стабильная версия протокола, представленная с Windows 10 и Windows Server 2016. Основные изменения:

Классификация и версии

Протокол SMB существует в нескольких версиях, которые различаются по функциональности, безопасности и производительности:

ВерсияГод выпускаОперационная системаКлючевые особенности
SMB 1.0 / CIFS1983/1996Windows NT 4.0, Windows 95, DOSNetBIOS, открытая передача, уязвимости (WannaCry, NotPetya)
SMB 2.02006Windows Vista, Server 2008Сокращение команд, пакетная обработка, обязательная аутентификация
SMB 2.12010Windows 7, Server 2008 R2Аренда файлов, поддержка Jumbo Frames
SMB 3.02012Windows 8, Server 2012RDMA, Multichannel, Encryption, Transparent Failover
SMB 3.022014Windows 8.1, Server 2012 R2Улучшения SMB Direct
SMB 3.1.12015Windows 10, Server 2016Pre-authentication integrity, AES-128-GCM

Архитектура и принцип работы

Модель клиент-сервер

SMB работает по принципу запрос-ответ. Клиент (например, Windows-компьютер) отправляет серверу (файловому серверу, NAS) SMB-пакет с командой (открыть файл, прочитать данные, записать данные). Сервер обрабатывает запрос и возвращает ответ. Для установления соединения используется протокол TCP (порт 445 для прямого SMB или порт 139 для SMB через NetBIOS).

Аутентификация

Протокол поддерживает несколько механизмов аутентификации:

Шифрование

Начиная с SMB 3.0, протокол поддерживает встроенное шифрование трафика. Используются алгоритмы AES-128-CCM (SMB 3.0) и AES-128-GCM (SMB 3.1.1). Шифрование может быть включено на уровне общего ресурса (шары) или для всего сервера. В Windows Server 2022 и Windows 11 добавлена поддержка AES-256-GCM для SMB 3.1.1.

SMB Direct (RDMA)

SMB Direct позволяет обходить ядро операционной системы при передаче данных, используя прямой доступ к памяти. Это снижает задержки и нагрузку на процессор, что особенно важно для высокопроизводительных хранилищ (например, в дата-центрах). Поддерживаются протоколы InfiniBand, RoCE (RDMA over Converged Ethernet) и iWARP.

SMB Multichannel

Эта функция позволяет агрегировать несколько сетевых подключений между клиентом и сервером. Если у клиента или сервера есть несколько сетевых интерфейсов (например, два порта Ethernet), SMB может использовать их одновременно для увеличения пропускной способности. Если один из путей выходит из строя, трафик автоматически перераспределяется на оставшиеся.

Применение

Файловые службы Windows

Основное применение SMB — организация файловых серверов в корпоративных сетях. Windows Server использует SMB для предоставления общих папок (шары), к которым могут обращаться пользователи и приложения. Поддерживаются такие функции, как:

Хранилища NAS

Многие сетевые хранилища (NAS) от производителей, таких как Synology, QNAP, NetApp, используют SMB для совместимости с Windows-клиентами. Реализация SMB в NAS обычно основана на Samba (открытая реализация протокола для Unix-подобных систем).

Виртуализация и гиперконвергентные системы

В средах виртуализации (Hyper-V, VMware vSphere) SMB используется для хранения файлов виртуальных машин (VHDX-файлов) на удалённых файловых серверах. SMB 3.0 и выше поддерживают такие сценарии, как Live Migration (перемещение работающей ВМ между хостами) и Storage Spaces Direct (гиперконвергентное хранилище в Windows Server).

Межпроцессное взаимодействие (IPC)

SMB может использоваться для организации именованных каналов (named pipes) и других механизмов IPC между процессами на разных компьютерах. Например, удалённое управление Windows (через WinRM) может использовать SMB для передачи данных.

Безопасность и уязвимости

SMB 1.0 и уязвимости

SMB 1.0 является устаревшим и небезопасным протоколом. Он содержит ряд критических уязвимостей, которые активно эксплуатировались злоумышленниками:

Рекомендации по безопасности

Для защиты SMB-инфраструктуры рекомендуется:

  1. Отключить SMB 1.0 на всех устройствах (в Windows это можно сделать через «Включение или отключение компонентов Windows» или через PowerShell).
  2. Включить SMB Encryption для всех общих ресурсов, если это не противоречит требованиям производительности.
  3. Использовать Kerberos вместо NTLM для аутентификации (в доменной среде).
  4. Ограничить доступ к SMB-портам (445, 139) с помощью брандмауэра, разрешая подключения только из доверенных сетей.
  5. Регулярно обновлять операционные системы и устанавливать патчи безопасности.
  6. Использовать SMB Multichannel для повышения отказоустойчивости.

Реализации

Microsoft Windows

В Windows SMB реализован на уровне ядра (драйвер mrxsmb.sys для клиента и srv.sys для сервера). Начиная с Windows 10, Microsoft активно продвигает SMB 3.1.1 и рекомендует отключать SMB 1.0. В Windows Server 2022 добавлена поддержка SMB over QUIC (протокол на основе UDP), который позволяет безопасно подключаться к файловым серверам через Интернет без VPN.

Samba

Samba — это свободная реализация протокола SMB для Unix-подобных систем. Она позволяет Linux-серверам выступать в роли файловых серверов для Windows-клиентов, а также может выступать в роли контроллера домена Active Directory. Samba поддерживает SMB 3.1.1 (начиная с версии 4.11). Широко используется в корпоративных средах для интеграции Linux-систем в инфраструктуру Windows.

Другие реализации

Сравнение с альтернативными протоколами

ХарактеристикаSMB (3.x)NFS (v4)AFP
Основная платформаWindowsUnix/LinuxmacOS
ШифрованиеВстроенное (AES)Встроенное (Kerberos)Встроенное (TLS)
Поддержка RDMAДа (SMB Direct)Да (NFS over RDMA)Нет
МногоканальностьДа (SMB Multichannel)НетНет
ОтказоустойчивостьДа (Transparent Failover)Да (NFS v4.1 pNFS)Ограниченная
Совместимость с WindowsРоднаяЧерез сторонние клиентыЧерез сторонние клиенты

Интересные факты

Источники

  1. Microsoft Docs: «Overview of SMB protocol» (документация по протоколу SMB в Windows Server).
  2. SNIA (Storage Networking Industry Association): «SMB 3.0 Technical Reference».
  3. Книга «Windows Server 2019 & PowerShell All-in-One For Dummies» — Sara Perrott.
  4. Статья «EternalBlue: The NSA Exploit That Shook the World» — Krebs on Security.
  5. Документация Samba: «Samba 4.11 Release Notes» (официальный сайт проекта Samba).
  6. RFC 1001, RFC 1002: «Protocol standard for a NetBIOS service on a TCP/UDP transport».
  7. Microsoft Security Response Center: «MS17-010: Security Update for Microsoft Windows SMB Server».

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →