Источник: https://github.com/AnaktaCTF/CTF/blob/main — Misc/SMB_Protocol.md

1

SMB (Server Message Block) — это сетевой протокол прикладного уровня, предназначенный для предоставления общего доступа к файлам, принтерам, портам и другим сетевым ресурсам в локальной сети или через интернет. Протокол позволяет компьютерам в сети запрашивать доступ к ресурсам на других устройствах так, будто они находятся на локальной машине пользователя.

Изначально SMB был разработан компанией IBM в конце 1980-х годов для упрощения совместного использования файлов в сетевых операционных системах. Позже Microsoft адаптировала и доработала протокол для использования в своих продуктах, таких как Windows NT и последующие версии Windows. Именно благодаря Microsoft SMB получил широкую популярность.

Основная задача SMB — обеспечить удобный и безопасный способ обмена данными между клиентами и серверами в сети. С помощью SMB пользователи могут:

  • Открывать, редактировать и сохранять файлы на удалённом сервере, как если бы они работали с локальными файлами.

  • Печать документов на сетевых принтерах.

  • Выполнять административные задачи, например, управление сетевыми общими ресурсами и настройками доступа.

  • Подключаться к удалённым рабочим столам и службам.

Как работает SMB на базовом уровне:
Когда клиент хочет получить доступ к ресурсу на сервере, он отправляет запрос через протокол SMB. Сервер обрабатывает запрос, проверяет права доступа пользователя и отправляет ответ с данными или с отказом в доступе. При этом передача может происходить через различные транспортные протоколы, чаще всего через TCP/IP (на порту 445).

Особенности SMB:

  • Сессии и состояние: протокол устанавливает устойчивые сессии между клиентом и сервером, позволяя выполнять множество операций в рамках одного соединения.

  • Поддержка транзакций: SMB позволяет выполнять пакетные операции с возможностью отката, что повышает надёжность передачи данных.

  • Работа с файлами на уровне блоков: протокол поддерживает управление файлами вплоть до отдельных блоков данных, что делает операции более гибкими и производительными.

Расшифровка ключевых компонентов SMB-сессии:

  • Аутентификация: перед тем как предоставить доступ, сервер требует у клиента пройти процедуру проверки подлинности.

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

  • Доступ к ресурсам: после успешной аутентификации клиент может запрашивать доступ к файлам, папкам или принтерам.

Важно отметить, что SMB изначально был разработан для работы в доверенных сетях. Именно поэтому первые версии протокола имели уязвимости в плане безопасности, что позже стало одной из причин создания более защищённых версий, таких как SMB 2.0 и SMB 3.0.

2. История развития протокола SMB

Протокол SMB прошёл долгий путь развития с момента своего появления, постоянно адаптируясь к новым требованиям безопасности, производительности и функциональности. Рассмотрим основные этапы его эволюции:

2

SMB 1.0 (оригинальный протокол)

  • Год появления: конец 1980-х — начало 1990-х.

  • Разработка: изначально разработан компанией IBM как часть операционной системы LAN Manager.

  • Особенности:

    • Работал поверх протокола NetBIOS (Network Basic Input/Output System).

    • Поддерживал базовые операции обмена файлами и принтерами в локальных сетях.

    • Не требовал высокой пропускной способности или сложной сетевой инфраструктуры.

  • Недостатки:

    • Очень низкий уровень безопасности.

    • Отсутствие шифрования данных.

    • Сложные и "тяжёлые" транзакции, требовавшие большого числа команд для выполнения простых операций.

    • Уязвимости к атакам типа "man-in-the-middle".

SMB 2.0 (революционное обновление)

  • Год появления: 2006 год, вместе с Windows Vista и Windows Server 2008.

  • Цели обновления:

    • Уменьшение количества команд для типичных операций (сокращение "болтливости" протокола).

    • Повышение производительности передачи файлов.

    • Улучшение устойчивости соединения (например, возможность автоматического восстановления сессии при кратковременном обрыве связи).

  • Ключевые изменения:

    • Существенное сокращение числа команд (с 100+ до менее чем 20 основных).

    • Поддержка пакетной обработки запросов (batching), что снижало задержки.

    • Улучшенная обработка больших файлов и транзакций.

    • Возможность более эффективного использования сетевых ресурсов.

  • Безопасность: улучшена, но шифрование всё ещё отсутствовало на уровне самого протокола.

