hacktricks/linux-hardening/freeipa-pentesting.md

215 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# FreeIPA Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}
## Basic Information
FreeIPA є відкритим **альтернативою** Microsoft Windows **Active Directory**, в основному для **Unix** середовищ. Він поєднує в собі повний **LDAP каталог** з MIT **Kerberos** Центром Розподілу Ключів для управління, подібним до Active Directory. Використовуючи систему сертифікатів Dogtag для управління сертифікатами CA та RA, він підтримує **багатофакторну** аутентифікацію, включаючи смарт-картки. SSSD інтегровано для процесів аутентифікації Unix.
## Fingerprints
### Files & Environment Variables
* Файл за адресою `/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.
### Binaries
Інструменти, такі як `ipa`, `kdestroy`, `kinit`, `klist`, `kpasswd`, `ksu`, `kswitch` та `kvno`, є центральними для управління доменами FreeIPA, обробки квитків Kerberos, зміни паролів та отримання сервісних квитків, серед інших функцій.
### Network
Надається ілюстрація, щоб зобразити типову конфігурацію сервера FreeIPA.
## Authentication
Аутентифікація в FreeIPA, використовуючи **Kerberos**, відображає таку в **Active Directory**. Доступ до ресурсів домену вимагає дійсного квитка Kerberos, який може зберігатися в різних місцях залежно від конфігурації домену FreeIPA.
### **CCACHE Ticket Files**
Файли 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**.
### Cheatsheet
Ви можете знайти більше інформації про те, як використовувати квитки в linux за наступним посиланням:
{% content-ref url="privilege-escalation/linux-active-directory.md" %}
[linux-active-directory.md](privilege-escalation/linux-active-directory.md)
{% endcontent-ref %}
## Enumeration
{% hint style="warning" %}
Ви можете виконати **перерахування** через **ldap** та інші **бінарні** інструменти, або **підключившись до веб-сторінки на порту 443 сервера FreeIPA**.
{% endhint %}
### Hosts, Users, and Groups <a href="#id-4b3b" id="id-4b3b"></a>
Можна створювати **хости**, **користувачів** та **групи**. Хости та користувачі сортуються в контейнери, звані “**Групи Хостів**” та “**Групи Користувачів**” відповідно. Це подібно до **Організаційних Одиниць** (OU).
За замовчуванням у FreeIPA сервер LDAP дозволяє **анонімні прив'язки**, і велика частина даних є перерахованою **неаутентифікованою**. Це може перерахувати всі дані, доступні неаутентифікованим:
```
ldapsearch -x
```
Щоб отримати **більше інформації**, вам потрібно використовувати **автентифіковану** сесію (перегляньте розділ Аутентифікація, щоб дізнатися, як підготувати автентифіковану сесію).
```bash
# 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"
```
З машини, приєднаної до домену, ви зможете використовувати **встановлені двійкові файли** для перерахунку домену:
```bash
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
```
{% hint style="info" %}
Користувач **admin** у **FreeIPA** є еквівалентом **domain admins** з **AD**.
{% endhint %}
### Hashes <a href="#id-482b" id="id-482b"></a>
Користувач **root** з **IPA serve**r має доступ до паролів **hashes**.
* Парольний хеш користувача зберігається як **base64** в атрибуті “**userPassword**”. Цей хеш може бути **SSHA512** (старі версії FreeIPA) або **PBKDF2\_SHA256**.
* **Nthash** пароля зберігається як **base64** в “**ipaNTHash**”, якщо система має **інтеграцію** з **AD**.
Щоб зламати ці хеші:
• Якщо freeIPA інтегровано з AD, **ipaNTHash** легко зламати: Вам слід **декодувати** **base64** -> повторно закодувати його як **ASCII** hex -> John The Ripper або **hashcat** можуть допомогти вам швидко його зламати
• Якщо використовується стара версія FreeIPA, то використовується **SSHA512**: Вам слід декодувати **base64** -> знайти SSHA512 **hash** -> John The Ripper або **hashcat** можуть допомогти вам його зламати
• Якщо використовується нова версія FreeIPA, то використовується **PBKDF2\_SHA256**: Вам слід декодувати **base64** -> знайти PBKDF2\_SHA256 -> його **довжина** 256 байт. John може працювати з 256 бітами (32 байти) -> SHA-265 використовується як псевдовипадкова функція, розмір блоку 32 байти -> ви можете використовувати лише перші 256 біт нашого PBKDF2\_SHA256 хешу -> John The Ripper або hashcat можуть допомогти вам його зламати
<figure><img src="../.gitbook/assets/image (655).png" alt=""><figcaption></figcaption></figure>
Щоб витягти хеші, вам потрібно бути **root на сервері FreeIPA**, там ви можете використовувати інструмент **`dbscan`** для їх витягування:
<figure><img src="../.gitbook/assets/image (293).png" alt=""><figcaption></figcaption></figure>
### HBAC-Rules <a href="#id-482b" id="id-482b"></a>
Це правила, які надають конкретні дозволи користувачам або хостам на ресурси (хости, сервіси, групи сервісів...)
```bash
# 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-правила. Ці правила дозволяють або обмежують виконання команд з sudo на хостах у домені. Зловмисник може потенційно визначити відповідні хости, користувачів та дозволені команди, досліджуючи ці набори правил.
```bash
# 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, щоб проілюструвати цю структуру.
Роль `Адміністратор Користувачів` має ці привілеї:
* **Адміністратори Користувачів**
* **Адміністратори Груп**
* **Адміністратори Користувачів Стадії**
За допомогою наступних команд можна перерахувати ролі, привілеї та дозволи:
```bash
# 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](https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e) ви можете знайти простий приклад того, як зловживати деякими правами для компрометації домену.
### Linikatz/LinikatzV2
* [https://github.com/Orange-Cyberdefense/LinikatzV2](https://github.com/Orange-Cyberdefense/LinikatzV2)
* [https://github.com/CiscoCXSecurity/linikatz](https://github.com/CiscoCXSecurity/linikatz)
## Privesc
### ~~створення користувача root~~
{% hint style="warning" %}
Якщо ви можете **створити нового користувача з ім'ям `root`**, ви можете видавати себе за нього, і ви зможете **SSH на будь-яку машину як root.**
**ЦЕ БУЛО ВИПРАВЛЕНО.**
{% endhint %}
Ви можете перевірити детальне пояснення в [https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b](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-iv-cve-2020-10747-7c373a1bf66b)
* [https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a](https://posts.specterops.io/attacking-freeipa-part-i-authentication-77e73d837d6a)
* [https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1](https://posts.specterops.io/attacking-freeipa-part-ii-enumeration-ad27224371e1)
* [https://www.youtube.com/watch?v=9dOu-7BTwPQ](https://www.youtube.com/watch?v=9dOu-7BTwPQ)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}