12 KiB
FreeIPA Pentesting
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Podstawowe informacje
FreeIPA to otwarte źródło alternatywa dla Microsoft Windows Active Directory, głównie dla środowisk Unix. Łączy kompletny katalog LDAP z MIT Kerberos Key Distribution Center do zarządzania podobnego do Active Directory. Wykorzystując system Dogtag Certificate System do zarządzania certyfikatami CA i RA, wspiera uwierzytelnianie wieloskładnikowe, w tym karty inteligentne. SSSD jest zintegrowany z procesami uwierzytelniania Unix.
Odciski
Pliki i zmienne środowiskowe
- Plik w
/etc/krb5.conf
to miejsce, gdzie przechowywane są informacje klienta Kerberos, niezbędne do rejestracji w domenie. Obejmuje to lokalizacje KDC i serwerów administracyjnych, ustawienia domyślne i mapowania. - Domyślne ustawienia dla klientów i serwerów IPA są ustawione w pliku znajdującym się w
/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 na konkretne pliki i ustawienia związane z uwierzytelnianiem Kerberos.
Binaries
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 serwisowych, wśród innych funkcji.
Sieć
Przedstawiono ilustrację, aby zobrazować typową konfigurację serwera FreeIPA.
Uwierzytelnianie
Uwierzytelnianie w FreeIPA, wykorzystujące Kerberos, odzwierciedla to 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, zazwyczaj przechowywane w /tmp
z uprawnieniami 600, są formatami binarnymi do przechowywania poświadczeń Kerberos, ważnymi dla uwierzytelniania bez hasła w postaci tekstu jawnego użytkownika z powodu ich przenośności. Analizowanie 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, bilety CCACHE mogą być przechowywane w kluczyku Linux, oferując większą kontrolę nad zarządzaniem biletami. Zakres przechowywania biletów różni się (KEYRING:name
, KEYRING:process:name
, KEYRING:thread:name
, KEYRING:session:name
, KEYRING:persistent:uidnumber
), a klist
jest w stanie analizować te informacje dla użytkownika. Jednak ponowne użycie biletu CCACHE z kluczyka Unix może stwarzać wyzwania, a narzędzia takie jak Tickey są dostępne do ekstrakcji biletów Kerberos.
Keytab
Pliki keytab, zawierające zasady Kerberos i zaszyfrowane klucze, są kluczowe do uzyskania ważnych biletów przyznawania biletów (TGT) bez potrzeby znajomości hasła zasady. Analizowanie i ponowne użycie poświadczeń z plików keytab można łatwo wykonać za pomocą narzędzi takich jak klist
i skryptów takich jak KeytabParser.
Cheatsheet
Możesz znaleźć więcej informacji na temat korzystania z biletów w systemie Linux w następującym linku:
{% content-ref url="privilege-escalation/linux-active-directory.md" %} linux-active-directory.md {% endcontent-ref %}
Enumeracja
{% hint style="warning" %} Możesz przeprowadzić enumerację za pomocą ldap i innych narzędzi 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 w kontenerach zwanych “Grupami Hostów” i “Grupami Użytkowników” odpowiednio. Są one podobne do Jednostek Organizacyjnych (OU).
Domyślnie w FreeIPA serwer LDAP pozwala na anonimowe połączenia, a duża część danych jest enumerowana bez uwierzytelnienia. To może enumerować wszystkie dane dostępne bez uwierzytelnienia:
ldapsearch -x
Aby uzyskać więcej informacji, musisz użyć uwierzytelnionej sesji (sprawdź sekcję Uwierzytelnianie, 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 maszyny dołączonej do domeny będziesz mógł użyć zainstalowanych binarek do enumeracji 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 z AD. {% endhint %}
Hashes
Użytkownik root z serwera IPA ma dostęp do hashy haseł.
- Hash hasła użytkownika jest przechowywany jako base64 w atrybucie “userPassword”. Ten hash może być SSHA512 (stare wersje FreeIPA) lub PBKDF2_SHA256.
- Nthash hasła jest przechowywany jako base64 w “ipaNTHash”, jeśli system ma integrację z AD.
Aby złamać te hashe:
• Jeśli freeIPA jest zintegrowany z AD, ipaNTHash jest łatwy do złamania: Należy dekodować base64 -> ponownie zakodować jako ASCII hex -> John The Ripper lub hashcat mogą pomóc w szybkim złamaniu
• Jeśli używana jest stara wersja FreeIPA, to używany jest SSHA512: Należy dekodować base64 -> znaleźć hash SSHA512 -> John The Ripper lub hashcat mogą pomóc w złamaniu
• Jeśli używana jest nowa wersja FreeIPA, to używany jest PBKDF2_SHA256: Należy dekodować base64 -> znaleźć PBKDF2_SHA256 -> jego długość to 256 bajtów. John może pracować z 256 bitami (32 bajty) -> SHA-265 używane jako funkcja pseudolosowa, rozmiar bloku to 32 bajty -> można użyć tylko pierwszych 256 bitów naszego hasha PBKDF2_SHA256 -> John The Ripper lub hashcat mogą pomóc w złamaniu
Aby wyodrębnić hashe, musisz być rootem na serwerze FreeIPA, tam możesz użyć narzędzia dbscan
, aby je wyodrębnić:
HBAC-Rules
Są to zasady, które przyznają określone uprawnienia użytkownikom lub hostom do zasobów (hosty, usługi, grupy 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
Sudo-Rules
FreeIPA umożliwia centralne zarządzanie uprawnieniami sudo za pomocą reguł sudo. Reguły te pozwalają lub ograniczają wykonywanie poleceń z sudo na hostach w obrębie domeny. Atakujący może potencjalnie 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 zezwolenia. 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ę „Administrator Użytkowników” w FreeIPA, aby zilustrować tę strukturę.
Rola Administrator Użytkowników
ma te uprawnienia:
- Administratorzy Użytkowników
- Administratorzy Grup
- Administratorzy Użytkowników Etapowych
Za pomocą następujących poleceń można wyliczyć role, uprawnienia i zezwolenia:
# 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 można znaleźć prosty przykład, jak nadużyć niektóre uprawnienia, aby skompromitować domenę.
Linikatz/LinikatzV2
Privesc
tworzenie użytkownika root
{% hint style="warning" %}
Jeśli możesz utworzyć nowego użytkownika o nazwie root
, możesz się nim podszyć i będziesz mógł SSH do dowolnej maszyny jako root.
TO ZOSTAŁO POPRAWIONE. {% endhint %}
Możesz sprawdzić szczegółowe wyjaśnienie w https://posts.specterops.io/attacking-freeipa-part-iv-cve-2020-10747-7c373a1bf66b
Odniesienia
- 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
{% hint style="success" %}
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Podziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.