Безопасность сервера SMB. Microsoft Windows 95 и Windows for Workgroups. Диалекты протокола SMB, страница 4

Поле                    Длина,

                             байт               Описание

Protocol                    4                   OxFF 'SMB' — константа, идентифицирующая протокол.

Command                 1                   Код операции, запрашиваемой сообщением, или код операции, на которую отвечает данное сообщение. В Действительности по сети передается числовой код команды, однако в описании протокола используются текстовые идентификаторы. Например, идентификатор SMB_COM_READ означает число 10.

DosError/                 4                   Код результата.

NTStatus

Flags + Flags23                   Биты, которые в зависимости от диалекта указывают на возможности клиента. Старший бит первого байта означает, что данное сообщение — ответ сервера на команду клиента.

Connectionless12Структура данных, используемая при передаче 8MB по протоколу без соединения, например, по IPX

TID                           2                   Идентификатор «дерева», к которому относится операция.

PID                           2                   Идентификатор издавшего запрос процесса на клиентской машине.

UID                           2                   Непроверенный идентификатор пользователя.

MID                          2                   Зарезервирован.

WordCount               1                   Число дополнительных параметров.

ParameterWords   2*WordCount Дополнительные параметры команды.

ByteCount                2                   Длина буфера.

Buffer                       ByteCount    Буфер данных. Например, в этот буфер помещается информация, считываемая из файла или подлежащая записи в файл.

Открытие сеанса

После того, как клиент установил с сервером транспортное соединение, начинается обмен сообщениями, который приводит к образованию сеанса SMB. Команды доступа к данным могут выполняться только в контексте открытого сеанса. Последовательность сообщений, передаваемых для открытия сеанса SMB, такова (рис. 4-2):

Рис. 4-2. Последовательность сообщений SMB при открытии сеанса.

Первой должна быть обязательно команда согласования диалекта.

SMB_COM_NEGOTIATE

Этой командой клиент инициирует согласование диалекта SMB. В качестве параметров команды передается массив текстовых строк, представляющий собой список поддерживаемых клиентом диалектов SMB. Например, клиент операционной системы Windows 95 передает массив:

PC NETWORK PROGRAM 1.0

MICROSOFT NETWORKS 3.0

DOS LM1.2X002

DOS LANMAN2.1

Windows for Workgroups 3.1a

NT LM 0.12

Клиент Windows NT 4.0 формирует этот список иначе:

PC NETWORK PROGRAM 1.0

XENIX CORE

MICROSOFT NETWORKS 1.03

LANMAN1.0

Windows for Workgroups 3.1a

LM1.2X002

LANMAN2.1

NT LM 0.12

Сервер выбирает самый старший диалект из поддерживаемых как клиентом, так и сервером, и возвращает сообщение, содержащее параметры дальнейшей работы. Из них самыми важными, с точки зрения системы безопасности, являются:

*  индекс выбранного диалекта в первом слове буфера ParameterWords (например, Windows NT Server укажет индекс 5 для Windows 95 и 7 для Windows NT, что будет означать диалект NT LM 0.12 и в том и в другом случаях);

*  флаг, указывающий режим системы безопасности сервера: защита на уровне ресурсов или на уровне пользователей (бит 0 второго слова буфера ParameterWords);

*  флаг, указывающий клиенту, что пароль пользователя следует передавать в зашифрованном виде (бит 1 второго слова буфера ParameterWords);

*  «вызов» (challenge) — сформированная сервером последовательность из 8 случайных байтов, используемая для проверки пароля; передается в первых 8 байтах буфера Buffer.

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

SMB_COM_SESSION_SETUP_ANDX