Протокол 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 Direct (RDMA): поддержка прямого доступа к памяти (Remote Direct Memory Access) через сетевые адаптеры, поддерживающие протоколы InfiniBand, iWARP или RoCE, что обеспечивало сверхнизкие задержки и высокую пропускную способность.
- SMB Multichannel: возможность использования нескольких сетевых путей (разных интерфейсов, IP-адресов или портов) для одного SMB-соединения, что увеличивало пропускную способность и отказоустойчивость.
- SMB Encryption: встроенное шифрование всего трафика (AES-128-CCM или AES-128-GCM) без необходимости использования внешних средств (IPsec, VPN).
- SMB Transparent Failover: поддержка непрерывной работы при отказе одного из серверов в кластере — клиент автоматически переключается на другой узел без потери соединения.
- VSS (Volume Shadow Copy Service) для SMB: поддержка теневых копий томов для восстановления предыдущих версий файлов на сервере.
SMB 3.02 (2014 год)
Небольшое обновление, выпущенное с Windows 8.1 и Windows Server 2012 R2, включало улучшения производительности для SMB Direct и исправления ошибок.
SMB 3.1.1 (2015 год)
Текущая стабильная версия протокола, представленная с Windows 10 и Windows Server 2016. Основные изменения:
- Предварительная аутентификация (Pre-authentication integrity): добавление криптографической проверки целостности на этапе установки соединения, что защищает от атак типа SMB Relay (перехват и перенаправление сессии).
- Улучшенное шифрование: поддержка более сильного алгоритма AES-128-GCM для шифрования данных.
- Поддержка кластеризации для SMB Direct: возможность использования RDMA в отказоустойчивых кластерах.
- Удаление SMB 1.0: начиная с Windows 10 Fall Creators Update (1709) и Windows Server 1709, поддержка SMB 1.0 по умолчанию отключена, а в последующих версиях (Windows 11, Windows Server 2022) её можно установить только вручную.
Классификация и версии
Протокол SMB существует в нескольких версиях, которые различаются по функциональности, безопасности и производительности:
| Версия | Год выпуска | Операционная система | Ключевые особенности |
|---|---|---|---|
| SMB 1.0 / CIFS | 1983/1996 | Windows NT 4.0, Windows 95, DOS | NetBIOS, открытая передача, уязвимости (WannaCry, NotPetya) |
| SMB 2.0 | 2006 | Windows Vista, Server 2008 | Сокращение команд, пакетная обработка, обязательная аутентификация |
| SMB 2.1 | 2010 | Windows 7, Server 2008 R2 | Аренда файлов, поддержка Jumbo Frames |
| SMB 3.0 | 2012 | Windows 8, Server 2012 | RDMA, Multichannel, Encryption, Transparent Failover |
| SMB 3.02 | 2014 | Windows 8.1, Server 2012 R2 | Улучшения SMB Direct |
| SMB 3.1.1 | 2015 | Windows 10, Server 2016 | Pre-authentication integrity, AES-128-GCM |
Архитектура и принцип работы
Модель клиент-сервер
SMB работает по принципу запрос-ответ. Клиент (например, Windows-компьютер) отправляет серверу (файловому серверу, NAS) SMB-пакет с командой (открыть файл, прочитать данные, записать данные). Сервер обрабатывает запрос и возвращает ответ. Для установления соединения используется протокол TCP (порт 445 для прямого SMB или порт 139 для SMB через NetBIOS).
Аутентификация
Протокол поддерживает несколько механизмов аутентификации:
- NTLM (NT LAN Manager): устаревший протокол, использующий хеши паролей. Уязвим для атак типа «pass-the-hash».
- Kerberos: современный протокол аутентификации, основанный на билетах, используемый в доменах Active Directory. Обеспечивает взаимную аутентификацию и защиту от перехвата.
- Pre-authentication integrity (SMB 3.1.1): дополнительный криптографический обмен на этапе установления соединения, предотвращающий атаки SMB Relay.
Шифрование
Начиная с 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 для предоставления общих папок (шары), к которым могут обращаться пользователи и приложения. Поддерживаются такие функции, как:
- Теневые копии (VSS): возможность восстановления предыдущих версий файлов.
- BranchCache: кэширование содержимого общих папок на локальных клиентах для ускорения доступа в филиалах.
- DFS (Distributed File System): распределённая файловая система, позволяющая объединять несколько серверов в единое пространство имён.
Хранилища 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 является устаревшим и небезопасным протоколом. Он содержит ряд критических уязвимостей, которые активно эксплуатировались злоумышленниками:
- EternalBlue (MS17-010): уязвимость, использованная в атаках WannaCry (2017) и NotPetya (2017). Позволяла удалённо выполнять код на сервере без аутентификации. Microsoft выпустила патч в марте 2017 года, однако многие системы остались незащищёнными.
- SMB Relay: атака, при которой злоумышленник перехватывает SMB-сессию и перенаправляет её на другой сервер, получая доступ к ресурсам от имени легитимного пользователя. SMB 3.1.1 защищает от этого с помощью предварительной аутентификации.
- Pass-the-hash: атака, при которой злоумышленник использует хеш пароля (NTLM-хеш) для аутентификации без знания самого пароля.
Рекомендации по безопасности
Для защиты SMB-инфраструктуры рекомендуется:
- Отключить SMB 1.0 на всех устройствах (в Windows это можно сделать через «Включение или отключение компонентов Windows» или через PowerShell).
- Включить SMB Encryption для всех общих ресурсов, если это не противоречит требованиям производительности.
- Использовать Kerberos вместо NTLM для аутентификации (в доменной среде).
- Ограничить доступ к SMB-портам (445, 139) с помощью брандмауэра, разрешая подключения только из доверенных сетей.
- Регулярно обновлять операционные системы и устанавливать патчи безопасности.
- Использовать 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.
Другие реализации
- Netatalk: реализация протокола Apple Filing Protocol (AFP), но также может поддерживать SMB для совместимости.
- NFS (Network File System): альтернативный протокол для Unix-систем, который несовместим с SMB.
- WebDAV: протокол для работы с файлами через HTTP, часто используется как альтернатива SMB в облачных сценариях.
Сравнение с альтернативными протоколами
| Характеристика | SMB (3.x) | NFS (v4) | AFP |
|---|---|---|---|
| Основная платформа | Windows | Unix/Linux | macOS |
| Шифрование | Встроенное (AES) | Встроенное (Kerberos) | Встроенное (TLS) |
| Поддержка RDMA | Да (SMB Direct) | Да (NFS over RDMA) | Нет |
| Многоканальность | Да (SMB Multichannel) | Нет | Нет |
| Отказоустойчивость | Да (Transparent Failover) | Да (NFS v4.1 pNFS) | Ограниченная |
| Совместимость с Windows | Родная | Через сторонние клиенты | Через сторонние клиенты |
Интересные факты
- Название «Server Message Block» происходит от структуры сообщений, которые протокол использует для передачи команд и данных.
- Атака WannaCry в 2017 году затронула более 200 000 компьютеров в 150 странах, используя уязвимость EternalBlue в SMB 1.0. Ущерб оценивается в миллиарды долларов.
- В Windows 10 и Windows 11 можно проверить, включён ли SMB 1.0, с помощью команды
Get-SmbServerConfiguration | Select EnableSMB1Protocolв PowerShell. - Протокол SMB используется не только для файлов, но и для печати: принтеры, подключенные к серверу, могут быть доступны по SMB как общие ресурсы.
- В 2022 году Microsoft анонсировала SMB over QUIC — протокол, который позволяет подключаться к файловым серверам через Интернет без VPN, используя UDP и TLS 1.3.
Источники
- Microsoft Docs: «Overview of SMB protocol» (документация по протоколу SMB в Windows Server).
- SNIA (Storage Networking Industry Association): «SMB 3.0 Technical Reference».
- Книга «Windows Server 2019 & PowerShell All-in-One For Dummies» — Sara Perrott.
- Статья «EternalBlue: The NSA Exploit That Shook the World» — Krebs on Security.
- Документация Samba: «Samba 4.11 Release Notes» (официальный сайт проекта Samba).
- RFC 1001, RFC 1002: «Protocol standard for a NetBIOS service on a TCP/UDP transport».
- Microsoft Security Response Center: «MS17-010: Security Update for Microsoft Windows SMB Server».
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →