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

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

2026.09.29                  


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

8. Create Contexts в SMB2 CREATE

SMB2 CREATE может нести дополнительные контексты. Это не отдельные команды, но важные расширения команды CREATE.

Контекст Назначение
SMB2_CREATE_EA_BUFFER Расширенные атрибуты при создании
SMB2_CREATE_SD_BUFFER Установка дескриптора безопасности при создании
SMB2_CREATE_DURABLE_HANDLE_REQUEST Запрос устойчивого дескриптора
SMB2_CREATE_DURABLE_HANDLE_RECONNECT Переподключение устойчивого дескриптора
SMB2_CREATE_ALLOCATION_SIZE Задание начального размера размещения
SMB2_CREATE_QUERY_MAXIMAL_ACCESS_REQUEST Запрос максимально доступных прав
SMB2_CREATE_QUERY_ON_DISK_ID Запрос идентификаторов тома/файла
SMB2_CREATE_REQUEST_LEASE Запрос lease
SMB2_CREATE_LEASE Ответ/состояние lease
SMB2_CREATE_DURABLE_HANDLE_REQUEST_V2 Устойчивый дескриптор v2
SMB2_CREATE_DURABLE_HANDLE_RECONNECT_V2 Переподключение устойчивого дескриптора v2
App Instance ID Идентификатор экземпляра приложения, для управления доступом/кэшем



9. Популярные FSCTL/IOCTL-коды в SMB2 IOCTL

В SMB2 IOCTL поле CtlCode часто содержит FSCTL-код. Ниже — часто встречающиеся коды.

Код Имя Описание
0x00060194 FSCTL_DFS_GET_REFERRALS Получение DFS-ссылок
0x0011400C FSCTL_PIPE_PEEK Просмотр данных в именованном канале
0x00110018 FSCTL_PIPE_WAIT Ожидание доступности экземпляра канала
0x0011C017 FSCTL_PIPE_TRANSCEIVE Запись и чтение из именованного канала
0x001440F2 FSCTL_SRV_COPYCHUNK Серверное копирование: чтение чанка
0x001480F2 FSCTL_SRV_COPYCHUNK_WRITE Серверное копирование: запись чанка
0x00144064 FSCTL_SRV_ENUMERATE_SNAPSHOTS Перечисление снапшотов / previous versions
0x00140078 FSCTL_SRV_REQUEST_RESUME_KEY Получение resume key для серверного копирования
0x001441BB FSCTL_SRV_READ_HASH Чтение хэша/данных для операций копирования
0x001401D4 FSCTL_LMR_REQUEST_RESILIENCY Запрос устойчивости к временным сбоям
0x001401FC FSCTL_QUERY_NETWORK_INTERFACE_INFO Запрос сетевых интерфейсов для Multichannel
0x00140204 FSCTL_VALIDATE_NEGOTIATE_INFO Проверка согласования против атак понижения
0x000900A4 FSCTL_SET_REPARSE_POINT Установка reparse point
0x000900A8 FSCTL_GET_REPARSE_POINT Чтение reparse point
0x000900AC FSCTL_DELETE_REPARSE_POINT Удаление reparse point
0x000900C0 FSCTL_CREATE_OR_GET_OBJECT_ID Создание или получение object ID
0x000900C4 FSCTL_SET_SPARSE Установка признака разреженного файла
0x000980C8 FSCTL_SET_ZERO_DATA Обнуление диапазона данных
0x000940CF FSCTL_QUERY_ALLOCATED_RANGES Запрос выделенных диапазонов файла
0x00098208 FSCTL_FILE_LEVEL_TRIM Trim/оптимизация диапазонов файла
0x0009003C FSCTL_GET_COMPRESSION Получение состояния сжатия
0x0009C040 FSCTL_SET_COMPRESSION Установка состояния сжатия
0x0009027C FSCTL_GET_INTEGRITY_INFORMATION Получение информации о целостности
0x0009C280 FSCTL_SET_INTEGRITY_INFORMATION Установка информации о целостности
0x00094264 FSCTL_OFFLOAD_READ Offloaded read / ODX
0x00098268 FSCTL_OFFLOAD_WRITE Offloaded write / ODX
0x00098344 FSCTL_DUPLICATE_EXTENTS_TO_FILE Клонирование экстентов, где поддерживается

