Подробный гайд: Полный справочник по протоколу SMB: команды SMB / SMB2 / SMB3 - Часть 1

Полный справочник по протоколу SMB: команды SMB1, SMB2 и SMB3, структура пакетов, FSCTL, типовые сценарии обмена, диагностика трафика и настройки безопасности сетей.

2026.09.29                  


Подробный гайд: Полный справочник по протоколу SMB: команды SMB / SMB2 / SMB3 - Часть 1Подробный гайд: Полный справочник по протоколу SMB: команды SMB / SMB2 / SMB3 - Часть 1 Справочник по командам протокола SMB: SMBv1/CIFS и современным SMB2/SMB3. Дополнительно даны подкоманды, IOCTL/FSCTL, типовые потоки обмена, диагностика и команды ОС/утилит, чтобы не путать «команды протокола» и «команды управления SMB».


Важно:

SMB1 крайне устарел и небезопасен. В современных сетях следует использовать SMB 2.1/3.x, отключать SMB1, включать подпись и, где нужно, шифрование.


1. Что такое SMB и какие бывают “команды”



SMB — сетевой протокол для доступа к файлам, принтерам, именованным каналам, общим ресурсам и служебным операциям.

Под “командами SMB” обычно понимают одно из двух:

1. Команды протокола — коды запросов в пакете SMB:

  • в SMB1 — однобайтовое поле Command;
  • в SMB2/SMB3 — 16-битное поле Command.

2. Команды ОС и утилит — net use, Get-SmbShare, smbclient, mount.cifs и т.п.

Они лишь используют протокол, но сами не являются командами внутри SMB-пакета.

В этом гайде основной упор сделан на команды протокола.


2. Транспорты и порты

Транспорт / порт Назначение
TCP 139 SMB поверх NetBIOS Session Service, чаще старый стиль
TCP 445 SMB напрямую поверх TCP, основной вариант
TCP 5445 SMB Direct / SMB over RDMA
UDP 137/138 NetBIOS Name Service / Datagram, исторически
QUIC / 443 SMB over QUIC в новых системах, для безопасного доступа через Интернет

Современный SMB обычно работает поверх TCP 445. SMB Direct использует RDMA, но набор команд SMB2/SMB3 остаётся тем же.


3. Версии и диалекты

3.1. Основные диалекты

Диалект Строка/значение Комментарий
Ранний SMB1 PC NETWORK PROGRAM 1.0, MICROSOFT NETWORKS 1.03, DOS LM1.2X002, LANMAN2.1 Исторические диалекты
SMB1 / CIFS NT LM 0.12 Основной SMB1-диалект. Устарел
SMB 2.0.2 SMB 2.002 / 0x0202 Vista / Server 2008
SMB 2.1 SMB 2.1 / 0x0210 Windows 7 / Server 2008 R2
SMB 3.0 SMB 3.0 / 0x0300 Windows 8 / Server 2012
SMB 3.0.2 SMB 3.02 / 0x0302 Windows 8.1 / Server 2012 R2
SMB 3.1.1 SMB 3.1.1 / 0x0311 Windows 10 / Server 2016 и новее
Специальный 0x02FF wildcard в SMB2 Negotiate, “любой SMB2”

3.2. Возможности по версиям

Версия Ключевые возможности
SMB1 Базовый доступ к файлам, транзакции, устаревшая модель аутентификации
SMB 2.0.2 Новая структура пакетов, меньше команд, кредиты, улучшенная производительность
SMB 2.1 Leasing, улучшенный oplock, больший масштаб
SMB 3.0 Шифрование, Multichannel, SMB Direct, directory leasing, persistent handles
SMB 3.0.2 Улучшения эффективности и управления
SMB 3.1.1 Negotiate contexts, preauth integrity, улучшенная криптография, более безопасный обмен

4. Базовая структура пакетов

4.1. SMB1

SMB1-пакет начинается с сигнатуры 0xFF 'S' 'M' 'B'.

Основные поля заголовка:

Поле Назначение
Command Код команды
Status NTSTATUS или DOS-ошибка
Flags, Flags2 Флаги пакета
TID Tree ID — подключение к общему ресурсу
PID Идентификатор процесса
UID User ID — сессия пользователя
MID Multiplex ID — сопоставление запрос/ответ
WordCount Количество 16-битных слов параметров
ByteCount Длина блока данных