SMB 2.1

  • Год появления: 2008 год, вместе с Windows 7 и Windows Server 2008 R2.

  • Улучшения:

    • Повышение производительности при работе с большими файлами.

    • Поддержка "оппортунистических блокировок" (Oplocks) нового типа для оптимизации кэширования файлов.

SMB 3.0 (и последующие версии)

  • Год появления: 2012 год, с выпуском Windows 8 и Windows Server 2012.

  • Реакция на новые вызовы:

    • SMB 3.0 стал ответом на растущую потребность в безопасности в условиях использования облачных решений и виртуализированных сред.
  • Основные новшества:

    • Шифрование на уровне протокола: возможность шифровать весь сетевой трафик между клиентом и сервером без использования VPN.

    • Поддержка многоканальности (SMB Multichannel): возможность использовать несколько сетевых адаптеров одновременно для увеличения пропускной способности и отказоустойчивости.

    • SMB Direct: интеграция с RDMA (Remote Direct Memory Access) для ещё большей скорости передачи данных и минимизации нагрузки на процессор.

    • Поддержка кластерных хранилищ (Clustered Shared Volumes) для высокодоступных файловых систем в дата-центрах.

  • Уровень безопасности: значительно вырос, сделав SMB 3.0 пригодным для использования даже в потенциально небезопасных сетевых средах.

Последующие улучшения (SMB 3.02, 3.1.1 и новее)

  • SMB 3.02 (Windows 8.1, Server 2012 R2) — улучшения в производительности и поддержке виртуальных машин.

  • SMB 3.1.1 (Windows 10, Server 2016):

    • Добавление алгоритмов шифрования AES-128-GCM.

    • Защита процесса установления соединения с использованием предварительной аутентификации (Pre-authentication Integrity).

    • Повышение совместимости и отказоустойчивости.

3. Принцип работы и основные возможности протокола SMB

3

Принцип работы SMB

  1. Установление соединения

    • Клиент инициирует подключение к серверу по сетевому протоколу TCP/IP (чаще всего на порт 445).

    • При необходимости сервер может потребовать аутентификацию (например, по логину и паролю, через Kerberos или NTLM).

  2. Аутентификация и авторизация

    • После подключения клиент проходит проверку подлинности.

    • Сервер проверяет учетные данные и определяет уровень доступа (например, только чтение или полный контроль).

    • Для повышения безопасности в новых версиях SMB может использоваться предварительная проверка целостности (Pre-authentication Integrity).

  3. Установление сеанса

    • После успешной аутентификации клиент создаёт сессию, в рамках которой может выполнять множество операций без повторной аутентификации.
  4. Обращение к ресурсам

    • Клиент отправляет команды для доступа к файлам, папкам, принтерам и другим ресурсам.

    • Команды могут включать:

      • Открытие или создание файла.

      • Чтение или запись данных.

      • Печать документов на сетевом принтере.

      • Закрытие открытых объектов после окончания работы.

  5. Передача данных

    • В процессе работы клиент и сервер обмениваются пакетами данных, используя команды SMB для управления транзакциями и целостностью данных.

    • При необходимости данные могут быть защищены шифрованием (в SMB 3.0 и выше).

  6. Закрытие сеанса

    • После завершения работы клиент закрывает открытые файлы и сессию.

    • Сервер освобождает занятые ресурсы.

Основные возможности протокола SMB

1. Совместное использование файлов и папок

  • Классическое и наиболее известное применение SMB.

  • Пользователи могут видеть, открывать, редактировать и сохранять файлы на удалённом сервере так, будто они работают с локальными файлами.

  • Поддерживается управление правами доступа (например, разрешения на чтение, запись, изменение).

2. Работа с сетевыми принтерами

  • SMB позволяет пользователям отправлять документы на печать через сетевые принтеры, размещённые на другом устройстве.

  • Поддерживается централизованное управление принтерными очередями и заданиями.

3. Поддержка оппортунистических блокировок (Oplocks)

  • Позволяет клиенту кэшировать файлы локально для повышения производительности.

  • Сервер информирует клиента о необходимости обновления кэша, если другой пользователь изменил файл.

4. Транзакционные операции

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

5. Поддержка многопоточности и параллельной обработки команд

  • Клиенты могут отправлять несколько команд одновременно без ожидания ответа на каждую из них (асинхронная работа).

  • Это значительно ускоряет работу при большом количестве запросов.

6. Шифрование данных

  • Начиная с SMB 3.0, появилась возможность шифровать передаваемые данные между клиентом и сервером.

  • Это предотвращает перехват или подмену данных злоумышленниками в сети.

