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

В команде открытия сеанса клиент передает имя пользователя, имя домена и пароль. Если при согласовании диалекта сервер не указал установкой соответствующего бита на необходимость шифрования пароля, то пароль передается в виде открытого текста. Если же этот флаг установлен, то собственно пароль пользователя в передаваемом по сети сообщении не фигурирует. Вместо этого клиент шифрует по алгоритму DES полученный в предыдущем пакете от сервера 8-байтовый «вызов», используя в качестве ключа шифрования 16-байтовый хешированный пароль. Результатом является «ответ» клиента — структура данных длиной 24 байта. Этот «ответ» и передается серверу для проверки.

Как уже говорилось, в базе данных SAM используется два способа хранения пароля: хешированный пароль Windows NT и хешированный пароль LAN Manager. Так как клиент не знает, какая именно хеш-функция необходима для того или иного пользователя, то в случае диалекта NT LM 0.12 клиент формирует и передает сразу два «ответа», при этом общая длина «ответа» клиента составляет 48 байтов.

Получив от клиента сообщение с командой SMB_COM_SESSION_ SETUP_ANDX, сервер сверяет «ответ» клиента со значением, полученным в результате вычислений по тому же алгоритму, но с применением пароля пользователя из базы данных SAM. Совпадение полученных значений свидетельствует о том, что предъявленный пароль совпадает с тем, что имеется на сервере (рис. 4-3).

Рис. 4-3. Схема алгоритма проверки пароля при открытии сеанса SMB.

Суммируя приведенный алгоритм проверки подлинности с применением шифрования пароля, укажем на три основных момента.

1.  Для несанкционированного доступа злоумышленнику пароль пользователя не нужен! Напомним, что пароль не хранится операционной системой в том виде, как его набирает пользователь. Вместо этого при помощи двух необратимых функций вычисляются хешированные пароли, и уже в таком виде информация помещается в учетную запись. Это обеспечивает защиту исходного представления пароля, однако, чтобы открыть сеанс SMB, в таком виде пароль и не требуется. Чтобы «убедить» сервер в подлинности пользователя, клиенту достаточно знать результат хеширования пароля.

2.  Метод передачи пароля в достаточной степени защищает его от перехвата. Действительно, при формировании «ответа» шифруется не хешированный пароль, а «запрос» сервера. Хешированный пароль используется в качестве ключа шифра. Поэтому по передаваемым по сети данным нельзя расшифровать ни сам пароль, ни результат его хеширования. Сервер не производит прямого сравнения паролей. Вместо этого проверяется, что клиент по паролю, предъявленному пользователем, может выполнить те же действия, что сервер производит при помощи своей копии этого пароля.

3.    При открытии сеанса сервер выбирает и передает клиенту каждый раз новый 8-байтовый «запрос». Поэтому, даже перехватив передаваемый клиентом «ответ», злоумышленник не сможет повторно использовать его для открытия сеанса.

Вернемся к описанию протокола SMB. Если процедура проверки подлинности пользователя завершилась успешно, сервер открывает сеанс и высылает сообщение, содержащее в поле UID идентификатор пользователя. Этот идентификатор действует только в течение сеанса и служит клиенту для выполнении на сервере операций от имени данного пользователя. Поле UID не имеет серьезного значения для системы безопасности и предусмотрено для того, чтобы обеспечить работу от имени нескольких пользователей в рамках одного сеанса SMB. Сервер SMB полагается на то, что применяемый им транспортный протокол не позволит злоумышленнику внедрять свои данные в существующий канал связи клиента с сервером и тем самым выполнять на сервере действия, минуя проверку подлинности.

Доступ к данным

Все операции с ресурсами сервера выполняются в контексте открытого сеанса. Клиент подключается к общим папкам на сервере, выполняет считывание и запись информации и т. п. Если почему-либо сеанс оказывается аварийно закрытым (например, при перезагрузке сервера), все клиенты 8MB производства корпорации Microsoft автоматически делают попытку повторно открыть его. При этом, естественно, заново проверяется подлинность пользователя. С одной стороны, это удобно и для пользователя, и для администратора, так как обеспечивает самовосстановление системы после небольших сбоев. Но с другой стороны, клиент SMB должен хранить в памяти пароль пользователя, что может представлять определенную угрозу системе безопасности. В главе 5 мы разберем атаку, эксплуатирующую это свойство клиента. А пока рассмотрим несколько типичных команд SMB для выполнения операций с данными.