В SMB1 часто используется механизм ANDX: одна команда может нести в себе следующую.

Например:

SESSION_SETUP_ANDX -> TREE_CONNECT_ANDX -> NT_CREATE_ANDX

4.2. SMB2/SMB3

SMB2-пакет начинается с сигнатуры 0xFE 'S' 'M' 'B'.

Основные поля заголовка:

Поле Назначение
StructureSize Обычно 64
CreditCharge Стоимость операции в кредитах
Status Статус выполнения
Command Код команды
CreditRequest/CreditResponse Запрос/выдача кредитов
Flags Request/response, async, related, replay и др.
NextCommand Смещение следующего пакета в compound-запросе
MessageId Идентификатор сообщения
TreeId Идентификатор подключения к шару
SessionId Идентификатор сессии
Signature Подпись сообщения



Важные особенности SMB2:

  • меньше команд, чем в SMB1;
  • многие старые операции заменены универсальными IOCTL, QUERY_INFO, SET_INFO;
  • поддерживаются составные пакеты — compound requests;
  • используются кредиты для управления потоком;
  • есть шифрование через SMB2_TRANSFORM_HEADER, который не является отдельной командой, а оборачивает зашифрованный SMB2-сообщение.

5. Перечень команд SMB1

Коды указаны в шестнадцатеричном виде. Это однобайтовые значения поля Command в SMB1.

5.1. Основные команды SMB1

