ShooTer
06.11.2003, 14:18
ВЕДЕНИЕ
Самыми безопасными из всех NT-систем являются Windows XP и Windows 2000. Хоть это и новые версии Windows в них всё равно присутствует множество уязвимостей ещё со времён Windows NT4, т.к. в Microsoft всё делается через одно место. На форуме hackzone.ru часто задают вопросы “как стырить пароли?” Или наоборот,” как защититься?” Моя статья призвана ответить на все вопросы.
ПАРОЛИ В СИСТЕМАХ NT.
Начнём естественно с святого – с паролей. В Win3.11/95/98/Me пароли лежали(т) были зашифрованы в файле pwl и лежали в папке Windows. Спионерить и расшифровать эти пароли не составляло труда(из-за слабой шифровки процесс составляет 2-3 секунды без подбора). Доступ к pwl файлам имел любой желающий (а чаще всего взломщик ;-)). В NT системах всё изменилось: пароли хранятся в файле SAM в директории X:/%папка_с_виндой%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. Надо ли говорить, что подбор зашифрованных таким алгоритмом паролей значительно проще (очевидно, что легче расшифровать два пароля из семи и трех символов, чем один из десяти)? И все программы подбора паролей умеют пользоваться этой возможностью, взламывая две половины пароля одновременно. Например, есть админ с учётной записью Admin и паролем admin123, L0phtcrack разделит его на две части: admin12 и 3 и не пройдёт и минуты как вторая половина расшифруется , а именно тройка). Microsoft из-за этой “технологии” сама забивает себе гвозди в гроб.
Учитывая, что многие пароли представляют собой простые слова или сочетания слов, из-за применения в винде 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).
УДАЛЁННЫЙ ДОСТУП
Поговорим еще про одно святое место сетевой операционной системы: про ресурсы с открытым общим доступом по сети, проще говоря, шары. Хацкеры (aka screept-kiddies ?), как известно, слетаются на них, как мухи на г... на мед :). Получение файлов через шары - тема довольно избитая, а вот сбор информации о системе через расшаренные ресурсы обсуждается реже.
По умолчанию 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 - зло? Отлично, отключаем их, запретив его использование. Для этого в свойствах соединения, во вкладке "свойства протокола TCP/IP" -> "дополнительно" выбираем пункт "отключить NetBIOS через TCP/IP". Затем в тех же "свойствах соединения" убираем галочку у пункта "Доступ к файлам и принтерам сети Microsoft". Это самый радикальный способ обезопасить себя от левых подключений, но помни, что после этого никто не сможет подключиться к твоим расшаренным ресурсам (которых просто не будет). Даже ты не сможешь путешествовать по чужим папкам с общим доступом.
Изменения ты можешь увидеть сразу, набрав до и после отключения в командной строке C:>netstat a
FerrUM www.hackzone.ru
Самыми безопасными из всех NT-систем являются Windows XP и Windows 2000. Хоть это и новые версии Windows в них всё равно присутствует множество уязвимостей ещё со времён Windows NT4, т.к. в Microsoft всё делается через одно место. На форуме hackzone.ru часто задают вопросы “как стырить пароли?” Или наоборот,” как защититься?” Моя статья призвана ответить на все вопросы.
ПАРОЛИ В СИСТЕМАХ NT.
Начнём естественно с святого – с паролей. В Win3.11/95/98/Me пароли лежали(т) были зашифрованы в файле pwl и лежали в папке Windows. Спионерить и расшифровать эти пароли не составляло труда(из-за слабой шифровки процесс составляет 2-3 секунды без подбора). Доступ к pwl файлам имел любой желающий (а чаще всего взломщик ;-)). В NT системах всё изменилось: пароли хранятся в файле SAM в директории X:/%папка_с_виндой%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. Надо ли говорить, что подбор зашифрованных таким алгоритмом паролей значительно проще (очевидно, что легче расшифровать два пароля из семи и трех символов, чем один из десяти)? И все программы подбора паролей умеют пользоваться этой возможностью, взламывая две половины пароля одновременно. Например, есть админ с учётной записью Admin и паролем admin123, L0phtcrack разделит его на две части: admin12 и 3 и не пройдёт и минуты как вторая половина расшифруется , а именно тройка). Microsoft из-за этой “технологии” сама забивает себе гвозди в гроб.
Учитывая, что многие пароли представляют собой простые слова или сочетания слов, из-за применения в винде 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).
УДАЛЁННЫЙ ДОСТУП
Поговорим еще про одно святое место сетевой операционной системы: про ресурсы с открытым общим доступом по сети, проще говоря, шары. Хацкеры (aka screept-kiddies ?), как известно, слетаются на них, как мухи на г... на мед :). Получение файлов через шары - тема довольно избитая, а вот сбор информации о системе через расшаренные ресурсы обсуждается реже.
По умолчанию 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 - зло? Отлично, отключаем их, запретив его использование. Для этого в свойствах соединения, во вкладке "свойства протокола TCP/IP" -> "дополнительно" выбираем пункт "отключить NetBIOS через TCP/IP". Затем в тех же "свойствах соединения" убираем галочку у пункта "Доступ к файлам и принтерам сети Microsoft". Это самый радикальный способ обезопасить себя от левых подключений, но помни, что после этого никто не сможет подключиться к твоим расшаренным ресурсам (которых просто не будет). Даже ты не сможешь путешествовать по чужим папкам с общим доступом.
Изменения ты можешь увидеть сразу, набрав до и после отключения в командной строке C:>netstat a
FerrUM www.hackzone.ru