Хорошо ли, что SMB может быть построен на базе TCP/IP? С точки зрения функциональности – безусловно, Microsoft даже предлагает свой стандарт на глобальную файловую систему – CIFS (Common Internet File System), представляющий собой не что иное, как систему разделения ресурсов от Microsoft в рамках всего Internet. Но с точки зрения безопасности такой подход грозит дополнительными уязвимостями, обусловленными недостатками SMB.
В дальнейших рассуждениях мы предполагаем, что цель атаки – машина под управлением Windows NT, а не Windows for Workgroups или Windows 95/98, хотя они используют для разделения ресурсов тот же самый протокол SMB. Дело в том, что у этих операционных систем есть возможность обеспечивать разделение ресурсов на уровне ресурса (share level), при котором не требуется идентификации пользователя, а нужен только пароль на ресурс. Windows NT же обеспечивает разделение только на уровне пользователя (user level), при котором необходимо вводить и имя, и пароль. Вообще, применение Windows 95/98 в качестве основной ОС для хоста (сервера) в Internet – это нонсенс, и в нашей книге такой вариант практически не рассматривается.
Напомним еще раз, что необходимо знать злоумышленнику для подключения к разделяемому ресурсу на удаленной машине:
IP-адрес. Он его, безусловно, знает.
Имя ресурса. Его можно узнать с помощью той же самой команды net: net view \\194.94.94.94. Впрочем, для этого все равно надо знать имя и пароль (то есть сначала злоумышленник должен ввести net use, а потом уже net view).
Имя и пароль. Итак, именно в них вся загвоздка.
Однако нет ли в Windows NT какого-нибудь способа, позволяющего обойтись без знания имени и/или пароля? Оказывается, есть. Самой системе иногда требуется подключение к компьютеру, например для обеспечения межкомпьютерных связей в домене. И при этом ей приходится как-то идентифицироваться на удаленном компьютере. Такой механизм называется
null session (нуль-сеанс, или анонимное подключение). Чтобы его установить, необходимо ввести пустое имя пользователя и пустой пароль, при этом для анонимного подключения всегда открыт специальный ресурс IPC$ (inter-process communication):
net use \\194.94.94.94\IPC$ «„ /USER:“»
Анонимный доступ имеет ряд ограничений, в частности не позволяет подключать непосредственно разделяемые диски, но может предоставить следующие возможности:
• вывести список разделяемых ресурсов;
• удаленно просмотреть реестр с помощью стандартных программ Regedit или Regedt32 (если не запрещено его разделение). При этом ему будут доступны те разделы реестра, которые доступны Everyone, то есть многие. Например, в каталоге HKLM\SOFTWARE\ Microsoft\Windows NT\CurrentVersion\Winlogon существуют поля «DefaultUsername» и «DefaultPassword», означающие имя и пароль пользователя при autologon (автоматический вход в систему);
• запустить User Manager и просмотреть список существующих пользователей и групп;
• запустить Event Viewer и другие средства удаленного администрирования, использующие SMB.
Такая атака получила название RedButton, как и вышедшая в 1997 году программа-демонстратор, хотя о возможности анонимного подключения было известно со времен Windows NT 3.5. Service Pack 3 закрывает большинство этих возможностей, но не устраняет причину – анонимного пользователя. Поэтому после установки Service Pack 3 все равно можно просмотреть разделяемые ресурсы, а также узнать имена всех пользователей и групп в системе благодаря наличию общеизвестных (well-known) имен и идентификаторов субъектов.
С целью идентификации субъектов (пользователей или групп) Windows NT использует SID (security identifier – идентификаторы безопасности), но, в отличие от UID в UNIX, они у NT более сложные, имеют большую длину и уникальны для каждого пользователя даже на разных компьютерах. SID принято записывать в виде S-1-XXXXX-YYYYY1-YYYYY2-…,
где S-1 – идентификатор безопасности, версия 1;
XXXXX – номер ведомства (authority);
YYYYYn – номера подразделений (subauthority), причем последний из них задает RID (relative identifier – относительный идентификатор), который не будет уникальным для каждого компьютера. Например, для администратора – RID всегда 500 (прямая аналогия с UID root в UNIX, который всегда 0).
Итак, каждый идентификатор сопоставляется с некоторым субъектом, и существуют функции Win32 API, позволяющие получить SID по имени (LookupAccountName), и наоборот (LookupAccountSid).
Теперь нетрудно догадаться, что после установки анонимного подключения эти функции возможно применить и к удаленному компьютеру. Российским исследователем Евгением Рудным были написаны две простые программы, sid2user и user2sid, осуществляющие такие вызовы. Дальше кракеру поможет знание общеизвестных имен или RID.
Читать дальше
Конец ознакомительного отрывка
Купить книгу