Содержание статьи
Pentest Award
Этот текст получил первое место на Pentest Award 2024 в категории «Пробив инфры». Это соревнование ежегодно проводится компанией Awillix.
FreeIPA — это платформа для управления идентификацией и доступом пользователей в сети, которая часто применяется для централизованного контроля прав и аутентификации. По сути, Active Directory, но для Linux.
Когда я в рамках пентеста получил учетную запись из домена на FreeIPA, оказалось, что прав у учетки почти нет. Однако выяснилось, что с помощью утилиты kvno можно запросить тикеты TGS для любого пользователя в домене FreeIPA, хотя обычные инструменты, такие как Impacket, в этом случае не работали. Вспомнив про метод подбора паролей, известный как Kerberoasting, я запустил hashcat, но и в этом случае ничего не вышло — даже при известном пароле для моего пользователя.
Тем не менее возможность получать TGS для любого пользователя домена заинтриговала меня и подтолкнула к дальнейшему исследованию.
warning
Статья имеет ознакомительный характер и предназначена для специалистов по безопасности, проводящих тестирование в рамках контракта. Автор и редакция не несут ответственности за любой вред, причиненный с применением изложенной информации. Распространение вредоносных программ, нарушение работы систем и нарушение тайны переписки преследуются по закону.
Ищем уязвимость и пишем PoC
Сначала попробуем поискать, что вообще пишут про это.
Вот, например, Ли Чаголла‑Кристенсен пишет, что FreeIPA не позволяет создавать сервисы с паролем, заданным пользователем (в AD это соответствует учетной записи с SPN). Обычные учетные записи не могут использоваться как сервисы Kerberos, что делает невозможным применение атаки Kerberoasting. Это должно обеспечивать высокий уровень безопасности по умолчанию.
Что ж, раз по теме ничего нет, начинаем свое исследование. Я развернул тестовую инфраструктуру и начал изучать MIT Kerberos (который входит в состав FreeIPA). Важно было понять, как он интегрируется с 389 Directory Server — местным аналогом Active Directory.
Мне удалось установить, что при смене пароля пользователя меняется его ключ AES. Однако если у пользователей одинаковые пароли, то ключи будут разные. Значит, все дело в соли (в AD все знают, что это домен плюс имя пользователя).
После долгого исследования исходников (так как документации нигде нет) и просмотра трафика в Wireshark я установил, что для каждого пользователя во время его заведения в домен используется произвольная соль и при получении TGT-билета в первом ответе с ошибкой о необходимости преаутентификации она добавляется в специальное поле. Также ее можно обнаружить при использовании утилиты kinit с локальной переменной KRB5_TRACE
.
Как видишь, пароль может вообще состоять из произвольных символов, в том числе с пробелами и обратными слешами. Также я обнаружил, что FreeIPA работает только с AES256, что грустно.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее