Полный справочник по протоколу SMB: команды SMB1, SMB2 и SMB3, структура пакетов, FSCTL, типовые сценарии обмена, диагностика трафика и настройки безопасности сетей.
2026.09.29
#SMB
#сетевые протоколы
#Windows
#Samba
#сетевая безопасность
#администрирование
#файловые серверы
#Wireshark
Подробный гайд: Полный справочник по протоколу 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 г. Омск (специалист по ЗИ)