Как же быть? Допустим, что хэши паролей каким-то образом перехвачены (из
файла SAM, из реестра, или отснифаны по сети). В таких случаях обычно
рекомендуют выбирать надежные пароли длиной не менее семи символов, дабы
получивший хэш-код взломщик не смог их расшифровать подбором "в лоб"
(bruteforce) за приемлемое время. Но этого мало.
Дело в том, что в WinNT пароли по умолчанию хранятся зашифрованными сразу по
двум алгоритмам. Сделано это в целях все той же пресловутой совместимости.
Первый алгоритм - так называемый LM-hash, существующий для совместимости с
аутентификацией в сетях LanMan, второй - собственный NT'шный, алгоритм NT-hash.
LM-алгоритм работает не просто криво, а очень криво. А именно, он разделяет
полученный пароль на две части по семь символов каждая (т.е., например, если
пароль состоит из десяти символов, то он преобразует его в два слова, из семи и
из трех символов соответственно), переводит все символы в верхний регистр,
шифрует каждую часть отдельно, и два полученных хэша объединяет вместе, получая
тот самый LM-hash. Надо ли говорить, что подбор зашифрованных таким алгоритмом
паролей значительно проще (очевидно, что легче расшифровать два пароля из семи
и трех символов, чем один из десяти)? И все программы подбора паролей умеют
пользоваться этой возможностью, взламывая две половины пароля одновременно. На
скриншоте представлен процесс взлома паролей утилитой L0phtCrack, и видно, что
последний, восьмой символ пароля пользователя winroot (переименованная учетная
запись администратора) определился сразу, т.к. подобрать пароль из одной буквы
не составляет труда.
Учитывая, что многие пароли представляют собой простые слова или сочетания
слов, из-за применения в винде LM-hash'а может сложиться ситуация, когда пароль
из семи символов надежнее пароля из десяти. Ведь на основании быстро угаданных
последних трех символов можно сделать вывод обо всем пароле в целом. А
избавиться от недостатка очень легко. Через панель администрирования, оснастку
Local Security Policy, в разделе Local Security Settings -> Security Options
найти политику "Network Security: LAN Manager authentification level"
и изменить дефолтовое значение (Send LM & NTLM responses) на что-то вроде
Send NTLM response only (или использовать NTLMv2, если не нужна совместимость
или в сети отсутствуют машины на NT4/Win9x).
Удаленный доступ
Поговорим еще про одно святое место сетевой операционной системы: про
ресурсы с открытым общим доступом по сети, проще говоря, шары. Кульные хацкеры,
как известно, слетаются на них, как мухи на г... на мед :). Получение файлов
через шары - тема довольно избитая, а вот сбор информации о системе через
расшаренные ресурсы обсуждается реже.
По умолчанию WinNT сконфигурирована так, что любой может получить по сети
информацию о системе (имена пользователей, групп, общие папки, политику
паролей, информацию о сетевых соединениях). Способствуют этому два создаваемых
по умолчанию расшаренных ресурса - ADMIN$ и IPC$. Первый служит для обеспечения
удаленного управления системой, второй отвечает за межпроцессное взаимодействие
по сети для доступа к общим ресурсам (IPC - InterProcess Communication).
Убедиться, что они действительно существуют, можно, например, с помощью
многофункциональной утилиты net.exe, входящей в стандартную поставку Win2k/XP:
C:\>net use \\127.0.0.0\ ipc$ ""/u:'' (передаем
"пустой" аккаунт).
Собственно, сбор информации о системе путем подключения к шаре IPC$ с пустым
именем пользователя и пароля получил название нуль-сессии (null-session) -
пресловутый способ удаленной инвентаризации WinNT, работающий как в первых
версиях NT, так и в последней XP. Наверное, ты слышал уже этот термин. Но
слышал ли ты, как сделать свою машину защищенной от этого бага? Дело в том, что
полностью отключить эти две шары невозможно. Точнее говоря, возможно, но это
будет слишком радикальным шагом, и если доступ к машине по сети все-таки нужен,
то сделать необходимо следующее. В редакторе реестра (regedit32.exe) по адресу
HKLM\SYSTEM\CurrentControlSet\Control\Lsa необходимо создать параметр типа
REG_DWORD с названием restrictanonymous (он, возможно, уже создан) и присвоить
ему значение 1 или 2. Значение 1 запрещает анонимным юзерам просматривать
учетные записи и общие ресурсы удаленно (т.е. для защиты от null-session этого
достаточно, саму сессию установить по-прежнему можно, но вот получить
информацию через нее уже нельзя). Значение 2 вообще отказывает любой неявный
доступ к системе. Учитывая, что существуют программы (GetAcct, user2sid, и
т.п.), с помощью которых можно собрать информацию даже при параметре
restrictanonymous, установленном в 1, советую выставить его значение в 2 (если,
разумеется, компьютер не является контроллером домена). При этом машина
исчезает из "сетевого окружения" (network neiborhood), но получить
доступ к ней по-прежнему можно, обратившись \\по.ее.ай.пи.
А если тебе вообще не нужны удаленные подключения к системе, то просто
отключай "службу сервера" (Server) в оснастке Services панели
администрирования или руками в реестре создавай параметр REG_DWORD по адресу
HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters с названием
AutoShareWks и присваивай ему значение 0. Теперь к тебе никто не пролезет.
Собственно шары
Я уже упомянул, что расшаренные ресурсы является излюбленным местом
сосредоточения сил компьютерных хулиганов. Ведь даже при отключенном анонимном
сеансе через IPC$ существует возможность просмотреть и получить доступ к шарам
путем простого подбора пароля. На скриншоте показан просмотр расшаренных
ресурсов с помощью BSD'шной утилиты smbutil.
Гораздо хуже, когда имеется возможность получить список имен NetBIOS
(протокол, служащий для предоставления удаленного доступа к файлам и папкам). В
WinNT это делается с помощью стандартной утилиты nbtstat.
Что нам это дает? Как видно из скриншота, можно узнать имя компьютера, домен
или рабочую группу, в которую он входит, запущенные в данный момент сервисы. В
рамках рабочей станции это не представляет особой угрозы, но с серверов и
контроллеров домена можно собрать приличное количество информации.
Учитывая все вышесказанное, ты решил, что шары нам не нужны совсем, и
NetBIOS - зло? Отлично, отключаем их, запретив его использование. Для этого в
свойствах соединения, во вкладке "свойства протокола TCP/IP" ->
"дополнительно" выбираем пункт "отключить NetBIOS через
TCP/IP". Затем в тех же "свойствах соединения" убираем галочку у
пункта "Доступ к файлам и принтерам сети Microsoft". Это самый
радикальный способ обезопасить себя от левых подключений, но помни, что после
этого никто не сможет подключиться к твоим расшаренным ресурсам (которых просто
не будет). Даже ты не сможешь путешествовать по чужим папкам с общим доступом.
Изменения ты можешь увидеть сразу, набрав до и после отключения в командной
строке C:\>netstat -a. На скриншоте видно, какие три связанных с NetBIOS
сервиса отсутствуют во втором случае. Чем именно каждый из них занимается, ты
можешь посмотреть в файле %папка_с_виндой%\system32\drivers\etc\services, где
описаны все сервисы системы.
Пользовательские аккаунты
Во многих источниках проскакивает информация, что при работе в NT неплохо бы
изменить логин администратора (administrator) на что-нибудь менее броское, да и
сам Microsoft рекомендует смену имени учетной записи админа как одно из первых
действий после установки системы. Теперь-то тебе уже должно быть понятно, для
чего такие предосторожности. Есть куча программ (в том числе и упомянутая выше
nbtstat), которые могут зафиксировать нахождение пользователя в системе, и если
таким пользователем будет Administrator, то это значит, что взломщику нужно будет
подбирать только пароль! Поэтому идем в посещенные нами сегодня Local Security
Policy -> Security Options, и в политике Rename administratior account
задаем свое имя.
Последние штрихи
После того как мы пофиксили очевидные недочеты, наведем финальный лоск. Эти
советы ты наверняка мог прочитать во всех статьях по WinNT, но все же...
Во-первых, отключи все ненужные тебе сервисы. Подчеркиваю - все. Если
сомневаешься, выстави режим запуска не в Disabled, а в Manual. Просто если
данный сервис понадобится, то система предложит его запустить. Все знают о
GUI'вой оболочке управления сервисами (Administrative Tools -> Services), но
мало кто слышал про консольную, но более продвинутую утилиту sc.exe. В WinXP
она включена по умолчанию, а для Win2000 входит в пакет Win2k Resource Kit. С
помощью мощной sc.exe можно проворачивать гораздо больше операций. Так,
например, узнаешь, что на самом деле степеней запуска сервисов семь, а не три,
как показывает утилита Services.
Во-вторых, как ни банально это звучит, озаботься, чтобы на твоей системе
стояли все последние хотфиксы и сервиспаки. Правда, недавняя практика установки
SP3 на Win2000 показывает, что не все так гладко, и не все то полезно, что
лежит на Microsoft TechNet в разделе Downloads, но это скорее исключение из правил.
К тому же MS в целях в том числе и заботы о пользователях представил сканер
системы на установленные патчи - MS Baseline Security Analyser (и его
расширенную консольную версию nshc.exe). Не пренебрегай этими утилитами, благо
проверять свою систему на неустановленные модули обновления еще никогда не было
так просто. Между делом замечу, что превратиться в еще одну утилиту для хакеров
(как случалось с некоторыми программами из Win2k Resource Kit) MBSA, видимо, не
суждено. Ведь для того чтобы просканировать систему, нужно иметь на ней права
администратора. Впрочем, не забывай и об остальных популярных сканерах
безопасности. Напомню, что всевозможные X-Spider'ы, ShadowSecurityScanner'ы,
Retina'ы и прочие Nessus'ы создавались как раз для аудита системы, а не для
изучения жертвы. Воспользуйся ими и увидишь, насколько уязвима твоя собственная
система.
В-третьих, по возможности никогда не выполняй повседневные дела под
аккаунтом администратора, пусть и переименованным. В NT распределение
полномочий пользователей основано на списках контроля доступа (ACL - Access
Control List), определяющих права доступа юзера к папкам/файлам/ключам реестра.
Поэтому в случае подсовывания тебе банального трояна и запуске его от имени
администратора, права зловредной программы будут также абсолютными. Если
понадобится запустить какую-либо программу под админом, используй встроенную
службу RunAs (вызывается по нажатию правой кнопкой мыши по экзешнику или из
консоли).
В завершение поставь себе хороший персональный фаервол. Без него сейчас
никуда. И помни, что 90% "кибертеррористов" ломают не то, что хотят,
а то, что ломается легче всего. Твоя система не будет легкой добычей, правда?
|