7. Поддержка устойчивости соединения

  • Если сетевое соединение временно прерывается (например, из-за неполадок сети), SMB 2.0+ может автоматически восстановить сеанс без потери данных.

8. Мультиканальное подключение (SMB Multichannel)

  • Клиенты и серверы могут использовать несколько сетевых адаптеров одновременно для увеличения пропускной способности и надёжности соединения.

4. Безопасность и современные применения SMB

Со временем протокол SMB столкнулся с серьёзными вызовами в области безопасности. Устаревшие версии оказались уязвимыми для различных видов атак, что потребовало серьёзных улучшений. Сегодняшние версии SMB интегрируют современные механизмы защиты, а его применение вышло далеко за рамки локальных сетей.

Проблемы безопасности старых версий SMB

Особенно уязвимой оказалась версия SMB 1.0:

  • Отсутствие шифрования: все данные передавались в открытом виде, их можно было перехватить и изменить.

  • Слабая аутентификация: использование устаревших схем аутентификации (например, NTLMv1) делало возможным атаки по типу "перехват пароля" (pass-the-hash).

  • Уязвимости протокола: например, в 2017 году именно через SMB 1.0 произошла массовая атака вируса-шифровальщика WannaCry, использующего уязвимость EternalBlue.

  • Отсутствие целостности данных: пакеты данных могли быть подменены злоумышленником без обнаружения.

Реакция: Microsoft после этих событий начала рекомендовать полностью отключить SMB 1.0 на всех системах и переходить на более новые версии протокола.

Улучшения безопасности в новых версиях SMB

Начиная с SMB 2.0 и особенно с SMB 3.0 и выше, были добавлены важнейшие механизмы защиты:

  • Шифрование данных на уровне протокола:

    • Возможность шифровать весь трафик между клиентом и сервером.

    • В SMB 3.1.1 используется современный алгоритм шифрования AES-128-GCM, который обеспечивает как шифрование, так и контроль целостности передаваемых данных.

  • Подпись сообщений (SMB Signing):

    • Каждое сообщение SMB может быть подписано, чтобы гарантировать, что оно действительно пришло от доверенного клиента или сервера и не было изменено в пути.
  • Pre-authentication Integrity:

    • Введено в SMB 3.1.1.

    • Защищает процесс установления сеанса от атак "человек посередине" (Man-in-the-Middle), проверяя целостность всех сообщений, начиная с первой стадии аутентификации.

  • Улучшенная аутентификация:

    • Интеграция с современными схемами, такими как Kerberos.

    • Поддержка многофакторной аутентификации при доступе к ресурсам через доменные службы.

  • Защита от переборов паролей:

    • Ограничение скорости аутентификационных попыток.
  • Безопасная передача файлов для виртуальных машин (SMB over RDMA):

    • Ускорение передачи данных без ущерба для безопасности благодаря аппаратному шифрованию.

Современные применения SMB

Сегодня SMB используется в самых разных сферах — от домашних сетей до крупных корпоративных инфраструктур:

1. Файловые серверы в организациях

  • Основное назначение: совместный доступ к документам, медиафайлам, проектным данным.

  • Файловые серверы Windows Server активно используют SMB 3.0+ для безопасного обмена.

2. Кластерные и виртуализированные среды

  • SMB 3.0 поддерживает высокодоступные кластеры хранения (например, Clustered Shared Volumes в Windows Server).

  • Используется для подключения виртуальных машин к их виртуальным дискам без использования iSCSI или Fibre Channel.

3. Облачные решения и гибридные сценарии

  • SMB используется для подключения к файлам, хранящимся в облаках (например, Azure Files поддерживает SMB-протокол для работы с облачными файлами как с локальными).

4. Резервное копирование и восстановление данных

  • Многие современные системы резервного копирования используют SMB для доступа к данным на серверах или NAS-устройствах.

5. Поддержка домашних и малых сетей

  • Протокол активно применяется в домашних условиях для организации обмена файлами между компьютерами, медиасерверами, смарт-телевизорами и сетевыми хранилищами (NAS).

6. Интеграция с Linux и другими системами

  • Благодаря проекту Samba, SMB работает не только в Windows-средах, но и на Linux, macOS и других Unix-подобных системах, обеспечивая совместимость между разными платформами.

5. Взаимодействие с SMB из-под Linux и Windows

Протокол SMB традиционно ассоциируется с операционными системами Windows, но благодаря его широкому распространению и открытым спецификациям, он также активно используется в Linux, macOS и других системах. Взаимодействие с SMB на обеих платформах имеет свои особенности, инструменты и нюансы.