Код Команда Описание
0x00 SMB_COM_CREATE_DIRECTORY Создание каталога
0x01 SMB_COM_DELETE_DIRECTORY Удаление каталога
0x02 SMB_COM_OPEN Открытие файла
0x03 SMB_COM_CREATE Создание файла
0x04 SMB_COM_CLOSE Закрытие файла
0x05 SMB_COM_FLUSH Сброс данных файла на диск
0x06 SMB_COM_DELETE Удаление файла
0x07 SMB_COM_RENAME Переименование/перемещение
0x08 SMB_COM_QUERY_INFORMATION Запрос информации о файле по пути
0x09 SMB_COM_SET_INFORMATION Установка информации о файле по пути
0x0A SMB_COM_READ Чтение данных
0x0B SMB_COM_WRITE Запись данных
0x0C SMB_COM_LOCK_BYTE_RANGE Блокировка диапазона байтов
0x0D SMB_COM_UNLOCK_BYTE_RANGE Разблокировка диапазона байтов
0x0E SMB_COM_CREATE_TEMPORARY Создание временного файла
0x0F SMB_COM_CREATE_NEW Создание нового файла
0x10 SMB_COM_CHECK_DIRECTORY Проверка существования каталога
0x11 SMB_COM_PROCESS_EXIT Служебная/устаревшая команда выхода процесса
0x12 SMB_COM_SEEK Позиционирование внутри файла
0x13 SMB_COM_LOCK_AND_READ Блокировка и чтение
0x14 SMB_COM_WRITE_AND_UNLOCK Запись и разблокировка
0x1A SMB_COM_READ_RAW “Сырое” чтение для производительности
0x1B SMB_COM_READ_MPX Мультиплексное чтение
0x1C SMB_COM_READ_MPX_SECONDARY Вторичная часть мультиплексного чтения
0x1D SMB_COM_WRITE_RAW “Сырая” запись
0x1E SMB_COM_WRITE_MPX Мультиплексная запись
0x1F SMB_COM_WRITE_MPX_SECONDARY Вторичная часть мультиплексной записи
0x20 SMB_COM_WRITE_COMPLETE Завершение отложенной записи
0x21 SMB_COM_QUERY_SERVER Запрос информации о сервере, редко используется
0x22 SMB_COM_SET_INFORMATION2 Установка информации по открытому файлу
0x23 SMB_COM_QUERY_INFORMATION2 Запрос информации по открытому файлу
0x24 SMB_COM_LOCKING_ANDX Расширенная блокировка/разблокировка диапазонов
0x25 SMB_COM_TRANSACTION Транзакция: именованные каналы, mailslot, служебные операции
0x26 SMB_COM_TRANSACTION_SECONDARY Продолжение транзакции
0x27 SMB_COM_IOCTL IOCTL-запрос
0x28 SMB_COM_IOCTL_SECONDARY Продолжение IOCTL
0x29 SMB_COM_COPY Копирование
0x2A SMB_COM_MOVE Перемещение
0x2B SMB_COM_ECHO Эхо-запрос, проверка доступности
0x2C SMB_COM_WRITE_AND_CLOSE Запись и закрытие
0x2D SMB_COM_OPEN_ANDX Расширенное открытие файла
0x2E SMB_COM_READ_ANDX Расширенное чтение
0x2F SMB_COM_WRITE_ANDX Расширенная запись
0x30 SMB_COM_NEW_FILE_SIZE Установка размера файла
0x31 SMB_COM_CLOSE_AND_TREE_DISC Закрытие и отключение дерева/шары
0x32 SMB_COM_TRANSACTION2 Расширенные транзакции для файловых операций
0x33 SMB_COM_TRANSACTION2_SECONDARY Продолжение TRANSACTION2
0x34 SMB_COM_FIND_CLOSE2 Закрытие поиска, связанного с TRANSACTION2
0x35 SMB_COM_FIND_NOTIFY_CLOSE Закрытие уведомления о поиске
0x70 SMB_COM_TREE_CONNECT Подключение к общему ресурсу
0x71 SMB_COM_TREE_DISCONNECT Отключение от общего ресурса
0x72 SMB_COM_NEGOTIATE Согласование диалекта протокола
0x73 SMB_COM_SESSION_SETUP_ANDX Установка сессии, аутентификация
0x74 SMB_COM_LOGOFF_ANDX Завершение сессии
0x75 SMB_COM_TREE_CONNECT_ANDX Расширенное подключение к общему ресурсу
0x80 SMB_COM_QUERY_INFORMATION_DISK Запрос информации о диске/томе
0xA0 SMB_COM_SEARCH Поиск файлов
0xA1 SMB_COM_FIND Поиск файлов, более развитый вариант
0xA2 SMB_COM_FIND_UNIQUE Поиск одного уникального результата
0xA3 SMB_COM_FIND_CLOSE Закрытие операции поиска
0xC0 SMB_COM_NT_TRANSACT NT-транзакции: безопасность, change notify и др.
0xC1 SMB_COM_NT_TRANSACT_SECONDARY Продолжение NT-транзакции
0xC2 SMB_COM_NT_CREATE_ANDX Создание/открытие с NT-семантикой, основной файловый open в SMB1
0xC4 SMB_COM_NT_CANCEL Отмена запроса
0xC5 SMB_COM_NT_RENAME Переименование с расширенными флагами
0xD0 SMB_COM_OPEN_PRINT_FILE Открытие файла печати
0xD1 SMB_COM_WRITE_PRINT_FILE Запись в файл печати
0xD2 SMB_COM_CLOSE_PRINT_FILE Закрытие файла печати
0xD3 SMB_COM_GET_PRINT_QUEUE Получение очереди печати
0xE0 SMB_COM_READ_BULK Массовое чтение
0xE1 SMB_COM_WRITE_BULK Массовая запись
0xE2 SMB_COM_WRITE_BULK_DATA Массовая запись данных
0xFF SMB_COM_NONE Пустая/служебная команда, часто как завершитель цепочки



5.2. Подкоманды SMB1 TRANSACTION2

SMB_COM_TRANSACTION2 использует поле Setup для указания подкоманды.