10. Информация, запрашиваемая через QUERY_INFO / SET_INFO

10.1. Классы файловой информации

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

Класс Назначение
FileDirectoryInformation Базовые записи каталога
FileFullDirectoryInformation Записи каталога с дополнительными полями
FileBothDirectoryInformation Записи каталога с коротким именем
FileBasicInformation Атрибуты и временные метки
FileStandardInformation Размер, количество ссылок, состояние удаления
FileInternalInformation Внутренний индекс файла
FileEaInformation Информация о расширенных атрибутах
FileAccessInformation Маска доступа
FileNameInformation Имя файла
FileRenameInformation Переименование
FileLinkInformation Создание жёсткой ссылки
FileNamesInformation Только имена файлов
FileDispositionInformation Установка признака удаления
FilePositionInformation Текущая позиция в файле
FileFullEaInformation Расширенные атрибуты
FileModeInformation Режим доступа/обработки
FileAlignmentInformation Требования выравнивания
FileAllInformation Сводная информация
FileAllocationInformation Размер размещения
FileEndOfFileInformation Конец файла, фактический размер
FileAlternateNameInformation Короткое/альтернативное имя
FileStreamInformation Потоки данных
FilePipeInformation Информация об именованном канале
FileNetworkOpenInformation Информация для сетевого кэширования
FileAttributeTagInformation Атрибуты и тег reparse
FileIdBothDirectoryInformation Каталог с FileId
FileIdFullDirectoryInformation Каталог с FileId и расширенными полями
FileObjectIdInformation Object ID
FileReparsePointInformation Reparse point
FileValidDataLengthInformation Действительная длина данных



10.2. Классы информации о файловой системе

Класс Назначение
FileFsVolumeInformation Имя тома, серийный номер, длина имени
FileFsLabelInformation Метка тома
FileFsSizeInformation Общий и свободный размер
FileFsDeviceInformation Тип устройства и характеристики
FileFsAttributeInformation Возможности файловой системы
FileFsControlInformation Параметры управления ФС
FileFsFullSizeInformation Полные данные о размере
FileFsObjectIdInformation Object ID тома
FileFsSectorSizeInformation Размер сектора
FileFsDataCopyInformation Информация о копиях данных
FileFsMetadataSizeInformation Размер метаданных, где поддерживается

10.3. Информация безопасности

Через SMB2 QUERY_INFO / SMB2 SET_INFO можно работать с:

  • владельцем объекта;
  • группой;
  • DACL — discretionary access control list;
  • SACL — system access control list;
  • атрибутами безопасности.

11. Типовые сценарии обмена

11.1. Открыть и прочитать файл

NEGOTIATE
SESSION_SETUP
TREE_CONNECT
CREATE
READ
READ
...
CLOSE
TREE_DISCONNECT
LOGOFF

11.2. Записать файл

NEGOTIATE
SESSION_SETUP
TREE_CONNECT
CREATE
WRITE
WRITE
...
CLOSE
TREE_DISCONNECT
LOGOFF

11.3. Перечислить каталог

TREE_CONNECT
CREATE на каталог
QUERY_DIRECTORY
QUERY_DIRECTORY
...
CLOSE

11.4. Переименовать файл

CREATE
SET_INFO: FileRenameInformation
CLOSE

11.5. Удалить файл

CREATE с FILE_DELETE_ON_CLOSE или SET_INFO: FileDispositionInformation
CLOSE

11.6. Серверное копирование

CREATE source
CREATE destination
IOCTL FSCTL_SRV_REQUEST_RESUME_KEY
IOCTL FSCTL_SRV_COPYCHUNK
IOCTL FSCTL_SRV_COPYCHUNK_WRITE
...
CLOSE source
CLOSE destination

11.7. Отслеживать изменения каталога

