FreeIPA Pentesting
Reading time: 8 minutes
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Основна інформація
FreeIPA є відкритим альтернативою Microsoft Windows Active Directory, в основному для Unix середовищ. Він поєднує в собі повний LDAP каталог з MIT Kerberos Центром Розподілу Ключів для управління, подібним до Active Directory. Використовуючи систему сертифікатів Dogtag для управління сертифікатами CA та RA, він підтримує багатофакторну аутентифікацію, включаючи смарт-карти. SSSD інтегровано для процесів аутентифікації Unix.
Відбитки
Файли та змінні середовища
- Файл за адресою
/etc/krb5.conf
є місцем, де зберігається інформація клієнта Kerberos, необхідна для реєстрації в домені. Це включає місця розташування KDC та серверів адміністраторів, налаштування за замовчуванням та відображення. - Системні налаштування за замовчуванням для клієнтів та серверів IPA встановлюються у файлі, розташованому за адресою
/etc/ipa/default.conf
. - Хости в домені повинні мати файл
krb5.keytab
за адресою/etc/krb5.keytab
для процесів аутентифікації. - Різні змінні середовища (
KRB5CCNAME
,KRB5_KTNAME
,KRB5_CONFIG
,KRB5_KDC_PROFILE
,KRB5RCACHETYPE
,KRB5RCACHEDIR
,KRB5_TRACE
,KRB5_CLIENT_KTNAME
,KPROP_PORT
) використовуються для вказівки на конкретні файли та налаштування, що стосуються аутентифікації Kerberos.
Бінарні файли
Інструменти, такі як ipa
, kdestroy
, kinit
, klist
, kpasswd
, ksu
, kswitch
та kvno
, є центральними для управління доменами FreeIPA, обробки квитків Kerberos, зміни паролів та отримання сервісних квитків, серед інших функцій.
Мережа
Надається ілюстрація, щоб зобразити типову конфігурацію сервера FreeIPA.
Аутентифікація
Аутентифікація в FreeIPA, використовуючи Kerberos, відображає таку в Active Directory. Доступ до ресурсів домену вимагає дійсного квитка Kerberos, який може зберігатися в різних місцях залежно від конфігурації домену FreeIPA.
CCACHE Квиткові файли
Файли CCACHE, зазвичай зберігаються в /tmp
з правами 600, є бінарними форматами для зберігання облікових даних Kerberos, важливими для аутентифікації без відкритого пароля користувача завдяки їх портативності. Парсинг квитка CCACHE можна виконати за допомогою команди klist
, а повторне використання дійсного квитка CCACHE передбачає експорт KRB5CCNAME
до шляху файлу квитка.
Unix Keyring
Альтернативно, квитки CCACHE можуть зберігатися в ключовій системі Linux, що пропонує більше контролю над управлінням квитками. Обсяг зберігання квитків варіюється (KEYRING:name
, KEYRING:process:name
, KEYRING:thread:name
, KEYRING:session:name
, KEYRING:persistent:uidnumber
), при цьому klist
здатний парсити цю інформацію для користувача. Однак повторне використання квитка CCACHE з ключової системи Unix може бути складним, з такими інструментами, як Tickey, доступними для витягування квитків Kerberos.
Keytab
Файли keytab, що містять принципали Kerberos та зашифровані ключі, є критично важливими для отримання дійсних квитків на надання квитків (TGT) без необхідності пароля принципала. Парсинг та повторне використання облікових даних з файлів keytab можна легко виконати за допомогою утиліт, таких як klist
, та скриптів, таких як KeytabParser.
Чек-лист
Ви можете знайти більше інформації про те, як використовувати квитки в Linux за наступним посиланням:
Перерахування
warning
Ви можете виконати перерахування через ldap та інші бінарні інструменти, або підключившись до веб-сторінки на порту 443 сервера FreeIPA.
Хости, Користувачі та Групи
Можливо створити хости, користувачі та групи. Хости та користувачі сортуються в контейнери, звані “Групи Хостів” та “Групи Користувачів” відповідно. Це схоже на Організаційні Одиниці (OU).
За замовчуванням у FreeIPA сервер LDAP дозволяє анонімні прив'язки, і велика частина даних є перерахованою неаутентифікованою. Це може перерахувати всі дані, доступні без аутентифікації:
ldapsearch -x
Щоб отримати більше інформації, вам потрібно використовувати автентифіковану сесію (перегляньте розділ Аутентифікація, щоб дізнатися, як підготувати автентифіковану сесію).
# Get all users of domain
ldapsearch -Y gssapi -b "cn=users,cn=compat,dc=domain_name,dc=local"
# Get users groups
ldapsearch -Y gssapi -b "cn=groups,cn=accounts,dc=domain_name,dc=local"
# Get all the hosts
ldapsearch -Y gssapi -b "cn=computers,cn=accounts,dc=domain_name,dc=local"
# Get hosts groups
ldapsearch -Y gssapi -b "cn=hostgroups,cn=accounts,dc=domain_name,dc=local"
З машини, приєднаної до домену, ви зможете використовувати встановлені двійкові файли для перерахунку домену:
ipa user-find
ipa usergroup-find
ipa host-find
ipa host-group-find
-------------------
ipa user-show <username> --all
ipa usergroup-show <user group> --all
ipa host-find <host> --all
ipa hostgroup-show <host group> --all
note
Користувач admin у FreeIPA є еквівалентом domain admins з AD.
Hashes
Користувач root з IPA server має доступ до паролів hashes.
- Парольний хеш користувача зберігається як base64 в атрибуті “userPassword”. Цей хеш може бути SSHA512 (старі версії FreeIPA) або PBKDF2_SHA256.
- Nthash пароля зберігається як base64 в “ipaNTHash”, якщо система має integration з AD.
Щоб зламати ці хеші:
• Якщо freeIPA інтегровано з AD, ipaNTHash легко зламати: Вам слід decode base64 -> повторно закодувати його як ASCII hex -> John The Ripper або hashcat можуть допомогти вам швидко його зламати
• Якщо використовується стара версія FreeIPA, то використовується SSHA512: Вам слід декодувати base64 -> знайти SSHA512 hash -> John The Ripper або hashcat можуть допомогти вам його зламати
• Якщо використовується нова версія FreeIPA, то використовується PBKDF2_SHA256: Вам слід декодувати base64 -> знайти PBKDF2_SHA256 -> його length становить 256 байт. John може працювати з 256 бітами (32 байти) -> SHA-265 використовується як псевдовипадкова функція, розмір блоку становить 32 байти -> ви можете використовувати лише перші 256 біт нашого PBKDF2_SHA256 хешу -> John The Ripper або hashcat можуть допомогти вам його зламати
.png)
Щоб витягти хеші, вам потрібно бути root на сервері FreeIPA, там ви можете використовувати інструмент dbscan
для їх витягування:
.png)
HBAC-Rules
Це правила, які надають конкретні дозволи користувачам або хостам на ресурси (хости, сервіси, групи сервісів...)
# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=hbac,dc=domain_name,dc=local"
# Using ipa
ipa hbacrule-find
# Show info of rule
ipa hbacrule-show <hbacrule> --all
Sudo-Rules
FreeIPA забезпечує централізований контроль над sudo permissions через sudo-rules. Ці правила дозволяють або обмежують виконання команд з sudo на хостах у домені. Зловмисник може потенційно виявити відповідні хости, користувачів та дозволені команди, досліджуючи ці набори правил.
# Enumerate using ldap
ldapsearch -Y gssapi -b "cn=sudorules,cn=sudo,dc=domain_name,dc=local"
# Using ipa
ipa sudorule-find
# Show info of rule
ipa sudorule-show <sudorule> --all
Контроль доступу на основі ролей
Роль складається з різних привілеїв, кожне з яких охоплює колекцію дозволів. Ці ролі можуть бути призначені Користувачам, Групам Користувачів, Хостам, Групам Хостів та Сервісам. Наприклад, розглянемо роль за замовчуванням “Адміністратор Користувачів” у FreeIPA, щоб проілюструвати цю структуру.
Роль Адміністратор Користувачів
має ці привілеї:
- Адміністратори Користувачів
- Адміністратори Груп
- Адміністратори Користувачів Сцени
За допомогою наступних команд можна перерахувати ролі, привілеї та дозволи:
# Using ldap
ldapsearch -Y gssapi -b "cn=roles,cn=accounts,dc=westeros,dc=local"
# Using ipa binary
ipa role-find
ipa role-show <role> --all
ipa privilege-find
ipa privilege-show <privilege> --all
ipa permission-find
ipa permission-show <permission> --all
Attack Scenario Example
В https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e ви можете знайти простий приклад того, як зловживати деякими правами для компрометації домену.
Linikatz/LinikatzV2
Privesc
створення користувача root
warning
Якщо ви можете створити нового користувача з ім'ям root
, ви можете видавати себе за нього і зможете SSH на будь-яку машину як root.
ЦЕ БУЛО ВИПРАВЛЕНО.
Ви можете перевірити детальне пояснення в https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
References
- https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
- https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a
- https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1
- https://www.youtube.com/watch?v=9dOu-7BTwPQ
tip
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.