Функция NtAddAtom в WIN32 API вызывается функцией AddAtom, которая используется достаточно часто. Но функция AddAtom принимает только один параметр (адрес строки), поэтому вызов ее не приводил к катастрофическим последствиям.
Итак, получается, мы можем писать в любую область адресного пространства Windows NT… В системе Windows NT есть некий глобальный флаг NtGlobalFlag, имеющий адрес примерно 0x801XXXXX. Изменением одного из битов этого флага мы можем превратить Windows NT в Windows NT Checked Build, и право SeDebugPrivilege не будет необходимо для внедрения в системные процессы».
Дальнейшее уже зависит от стремлений хакера – имея привилегии system, можно сделать с системой все, что угодно. Программа GetAdmin внедряла в процесс WinLogon код, добавляющий текущего пользователя в группу администраторов.
Как говорится, трудно только в первый раз. Вскоре последовали различные способы получения прав администратора в Windows NT, либо развивающие идею внедрения в процессы (например, Sechole), либо использующие другие пути. Одним из самых оригинальных и в то же время очевидных оказался способ подмены программы, вызываемой при сбое другого процесса. По умолчанию в Windows NT это программа Dr. Watson, вызов которой располагается в каталоге реестра HKLM\Software\Microsoft\Windows NT\ CurrentVersion\AeDebug. Если же прописать туда вызов не Dr. Watson, а, скажем, User Manager, то последний будет запускаться при каждом аварийном завершении некоторого процесса. Право на чтение и запись в этот каталог реестра имеет любой член группы Everyone. Итак, злоумышленнику осталось только найти подходящий системный процесс, который он смог бы «подвесить». Учитывая стиль программирования от Microsoft, сделать это не так трудно.
Не правда ли, все это чрезвычайно похоже на получение прав суперпользователя через SUID/SGID-программы? Совершенно очевидно, что никто уже не верит в непогрешимость модели разграничения полномочий в Windows NT и вскоре появятся новые способы несанкционированного присвоения дополнительных прав.
...
Уже сдавая рукопись в редакцию, мы обнаружили такой способ, опубликованный известной хакерской группой L0pht. См. бюллетень безопасности Microsoft MS006-99 «KnownDLLs List Vulnerability».
При обсуждении SUID/SGID-механизма мы подчеркивали, что он сам по себе позволяет строить только локальные атаки, которые легко превращаются в «удаленные», если злоумышленник подключается к компьютеру по протоколу TELNET. В Windows NT дело обстоит примерно так же: программы получения прав администратора могут быть запущены удаленно, например через механизм CGI или при использовании TELNET, поставляемого третьими фирмами (так как в стандартной конфигурации он не предусмотрен).
Итак, повторим основные уязвимости Windows NT, делающие возможными атаки типа GetAdmin (первые два пункта могут быть отнесены к люкам):
• возможность отлаживать потоки;
• наличие NtGlobalFlag;
• ошибки в функциях ядра и в системных сервисах, в том числе недостаточные проверки на корректность параметров. Типичный пример непредусмотренных входных данных;
• слишком широкий доступ к параметрам реестра.
Разделение ресурсов и анонимный пользователь
Доступ к файлам и принтерам на удаленных компьютерах под управлением ОС семейства Windows осуществляется через протокол SMB. Более того, этот протокол используется многими компонентами удаленного управления системой, например программами Regedit, User Manager и Server Manager. Поэтому значение протокола с точки зрения безопасности является очень важным. В частности, к нему могут быть применены типовые удаленные атаки (см. главы 3–8).
Но какое отношение он имеет к Internet? Ведь протокол SMB задумывался для разделения ресурсов внутри локальной сети (домена). Дело в том, что SMB, являясь протоколом прикладного уровня, может быть построен на основе любого транспортного протокола, совместимого с интерфейсом NetBIOS. Обычно в сетях Microsoft для этих целей используется NetBEUI, однако может быть использован и IPX, и, естественно, IP (NetBIOS over TCP/IP). Именно поэтому все, что говорится о SMB, относится и к глобальным сетям, построенным на TCP/IP. Например, если вы разрешили доступ на ваш диск С: своему коллеге, сидящему в соседней комнате, и подключились к Internet, то имейте в виду, что доступ к диску теперь получат и пользователи извне, задав команду типа
> net use * \\194.94.94.94\DISK_C password /USER:user,
где 194.94.94.94 – ваш IP-адрес;
DISK_C – разделяемое имя диска C:;
user, password – имя и пароль для подключения к ресурсу.
Более того, даже если вы и не стремились предоставить никому доступ к вашим дискам, NT это сделает за вас. В ней есть так называемое административное (или скрытое) разделение ресурсов, отличающееся от обычных символом «$» в конце, а также тем, что эти скрытые ресурсы вновь появляются после перезагрузки, даже если вы их удалите вручную. Их имена – C$, D$ и т. д., обозначающие ваши жесткие диски, а также ADMIN$, указывающий на каталог %SystemRoot%. Такие ресурсы доступны только администратору и не выводятся в списке разделяемых ресурсов командой net view. Настройками в реестре можно отказаться от их наличия, но по умолчанию они существуют.
Читать дальше
Конец ознакомительного отрывка
Купить книгу