hacktricks/linux-hardening/freeipa-pentesting.md

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
{% endhint %}

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

{% 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
{% endhint %}