CREATE на каталог
CHANGE_NOTIFY
ожидание события
получение результата
повторный CHANGE_NOTIFY
CLOSE

12. Частые статусы и коды ошибок

Ниже — типовые NTSTATUS, которые можно увидеть в SMB2-ответах.

Код Статус Описание
0x00000000 STATUS_SUCCESS Успех
0x00000103 STATUS_PENDING Операция продолжается
0xC000000D STATUS_INVALID_PARAMETER Неверный параметр
0xC000000F STATUS_NO_SUCH_FILE Файл не найден
0xC0000016 STATUS_MORE_PROCESSING_REQUIRED Требуется продолжение обмена, часто при аутентификации
0xC0000022 STATUS_ACCESS_DENIED Доступ запрещён
0xC0000034 STATUS_OBJECT_NAME_NOT_FOUND Объект не найден
0xC0000035 STATUS_OBJECT_NAME_COLLISION Объект уже существует
0xC000006D STATUS_LOGON_FAILURE Ошибка входа
0xC00000BB STATUS_NOT_SUPPORTED Операция не поддерживается
0xC00000CC STATUS_BAD_NETWORK_NAME Неверное имя общего ресурса
0xC0000203 STATUS_USER_SESSION_DELETED Сессия удалена
0xC000035C STATUS_NETWORK_SESSION_EXPIRED Сессия истекла



13. Сравнение SMB1 и SMB2 по операциям

Операция SMB1 SMB2/SMB3
Согласование диалекта SMB_COM_NEGOTIATE SMB2 NEGOTIATE
Установка сессии SMB_COM_SESSION_SETUP_ANDX SMB2 SESSION_SETUP
Выход из сессии SMB_COM_LOGOFF_ANDX SMB2 LOGOFF
Подключение к шаре SMB_COM_TREE_CONNECT / TREE_CONNECT_ANDX SMB2 TREE_CONNECT
Отключение от шары SMB_COM_TREE_DISCONNECT SMB2 TREE_DISCONNECT
Открытие файла SMB_COM_OPEN, OPEN_ANDX, NT_CREATE_ANDX SMB2 CREATE
Чтение READ, READ_ANDX, READ_RAW SMB2 READ
Запись WRITE, WRITE_ANDX, WRITE_RAW SMB2 WRITE
Закрытие CLOSE SMB2 CLOSE
Поиск файлов SEARCH, FIND, TRANSACTION2 FIND_FIRST2/FIND_NEXT2 SMB2 QUERY_DIRECTORY
Информация о файле QUERY_INFORMATION, TRANSACTION2 SMB2 QUERY_INFO
Установка информации SET_INFORMATION, TRANSACTION2 SMB2 SET_INFO
IOCTL/FSCTL IOCTL, TRANSACTION SMB2 IOCTL
Уведомления NT_TRANSACT NOTIFY_CHANGE и др. SMB2 CHANGE_NOTIFY
Отмена NT_CANCEL SMB2 CANCEL
Эхо ECHO SMB2 ECHO

14. SMB 3.1.1: Negotiate Contexts

В SMB 3.1.1 при NEGOTIATE используются дополнительные контексты.

Тип Контекст Назначение
0x0001 Preauth Integrity Capabilities Алгоритмы хэширования для защиты до аутентификации
0x0002 Encryption Capabilities Алгоритмы шифрования
0x0003 Compression Capabilities Алгоритмы сжатия
0x0005 Netname Negotiate Context Имя сервера/сети
0x0006 Transport Capabilities Возможности транспорта
0x0007 RDMA Transform Capabilities Трансформации для SMB Direct
0x0008 Signing Capabilities Алгоритмы подписи

Примеры возможностей:

  • preauth integrity: SHA-512;
  • encryption: AES-128-CCM, AES-128-GCM, в новых системах могут быть и более сильные варианты;
  • compression: LZNT1, LZ77, LZ77+Huffman, Pattern;
  • signing: HMAC-SHA256, AES-CMAC, AES-GMAC, в зависимости от реализации.

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


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

Комментарии

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