Active Directory: распространенные виды атак и защита от них
Сергей «grinder» Яремчук (grinder@synack.ru)
Служба каталогов Active Directory обладает многими преимуществами: централизованное управление учетными записями и доступом к ресурсам, групповые политики, позволяющие развертывать ПО на множестве компьютеров и более гибко производить настройки, аудит объектов и многое другое. В результате инфраструктура AD является ключевым элементом сетей, построенных на базе Windows, к защите которого следует приложить максимум усилий.
Содержание:
- Введение
- Подбор хэш-функции пароля
- Защита учетных записей
- Проблемы Kerberos
- Заключение
- Врезка: Порты Active Directory
- Врезка: Тонкая настройка Kerberos
- Боковые выносы
Контроллеры домена содержат все необходимые данные, используемые для аутентификации в домене, и в случае его отказа ни один из пользователей не сможет выполнять свою работу. Компрометация учетных данных имеет не менее пагубные последствия: пользователь, обладающий определенными правами, может нанести серьезный вред системе или получить доступ к конфиденциальной информации. Именно поэтому их защите, сохранности и целостности необходимо уделять повышенное внимание и планировать все мероприятия с самых первых шагов, начиная от физической безопасности сервера, ограничения доступа к серверу, определения задач для администраторов и заканчивая планом резервного копирования и восстановления работоспособности контроллера домена или отдельных учетных записей, удаленных случайно или умышленно. Придется разобрать достаточно много вопросов и произвести не один десяток настроек для того, чтобы служба каталогов и контроллер домена были в безопасности. Каких именно? Читай дальше.
В сегодняшних сетях зачастую можно встретить работу нескольких поколений Windows, и администратору в целях совместимости приходится принудительно активировать системные параметры, обозначенные как «не рекомендуемые». Многие дыры живут в Windows еще со времен 95/NT, благополучно перекочевывая из релиза в релиз, и все для того, чтобы системы мирно сосуществовали друг с другом (плюс чтобы начинающий админ мог поднять сеть за несколько кликов мышки). Хотя нужно признать, что в новых системах, чтобы вернуть совместимость, а значит, получить в подарок весь груз уязвимостей, уже необходимо выполнить некоторые действия, вполне осознавая, к каким неприятностям это может привести.
Протоколом сетевой аутентификации в NT является NTLM (NT LAN Manager, чуть позже его стали называть NTLMv1), который изначально поддерживается в сетях Windows 2k/XP/2k3, а после активации соответствующей политики и в более новых системах. Основой NTLM послужил архаичный протокол аутентификации Microsoft LAN Manager, с которым сохранена совместимость. В итоге введенный пользователем пароль хранится в двух хэшах — LM и NT. При этом NT хэш является по сути MD4 хэшем пароля, поддерживает все символы Unicode и длину пароля вплоть до 256 символов. С LM, которому уже более 20 лет, ситуация гораздо прозаичнее. У него два больших недостатка. Первый — пароль разбивается на две части, каждая по 7 символов, которые и шифруются по отдельности (максимальная длина пароля равна 14 символов). Если символов в пароле меньше, оставшееся место дополняется нулями. Нужно ли говорить, что намного легче подобрать 2 хэша по 7 знаков, чем один на 14? Тем более что угадав часть пароля, часто можно сделать вывод по остальным символам. Второй недостаток — LM хэш регистронезависим, так как все символы перед шифрованием приводятся к верхнему регистру. То есть password и PASSWORD для LM — один и тот же пароль. Это еще больше упрощает подбор. При аутентификации вместо самих хэшей передаются хэши хэшей, и что самое интересное, по умолчанию при ответе по сети передаются оба варианта (LM и NT).
Программы перебора паролей используют те же алгоритмы, что и ОС, хэшируя комбинацию и отправляя ее серверу. Теоретически процесс полного перебора (брутефорса) может занимать довольно много времени, но если система будет использовать LM хэш, задача становится тривиальной.
Некоторые клиентские программы могут без участия пользователя произвести NTLM аутентификацию при условии, что ее поддерживает сервер. Поэтому хэш можно получить даже при помощи telnet, просто подключившись к нужному порту. Программы, позволяющие подобрать пароли, имеются в свободном доступе — , и L0phtCrack LC5. Последнюю в открытом доступе найти нельзя, после приобретения Astake компанией Symantec она исчезла с сайта, но достаточно ввести в гугле «LC5 download», и ты найдешь нужный файл. Например, LCP может сама захватывать передаваемые по сети пакеты, или импортировать учетные записи с локального и удаленного компьютера, выполнять импорт файлов SAM, Sniff и созданных другими утилитами (LC, LCS и PwDump). Реализовано три типа атак для подбора паролей по хэшам: атака по словарю, гибридная атака по словарю и brute force.
Именно по этим причинам на смену протоколу сетевой аутентификации NTLMv1 пришел NTLMv2. Новая реализация во многом похожа на своего предшественника, но хэш образует более устойчивый к взлому алгоритм HMAC-MD5, а при запросе используется 128-разрядный ключ. Чтобы сделать невозможными некоторые атаки, в которых проигрываются ранее записанные учетные данные, в NTLMv2 введена метка времени. В доменной среде NTLMv2 применяется вместо Kerberos в ситуациях: аутентификация по IP-адресу, в рабочей группе, если клиент не принадлежит домену или текущему лесу (в том случае если не установлено доверительное отношение), и в случае невозможности использования Kerberos (например блокировка firewall). Есть еще варианты, но о них чуть дальше.
Запретить хранение LM-хэшей в Windows 2k/XP/2k3 довольно просто, для этого необходимо добавить в реестр параметр NoLMHash типа DWORD в раздел HKLM\SYSTEM\CurrentControlSet\Control\Lsa со значением 1 (подробнее о запрещении хранения LM-хэшей можно прочитать в статье KB299656). Кстати, если длина пароля более 15 символов, то сохраненный LM-хэш нельзя использовать для аутентификации, а значит, он непригоден и для взлома.
Параметр типа DWORD LMCompatibilityLevel в этом же разделе позволяет разрешить LM-аутентификацию только по запросу сервера или вообще запретить. Здесь указывается одно из 6 значений:
- 0 (по умолчанию) — использовать LM- и NT-ответы, NTLMv2 отключен;
- 1 — использовать при необходимости NTLMv2;
- 2 — только NT-ответ;
- 3 — только NTLMv2;
- 4 — отказывать контроллеру домена в LM-аутентификации;
- 5 — отказывать контроллеру домена в LM- и NT-аутентификации, только NTLMv2.
В доменной среде проще воспользоваться возможностями групповой политики (Group Policy Object), выбрав в редакторе GPO пункт «Параметры безопасности» по маршруту «Конфигурация компьютера — Конфигурация Windows — Параметры безопасности — Локальные политики» и активировав политику «Network security: Do not store LAN Manager hash value on next password change» (не хранить хэш-значения LAN Manager при следующей смене пароля). Начиная с Vista, она действует по умолчанию. Политика «Network Security: LAN Manager authentication level» определяет настройки NTLM, установив ее в «NTLM2 responses only», можно запретить использование LM и NTLMv1.
В Vista и выше LM хэши и NTLMv1 также поддерживаются, параметр LmCompatibilityLevel установлен в 3, то есть по умолчанию для не доменной аутентификации используется NTLMv2, а политики запрещают их использование. Использование NTLM в доменной среде определяет политика «Network Security: Restrict NTLM: NTLM authentication for this domain», по умолчанию в Win2k8R2 она не установлена. Если в сети нет клиентов с устаревшими системами, ее можно переключить в «Deny all», полностью запретив использование этого протокола. Как вариант, при помощи этого параметра можно запретить NTLM при доступе к серверу домена или учетной записи.
Теперь, когда ты все знаешь об особенностях аутентификации пользователя в AD, разберем, как можно усложнить жизнь потенциальному взломщику. Некоторые советы тебе, возможно, покажутся банальными, но опыт показывает, что придерживаются их далеко не все. В первую очередь следует изменить установленный по умолчанию логин администратора домена: «Конфигурация компьютера — Параметры Windows — Параметры безопасности — Локальные политики — Параметры безопасности — Учетные записи: Переименование учетной записи администратора» или во вкладке «Active Directory — пользователи и компьютеры». То же самое проделываем и с гостевой учетной записью (если таковая используется, по умолчанию она отключена). После этого не забываем отслеживать попытки использования этих логинов в программах аудита, обнаружив неладное, бьем тревогу. Нападающему в этом случае придется пройти полный путь, то есть подбирать и логин, и пароль, кроме того, у админа появится больше информации для блокировки таких попыток. Пароль должен быть достаточно сложным, сочетать в себе буквы (в разных регистрах), цифры, а также спецсимволы.
Часто нападающий для поиска объекта для атаки ориентируется на описание учетной записи, поэтому следует удалить или изменить описание админских учеток, чтобы усложнить ему поиск. Взамен создаем несколько ложных учетных записей с описанием «Администратор», но без каких-либо прав, и контролируем попытки доступа к ним.
Более кардинальным решением является отключение учетной записи администратора. Это можно сделать при помощи GPO политики «Учетные записи: Состояние учетной записи администратора», тем более что она автоматически включается при запуске системы в безопасном режиме. Учитывая важность учетной записи администратора, ее нужно использовать только при первоначальных настройках. Хорошим решением является создание двух дополнительных учеток: для выполнения задач администрирования и для повседневной работы (веб-серфинг, почта, аська, ведение документации и т.д.)
По умолчанию в гостевом аккаунте пароль не используется, это также может стать проблемой. Поэтому обязательно устанавливаем его. Всем, кому будет нужен гостевой вход, эту информацию смогут получить у админа.
Часто почтовый адрес пользователя совпадает с его логином, то есть может быть использован при попытке взлома. Злоумышленнику собрать базу таких логинов очень просто, достаточно произвести DHA атаку (Directory Harvest Attack) при помощи специальной программы, генерирующей набор e-mail адресов и отправляющей на них проверочные сообщения. Если SMTP-сервер подтверждает прием сообщения для такого адреса (250 Recipient OK), то он считается действующим. Многие почтовые серверы имеют функции, обеспечивающие защиту от DNA атаки. Например, в Exchange Server имеется параметр «SMTP Tarpitting» для установки случайного времени задержки при ответе на команду RCPT TO во время SMTP запроса, что затрудняет сбор действующих адресов с домена.
Не смотря на то, что на сегодня Kerberos признан самый безопасным механизмом аутентификации, его реализации далеко не безгрешны. Так версия Kerberos в Win2k позволяла устроить UDP-шторм в сети, поскольку сервер отвечал на любые UDP-пакеты, направленные в 464 порт (Kerberos), кроме этого, возможно было вызвать переполнение стека при некоторых запросах.
Чтобы системы от Win2k3 и ниже для пересылки пакетов Kerberos вместо UDP использовали TCP, следует установить параметр реестра MaxPacketSize в значение 1 (DWORD), он находится в разделе HKLM\System\CurrentControlSet\Control\Lsa\Kerberos\Parameters.
Еще одна проблема связана с тем, что если пользователь является членом нескольких групп или атрибут sidHistory, показывающий миграцию пользователя в домене, имеет большой размер, то билет (Ticket Granting Ticket, TGT) может превысить установленный по умолчанию лимит в 12000 бит, и попытка аутентификации при помощи Kerberos закончится неудачей, вместо него будет задействован NTLM. Причем последняя ошибка характерна не только для Win2k3 и предыдущих версий, как это описано на странице , но появляется при некоторых условиях и в Win2k8. Недостаточный и фиксированный размер билета дает возможность проведения DOS атаки, результатом которой является отказ в регистрации пользователя с учетными правами администратора. Правда, для такой атаки необходимо иметь права по управлению группами.
Чтобы избежать подобной ситуации, следует увеличить размер токена, установив максимальное значение 65535 для параметра реестра MaxTokenSize (REG_DWORD), или использовать формулу для расчета, описанную в бюллетене KB327825. Также следует удалить sidHistory, чтобы освободить место в билете, это можно проделать при помощи VBS скрипта, взятого с .
В Kerberos версии 5.0, на основе которого построен Kerberos в Windows от 2k, для получения билета используется механизм предварительной аутентификации (pre-authentication), в ходе которой клиент отсылает на сервер: логин, домен и отметку времени, зашифрованные посредством секретного ключа, созданного на основе пароля. Знание метки времени позволяет программе (Kerberos Password Crack) расшифровать данные для входа. Сам KerbCrack может запускаться во всех ОС Windows на ядре NT, включая Vista, и состоит из двух программ: снифера и расшифровщика.
В реализациях Kerberos до Win2k3 включительно для шифрования используются алгоритмы СРС-32, MD4, MD5 и DES. Начиная с Vista, в этом списке появился более надежный AES 128/256, что сделало применение KerbCrack неэффективным. Если для аутентификации применяются смарт-карты, то в сеансе предварительной аутентификации для шифрования используется закрытый ключ пользователя, поэтому чтобы избежать перехвата, такой метод регистрации является предпочтительным. Как вариант, можно зашифровать трафик при помощи VPN, например IPsec. И наконец, использовав политику «Network Security: Configure encryption types allowed for Kerberos», можно жестко установить используемые Kerberos алгоритмы шифрования, запретив устаревший DES.
Следует также добавить, что в Win2k8 появился новый параметр «Allow Cryptography algorithms compatible with Windows NT 4.0″, по умолчанию он не установлен — «Not Configured», а значит, все клиенты, не поддерживающие новые и более защищенные алгоритмы, не смогут подсоединиться к домену. Если при подключении к Win2k8 домену появляются ошибки, описанные в , это параметр следует включить. Но цена такого шага – снижение безопасности. В крайнем случае, в Win2k8 в свойствах отдельной учетной записи, во вкладке Account, можно разрешить использование DES/AES и отключить предварительную аутентификацию. Здесь же находится параметр «Smart Card Is Required for Interactive Logon», установка которого требует использования смарт-карты при входе. По умолчанию эта политика отключена.
Как видишь, атаки, позволяющие перехватить и расшифровать пароль, в новых версиях системы практически сведены на нет. Только в том случае, когда в сети присутствуют клиенты, работающие под управлением старых версий Windows или других ОС, не поддерживающих новые параметры протокола, существует вероятность перехвата пароля.
Врезка: Порты Active Directory
Active Directory для взаимодействия с клиентскими системами использует следующие порты:
- 88 (UDP и TCP) — Kerberos аутентификация;
- 53 (UDP и TCP) – DNS запрос;
- 135 (UDP и TCP) – взаимодействие между КД и КД и клиентами;
- 138 (UDP) и 139 (TCP), 445 (UDP и TCP) – служба репликации файлов, или 135 и > 1024 в DFS Replication;
- 389 (UDP и TCP)/ 636 (UDP и TCP) – LDAP/LDAP-SSL запросы;
- 464 (UDP и TCP) – установка пароля Kerberos;
- 3268 и 3269 (TCP) — доступ к глобальному каталогу (Global Catalog, GC).
Врезка: Тонкая настройка Kerberos
В большинстве случаев параметры настройки Kerberos, заданные по умолчанию, являются оптимальными, но, используя политики безопасности домена, их можно несколько ужесточить, тем самым еще более обезопасив свою сеть. Все настройки, относящиеся к Kerberos, находятся в пункте «Domain Security Policy — Account Policies» (Политика безопасности домена — Политики учетных записей).
INFO
-
По умолчанию в системах от Vista и выше для не доменной аутентификации используется NTLMv2.
-
Чтобы NTLMv2 могли использовать клиенты Win98, на них следует установить специальный Directory Service Client.
-
При правильных настройках и постоянном аудите происходящих событий риск нарушения работоспособности AD можно свести к минимуму.
WWW
-
Статья «NTLM’s time has passed» на .
-
Программа John the Ripper — .
-
Программа LCP — .
-
Веб-интерфейс к AD, написанный на PHP: .
WARNING
-
Многие дыры живут в Windows еще со времен 95/NT, благополучно перекочевывая из релиза в релиз, и все для того, чтобы системы мирно сосуществовали друг с другом.
Статья опубликована в июльском номере журнала «Xakep» за 2009 год.