Код Подкоманда Описание
0x0000 TRANS2_OPEN2 Расширенное открытие файла
0x0001 TRANS2_FIND_FIRST2 Начало поиска файлов
0x0002 TRANS2_FIND_NEXT2 Продолжение поиска файлов
0x0003 TRANS2_QUERY_FS_INFORMATION Запрос информации о файловой системе
0x0004 TRANS2_SET_FS_INFORMATION Установка информации о файловой системе
0x0005 TRANS2_QUERY_PATH_INFORMATION Запрос информации о файле/каталоге по пути
0x0006 TRANS2_SET_PATH_INFORMATION Установка информации о файле/каталоге по пути
0x0007 TRANS2_QUERY_FILE_INFORMATION Запрос информации по открытому файлу
0x0008 TRANS2_SET_FILE_INFORMATION Установка информации по открытому файлу
0x0009 TRANS2_FSCTL FSCTL-подобные операции, ограниченно
0x000A TRANS2_IOCTL2 IOCTL-подобные операции, ограниченно
0x000B TRANS2_FIND_NOTIFY_FIRST Начало уведомления об изменениях каталога
0x000C TRANS2_FIND_NOTIFY_NEXT Продолжение уведомления об изменениях
0x000D TRANS2_CREATE_DIRECTORY Создание каталога через TRANSACTION2
0x000E TRANS2_SESSION_SETUP Редко используемая/историческая операция

5.3. Подкоманды SMB1 NT_TRANSACT

SMB_COM_NT_TRANSACT также использует поле функции/подкоманды. Набор зависит от реализации и уровня поддержки.

Код Подкоманда Описание
0x0001 NT_TRANSACT_CREATE Создание объекта, исторически/ограниченно
0x0002 NT_TRANSACT_IOCTL IOCTL
0x0003 NT_TRANSACT_SET_SECURITY_DESCRIPTOR Установка security descriptor
0x0004 NT_TRANSACT_NOTIFY_CHANGE Подписка на изменения каталога
0x0005 NT_TRANSACT_RENAME Переименование
0x0006 NT_TRANSACT_QUERY_SECURITY_DESCRIPTOR Запрос security descriptor
0x0007 NT_TRANSACT_GET_USER_QUOTA Запрос пользовательской квоты
0x0008 NT_TRANSACT_SET_USER_QUOTA Установка пользовательской квоты



5.4. Особенности SMB1

  • Много устаревших команд.
  • Есть несколько параллельных механизмов: обычные команды, ANDX, TRANSACTION, TRANSACTION2, NT_TRANSACT.
  • Плохая масштабируемость по сравнению с SMB2.
  • Исторически слабее защита.
  • Многие современные серверы и клиенты отключают SMB1 по умолчанию.

6. Перечень команд SMB2 / SMB3

В SMB2 команда задаётся 16-битным полем Command.

Код Команда Описание
0x0000 SMB2 NEGOTIATE Согласование диалекта, возможностей, GUID, лимитов, безопасности
0x0001 SMB2 SESSION_SETUP Аутентификация и создание сессии
0x0002 SMB2 LOGOFF Завершение сессии
0x0003 SMB2 TREE_CONNECT Подключение к общему ресурсу
0x0004 SMB2 TREE_DISCONNECT Отключение от общего ресурса
0x0005 SMB2 CREATE Открытие/создание файла, каталога, именованного канала
0x0006 SMB2 CLOSE Закрытие дескриптора
0x0007 SMB2 FLUSH Принудительный сброс данных
0x0008 SMB2 READ Чтение данных
0x0009 SMB2 WRITE Запись данных
0x000A SMB2 LOCK Блокировка/разблокировка диапазонов
0x000B SMB2 IOCTL Управляющие операции, включая FSCTL и операции с именованными каналами
0x000C SMB2 CANCEL Отмена предыдущего запроса
0x000D SMB2 ECHO Проверка доступности сессии
0x000E SMB2 QUERY_DIRECTORY Перечисление содержимого каталога
0x000F SMB2 CHANGE_NOTIFY Подписка на изменения в каталоге
0x0010 SMB2 QUERY_INFO Запрос информации о файле, ФС, безопасности, квотах
0x0011 SMB2 SET_INFO Установка информации о файле, ФС, безопасности, квотах
0x0012 SMB2 OPLOCK_BREAK Уведомление/подтверждение оппортунистической блокировки или lease

Отдельно стоит упомянуть:

Элемент Назначение
SMB2_TRANSFORM_HEADER Оборачивание зашифрованного SMB2-сообщения
SMB2_COMPRESSION_TRANSFORM_HEADER Сжатие данных в SMB 3.1.1
Compound-запросы Несколько SMB2-команд в одном сообщении
Async-сообщения Асинхронные операции, например длительные locks/notify

Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта