13 KiB
Testowanie penetracyjne FreeIPA
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź SUBSCRIPTION PLANS!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów GitHub.
Podstawowe informacje
FreeIPA to otwarte oprogramowanie alternatywne dla Microsoft Windows Active Directory, głównie dla środowisk Unixowych. Łączy ono kompletny katalog LDAP z MIT Kerberos Key Distribution Center do zarządzania podobnego do Active Directory. Wykorzystuje Dogtag Certificate System do zarządzania certyfikatami CA i RA, obsługuje uwierzytelnianie wieloczynnikowe, w tym karty inteligentne. SSSD jest zintegrowane do procesów uwierzytelniania Unix.
Odciski palców
Pliki i zmienne środowiskowe
- Plik
/etc/krb5.conf
przechowuje informacje klienta Kerberos, niezbędne do zapisania w domenie. Zawiera on lokalizacje KDC i serwerów administracyjnych, domyślne ustawienia i mapowania. - Domyślne ustawienia dla klientów i serwerów IPA są ustawiane w pliku
/etc/ipa/default.conf
. - Hosty w domenie muszą mieć plik
krb5.keytab
w/etc/krb5.keytab
do procesów uwierzytelniania. - Różne zmienne środowiskowe (
KRB5CCNAME
,KRB5_KTNAME
,KRB5_CONFIG
,KRB5_KDC_PROFILE
,KRB5RCACHETYPE
,KRB5RCACHEDIR
,KRB5_TRACE
,KRB5_CLIENT_KTNAME
,KPROP_PORT
) są używane do wskazywania konkretnych plików i ustawień związanych z uwierzytelnianiem Kerberos.
Binaria
Narzędzia takie jak ipa
, kdestroy
, kinit
, klist
, kpasswd
, ksu
, kswitch
i kvno
są kluczowe do zarządzania domenami FreeIPA, obsługi biletów Kerberos, zmiany haseł i uzyskiwania biletów usług, wśród innych funkcji.
Sieć
Przedstawiono ilustrację typowego zestawienia serwera FreeIPA.
Uwierzytelnianie
Uwierzytelnianie w FreeIPA, wykorzystujące Kerberos, jest podobne do uwierzytelniania w Active Directory. Dostęp do zasobów domeny wymaga ważnego biletu Kerberos, który może być przechowywany w różnych lokalizacjach w zależności od konfiguracji domeny FreeIPA.
Pliki biletów CCACHE
Pliki CCACHE, przechowywane zwykle w /tmp
z uprawnieniami 600, są formatami binarnymi do przechowywania poświadczeń Kerberos, ważnych dla uwierzytelniania bez hasła tekstowego użytkownika ze względu na ich przenośność. Parsowanie biletu CCACHE można wykonać za pomocą polecenia klist
, a ponowne użycie ważnego biletu CCACHE polega na wyeksportowaniu KRB5CCNAME
do ścieżki pliku biletu.
Unix Keyring
Alternatywnie, biletów CCACHE można przechowywać w keyringu Linux, co daje większą kontrolę nad zarządzaniem biletami. Zakres przechowywania biletów jest różny (KEYRING:nazwa
, KEYRING:proces:nazwa
, KEYRING:wątek:nazwa
, KEYRING:sesja:nazwa
, KEYRING:trwały:uidnumber
), a klist
jest w stanie analizować te informacje dla użytkownika. Jednak ponowne użycie biletu CCACHE z keyringu Unix może stanowić wyzwanie, a dostępne są narzędzia takie jak Tickey do wyodrębniania biletów Kerberos.
Keytab
Pliki keytab zawierające podmioty Kerberos i zaszyfrowane klucze są kluczowe do uzyskiwania ważnych biletów TGT bez konieczności podawania hasła podmiotu. Parsowanie i ponowne użycie poświadczeń z plików keytab można łatwo wykonać za pomocą narzędzi takich jak klist
i skryptów, na przykład KeytabParser.
Cheatsheet
Więcej informacji na temat korzystania z biletów w systemie Linux znajdziesz pod poniższym linkiem:
{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}
Wyliczanie
{% hint style="warning" %} Możesz przeprowadzić wyliczanie za pomocą narzędzi ldap i innych binarnych, lub łącząc się z stroną internetową na porcie 443 serwera FreeIPA. {% endhint %}
Hosty, Użytkownicy i Grupy
Możliwe jest tworzenie hostów, użytkowników i grup. Hosty i użytkownicy są sortowani do kontenerów o nazwie "Grupy Hostów" i "Grupy Użytkowników" odpowiednio. Są one podobne do Jednostek Organizacyjnych (OU).
Domyślnie w FreeIPA serwer LDAP umożliwia anonimowe wiązanie, a duża ilość danych jest wyliczalna bez uwierzytelnienia. Można to wyliczyć wszystkie dostępne dane bez uwierzytelnienia:
ldapsearch -x
Aby uzyskać więcej informacji, musisz użyć uwierzytelnionej sesji (sprawdź sekcję uwierzytelniania, aby dowiedzieć się, jak przygotować uwierzytelnioną sesję).
# 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"
Z połączonego z domeną komputera będziesz mógł użyć zainstalowanych binariów do wyliczenia domeny:
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" %} Użytkownik admin w FreeIPA jest odpowiednikiem administratorów domeny w AD. {% endhint %}
Skróty
Użytkownik root z serwera IPA ma dostęp do skrótów haseł.
- Skrót hasła użytkownika jest przechowywany jako base64 w atrybucie "userPassword". Ten skrót może być SSHA512 (w starszych wersjach FreeIPA) lub PBKDF2_SHA256.
- Nthash hasła przechowywany jest jako base64 w "ipaNTHash", jeśli system ma integrację z AD.
Aby złamać te skróty:
• Jeśli FreeIPA jest zintegrowane z AD, ipaNTHash jest łatwy do złamania: Należy zdekodować base64 -> przekodować go jako ASCII hex -> John The Ripper lub hashcat mogą pomóc w szybkim złamaniu go
• Jeśli używana jest starsza wersja FreeIPA, używany jest SSHA512: Należy zdekodować base64 -> znaleźć skrót SSHA512 -> John The Ripper lub hashcat mogą pomóc w złamaniu go
• Jeśli używana jest nowa wersja FreeIPA, używany jest PBKDF2_SHA256: Należy zdekodować base64 -> znaleźć PBKDF2_SHA256 -> jego długość wynosi 256 bajtów. John może pracować z 256 bitami (32 bajty) -> SHA-265 używane jako funkcja pseudolosowa, rozmiar bloku wynosi 32 bajty -> można użyć tylko pierwszych 256 bitów naszego skrótu PBKDF2_SHA256 -> John The Ripper lub hashcat mogą pomóc w złamaniu go
Aby wyodrębnić skróty, musisz być rootem na serwerze FreeIPA, tam możesz użyć narzędzia dbscan
do ich wyodrębnienia:
Reguły HBAC
Są to reguły, które przyznają określone uprawnienia użytkownikom lub hostom w odniesieniu do zasobów (hostów, usług, grup usług...).
# 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
Reguły Sudo
FreeIPA umożliwia scentralizowaną kontrolę nad uprawnieniami sudo za pomocą reguł sudo. Te reguły pozwalają lub ograniczają wykonywanie poleceń z sudo na hostach w domenie. Atakujący potencjalnie mógłby zidentyfikować odpowiednie hosty, użytkowników i dozwolone polecenia, analizując te zestawy reguł.
# 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
Kontrola dostępu oparta na rolach
Rola składa się z różnych uprawnień, z których każde obejmuje zbiór uprawnień. Te role mogą być przypisane do użytkowników, grup użytkowników, hostów, grup hostów i usług. Na przykład, rozważmy domyślną rolę "Administratora użytkownika" w FreeIPA, aby zobrazować tę strukturę.
Rola Administratora użytkownika
ma następujące uprawnienia:
- Administratorzy użytkowników
- Administratorzy grup
- Administratorzy etapu użytkowników
Za pomocą poniższych poleceń można wyliczyć role, uprawnienia i uprawnienia:
# 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
Przykład scenariusza ataku
W https://posts.specterops.io/attacking-freeipa-part-iii-finding-a-path-677405b5b95e znajdziesz prosty przykład, jak wykorzystać pewne uprawnienia do skompromitowania domeny.
Linikatz/LinikatzV2
Podwyższanie uprawnień
Tworzenie użytkownika root
{% hint style="warning" %}
Jeśli możesz utworzyć nowego użytkownika o nazwie root
, możesz go podszyć i będziesz mógł SSH do dowolnej maszyny jako root.
TO ZOSTAŁO NAPRAWIONE. {% endhint %}
Możesz sprawdzić szczegółowe wyjaśnienie pod adresem https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
Odwołania
- 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
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.