Самыми надежными в плане безопасности из NT-систем на сегодняшний день
являются Win2000 и WinXP. Но и в них присутствует множество
уязвимостей, существующих еще со времен NT4. Большинство из них живут
до сих потому, что, как известно, в Microsoft все делается через одно
место (через Билла Гейтса), и по умолчанию система поставляется весьма
и весьма плохо сконфигурированной в плане безопасности. Эта ситуация
является прямым итогом политики, которую можно охарактеризовать, как
"чтобы все работало даже у самого криворукого админа". Поэтому наша
задача - устранить эти даже не баги, а скорее недочеты в конфигурации
по умолчанию, сделав систему более защищенной.
Рассматривать
мы будем Win2k/XP, т.к. они мало чем отличаются друг от друга в плане
безопасности, и в дальнейшем под термином WinNT я буду подразумевать
именно эти две системы. Также отмечу тот факт, что случаи, когда
NT-машина является контроллером домена или иные экзотические ситуации
рассматриваться не будут. Считаем, что в нашем подчинении находится
обычная рабочая станция, например, в локалке. И наша задача - защитить
ее от посягательств других клиентов из локальной сети.
Пароли в NT
Начнем,
как водится, со святого - с пользовательских аккаунтов. Любые
неприятности начинаются именно здесь. Известно, что в WinNT пароли
хранятся в специальном файле SAM (%папка_с_виндой%system32configSAM).
Но это не значит, что любой юзер, имеющий учетную запись на нашей
машине, сможет его себе скопировать. Во время работы системы доступ к
файлу полностью запрещен, даже администратору. Поэтому единственный
выход получить доступ к файлу SAM - загрузить на компьютере
альтернативную операционку. Локально это не представляет никакого
труда. Существует множество "систем на одной дискете", способных читать
из раздела NTFS (Trinux, PicoBSD, и т.д.). Но мы говорим о локальной
сети, и в этих рамках опасной представляется ситуация, имеющая в народе
широкое распространение - наличие на машине связки "Win9x (для игр) +
WinNT (для работы)". Очевидно, что получить доступ к SAM-файлу из Win9x
можно, только если он лежит на FAT32-разделе. Отсюда вывод - ставить
WinNT на FAT-раздел глупо. А в случае наличия на компьютере Win9x
вообще недопустимо, ибо вся безопасность NT летит в тартарары.
Банально, но факт - очень многие оставляют свежепоставленную NT на
FAT'е именно для того, чтобы можно было из 98-й винды обращаться к
документам, лежащим на разделе с WinNT. Справедливости ради отмечу, что
многие полезные функции NT (квотирование, шифрование файловой системы,
и т.д.) работают только на NTFS, и с этой точки зрения установка NT на
FAT-раздел выглядит тем более идиотским решением. А мое личное мнение -
нужно вообще отказаться от какого-либо использования Win9x.
Многие
спросят - а как же тогда работают многочисленные программы для подбора
паролей в NT. Дело в том, что дамп паролей хранится не только в файле.
Во время работы системы он отображается в реестре, и все программы типа
LophtCrack выдирают его именно оттуда. К счастью, к ветке реестра с
паролями доступ имеют только юзеры с правами администратора. Казалось
бы, беспокоиться не о чем: не ставь на комп вторую операционку, не
работай из-под учетной записи админа, и никто до паролей не доберется.
Но это не так. Та же L0phtCrack умеет перехватывать передаваемые по
сети хэши паролей (работа в режиме снифера), поэтому в сети с
логической топологией "общая шина" удаленный доступ к своей машине
(например, к принтеру) представляет определенную опасность. Примечание:
строго говоря, в NT сами хэши паролей по сети НЕ передаются, но
передаются хэши, полученные на основе хэшей паролей. Короче,
перехватить данные, на основе которых можно получить пароль
пользователя, представляется возможным.
Как же быть? Допустим,
что хэши паролей каким-то образом перехвачены (из файла SAM, из
реестра, или отснифаны по сети). В таких случаях обычно рекомендуют
выбирать надежные пароли длиной не менее семи символов, дабы получивший
хэш-код взломщик не смог их расшифровать подбором "в лоб" (bruteforce)
за приемлемое время. Но этого мало.
Дело в том, что в
WinNT пароли по умолчанию хранятся зашифрованными сразу по двум
алгоритмам. Сделано это в целях все той же пресловутой совместимости.
Первый алгоритм - так называемый LM-hash, существующий для
совместимости с аутентификацией в сетях LanMan, второй - собственный
NT'шный, алгоритм NT-hash. LM-алгоритм работает не просто криво, а
очень криво. А именно, он разделяет полученный пароль на две части по
семь символов каждая (т.е., например, если пароль состоит из десяти
символов, то он преобразует его в два слова, из семи и из трех символов
соответственно), переводит все символы в верхний регистр, шифрует
каждую часть отдельно, и два полученных хэша объединяет вместе, получая
тот самый LM-hash. Надо ли говорить, что подбор зашифрованных таким
алгоритмом паролей значительно проще (очевидно, что легче расшифровать
два пароля из семи и трех символов, чем один из десяти)? И все
программы подбора паролей умеют пользоваться этой возможностью,
взламывая две половины пароля одновременно.
Учитывая, что
многие пароли представляют собой простые слова или сочетания слов,
из-за применения в винде 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) по адресу
HKLMSYSTEMCurrentControlSetControlLsa необходимо создать параметр типа
REG_DWORD с названием restrictanonymous (он, возможно, уже создан) и
присвоить ему значение 1 или 2. Значение 1 запрещает анонимным юзерам
просматривать учетные записи и общие ресурсы удаленно (т.е. для защиты
от null-session этого достаточно, саму сессию установить по-прежнему
можно, но вот получить информацию через нее уже нельзя). Значение 2
вообще отказывает любой неявный доступ к системе. Учитывая, что
существуют программы (GetAcct, user2sid, и т.п.), с помощью которых
можно собрать информацию даже при параметре restrictanonymous,
установленном в 1, советую выставить его значение в 2 (если,
разумеется, компьютер не является контроллером домена). При этом машина
исчезает из "сетевого окружения" (network neiborhood), но получить
доступ к ней по-прежнему можно, обратившись по.ее.ай.пи.
А
если тебе вообще не нужны удаленные подключения к системе, то просто
отключай "службу сервера" (Server) в оснастке Services панели
администрирования или руками в реестре создавай параметр REG_DWORD по
адресу HKLMSYSTEMCurrentControlSetServicesLanmanServerParameters с
названием AutoShareWks и присваивай ему значение 0. Теперь к тебе никто
не пролезет.
Собственно шары
Я уже упомянул,
что расшаренные ресурсы является излюбленным местом сосредоточения сил
компьютерных хулиганов. Ведь даже при отключенном анонимном сеансе
через IPC$ существует возможность просмотреть и получить доступ к шарам
путем простого подбора пароля.
Гораздо хуже, когда
имеется возможность получить список имен NetBIOS (протокол, служащий
для предоставления удаленного доступа к файлам и папкам). В WinNT это
делается с помощью стандартной утилиты nbtstat.
Что нам
это дает? Можно узнать имя компьютера, домен или рабочую группу, в
которую он входит, запущенные в данный момент сервисы. В рамках рабочей
станции это не представляет особой угрозы, но с серверов и контроллеров
домена можно собрать приличное количество информации.
Учитывая
все вышесказанное, ты решил, что шары нам не нужны совсем, и NetBIOS -
зло? Отлично, отключаем их, запретив его использование. Для этого в
свойствах соединения, во вкладке "свойства протокола TCP/IP" ->
"дополнительно" выбираем пункт "отключить NetBIOS через TCP/IP". Затем
в тех же "свойствах соединения" убираем галочку у пункта "Доступ к
файлам и принтерам сети Microsoft". Это самый радикальный способ
обезопасить себя от левых подключений, но помни, что после этого никто
не сможет подключиться к твоим расшаренным ресурсам (которых просто не
будет). Даже ты не сможешь путешествовать по чужим папкам с общим
доступом.
Изменения ты можешь увидеть сразу, набрав до и
после отключения в командной строке C:>netstat -a. Три связанных с
NetBIOS сервиса отсутствуют. Чем именно каждый из них занимается, ты
можешь посмотреть в файле %папка_с_виндой%system32driversetcservices,
где описаны все сервисы системы.
Пользовательские аккаунты
Во
многих источниках проскакивает информация, что при работе в 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% "кибертеррористов" ломают не то, что хотят, а
то, что ломается легче всего. Твоя система не будет легкой добычей,
правда?