SMB в Windows

В операционных системах Windows SMB интегрирован на уровне ядра сети. Пользователь даже может не знать, что работает через этот протокол, поскольку все операции выполняются прозрачно.

Основные моменты:

4

  • Автоматическое подключение:

    • При подключении к сетевому ресурсу через проводник Windows (Пуск → Выполнить → \\имя_сервера\папка) используется SMB.

    • Подключение возможно по имени NetBIOS, по IP-адресу или через DNS.

  • Работа с сетевыми дисками:

    • Пользователь может "смонтировать" сетевой ресурс как отдельный диск (например, диск Z:).

    • Пример подключения:

      • В проводнике: Подключить сетевой диск → указать путь (\\server\share).
  • Командная строка и PowerShell:

    • Можно использовать команды типа:

      net use Z: \\server\share /user:username password
      
    • Или через PowerShell:

      New-PSDrive -Name "Z" -PSProvider "FileSystem" -Root "\\server\share" -Credential (Get-Credential)
      
  • Управление SMB через параметры Windows:

    • Включение или отключение версий протокола через "Компоненты Windows" (например, отключение SMB 1.0).

SMB в Linux

На Linux доступ к ресурсам SMB обеспечивается через пакет Samba или утилиты вроде cifs-utils.

Основные инструменты:

  • Samba:

    • Samba — это реализация SMB для Linux/Unix-систем, которая позволяет как подключаться к ресурсам Windows, так и предоставлять свои ресурсы другим устройствам через SMB.

    • Конфигурационный файл Samba: /etc/samba/smb.conf.

    • Запуск сервера Samba позволяет расшаривать папки Linux-системы для Windows-клиентов.

  • Монтирование SMB-ресурсов через cifs-utils:

    • Для подключения к сетевому ресурсу используется файловая система типа CIFS (Common Internet File System).

    • Установка пакета (если не установлен):

      sudo apt install cifs-utils
      
    • Монтирование ресурса вручную:

      sudo mount -t cifs //server/share /mnt/point -o username=your_username,password=your_password
      

      (Можно также использовать параметры vers=2.0, vers=3.0 для выбора версии SMB.)

  • Автоматическое подключение через fstab:

    • Чтобы автоматически монтировать ресурсы при загрузке системы, можно добавить строку в /etc/fstab:

      //server/share /mnt/point cifs username=your_username,password=your_password,vers=3.0 0 0
      
  • Интерактивные инструменты:

    5

    • smbclient — консольный клиент для работы с SMB-ресурсами в стиле FTP:

      smbclient //server/share -U username
      

Особенности кроссплатформенного взаимодействия

  • Проблемы с правами доступа:

    • Windows и Linux используют разные модели прав. Иногда требуется дополнительная настройка маппинга пользователей (username mapping) в Samba или корректная настройка прав доступа на стороне сервера.
  • Версии протокола:

    • Иногда Windows-серверы настроены так, чтобы поддерживать только SMB 2.x или 3.x. В таком случае в Linux нужно явно указывать используемую версию (vers=3.0 в параметрах монтирования).
  • Шифрование и безопасность:

    • В новых версиях Samba появилась поддержка шифрования SMB 3.0+, что позволяет безопасно монтировать шифрованные ресурсы даже в публичных сетях.
  • Аутентификация через Kerberos:

    • В корпоративных сетях, где используется Active Directory, можно настроить Linux-системы на использование Kerberos для бесшовной аутентификации к ресурсам Windows.

Заключение

Протокол SMB играет ключевую роль в организации совместного доступа к файлам, принтерам и другим ресурсам в локальных и корпоративных сетях. С момента своего появления в конце 1980-х годов он прошёл значительный путь эволюции: от уязвимой первой версии до современных надёжных реализаций, обеспечивающих шифрование, целостность данных и устойчивость соединений.

Сегодня SMB — это не просто механизм обмена файлами. Это важнейшая инфраструктурная технология для Windows-сетей, серверных ферм, виртуализированных сред и облачных сервисов. Благодаря развитию таких проектов, как Samba, протокол SMB стал по-настоящему кроссплатформенным, что позволяет ему успешно работать как в Windows, так и в Linux/Unix-системах.

Правильная настройка безопасности, своевременное обновление версий протокола и понимание принципов работы SMB позволяют выстраивать стабильные, безопасные и высокопроизводительные сетевые решения, соответствующие требованиям современного мира.