macOS Red Teaming

Reading time: 9 minutes

tip

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) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Wykorzystywanie MDM

  • JAMF Pro: jamf checkJSSConnection
  • Kandji

Jeśli uda ci się skompromentować dane logowania administratora do platformy zarządzania, możesz potencjalnie skompromitować wszystkie komputery poprzez dystrybucję swojego złośliwego oprogramowania na maszynach.

Dla red teamingu w środowiskach MacOS zaleca się posiadanie pewnej wiedzy na temat działania MDM:

macOS MDM

Używanie MDM jako C2

MDM będzie miało uprawnienia do instalowania, zapytywania lub usuwania profili, instalowania aplikacji, tworzenia lokalnych kont administratorów, ustawiania hasła firmware, zmiany klucza FileVault...

Aby uruchomić własne MDM, musisz podpisać swój CSR przez dostawcę, co możesz spróbować uzyskać z https://mdmcert.download/. Aby uruchomić własne MDM dla urządzeń Apple, możesz użyć MicroMDM.

Jednak aby zainstalować aplikację na zarejestrowanym urządzeniu, nadal musisz, aby była podpisana przez konto dewelopera... jednak po rejestracji w MDM urządzenie dodaje certyfikat SSL MDM jako zaufane CA, więc teraz możesz podpisać cokolwiek.

Aby zarejestrować urządzenie w MDM, musisz zainstalować plik mobileconfig jako root, który można dostarczyć za pomocą pliku pkg (możesz go skompresować w zip, a po pobraniu z safari zostanie on rozpakowany).

Mythic agent Orthrus używa tej techniki.

Wykorzystywanie JAMF PRO

JAMF może uruchamiać niestandardowe skrypty (skrypty opracowane przez sysadmina), natywne ładunki (tworzenie lokalnych kont, ustawianie hasła EFI, monitorowanie plików/procesów...) oraz MDM (konfiguracje urządzeń, certyfikaty urządzeń...).

Samo-rejestracja JAMF

Przejdź do strony takiej jak https://<company-name>.jamfcloud.com/enroll/, aby sprawdzić, czy mają włączoną samo-rejestrację. Jeśli tak, może poprosić o dane logowania.

Możesz użyć skryptu JamfSniper.py, aby przeprowadzić atak na hasła.

Ponadto, po znalezieniu odpowiednich danych logowania, możesz być w stanie przeprowadzić brute-force na innych nazwach użytkowników za pomocą następnej formy:

Uwierzytelnianie urządzenia JAMF

Binarne jamf zawierało sekret do otwarcia pęku kluczy, który w momencie odkrycia był dzielony wśród wszystkich i był to: jk23ucnq91jfu9aj.
Ponadto, jamf utrzymuje się jako LaunchDaemon w /Library/LaunchAgents/com.jamf.management.agent.plist

Przejęcie urządzenia JAMF

URL JSS (Jamf Software Server), który jamf będzie używać, znajduje się w /Library/Preferences/com.jamfsoftware.jamf.plist.
Ten plik zasadniczo zawiera URL:

bash
plutil -convert xml1 -o - /Library/Preferences/com.jamfsoftware.jamf.plist

[...]
<key>is_virtual_machine</key>
<false/>
<key>jss_url</key>
<string>https://subdomain-company.jamfcloud.com/</string>
<key>last_management_framework_change_id</key>
<integer>4</integer>
[...]

Więc atakujący mógłby zainstalować złośliwy pakiet (pkg), który nadpisuje ten plik, ustawiając URL do słuchacza Mythic C2 z agenta Typhon, aby móc nadużywać JAMF jako C2.

bash
# After changing the URL you could wait for it to be reloaded or execute:
sudo jamf policy -id 0

# TODO: There is an ID, maybe it's possible to have the real jamf connection and another one to the C2

Podszywanie się pod JAMF

Aby podszyć się pod komunikację między urządzeniem a JMF, potrzebujesz:

  • UUID urządzenia: ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'
  • Zaufanego klucza JAMF z: /Library/Application\ Support/Jamf/JAMF.keychain, który zawiera certyfikat urządzenia

Mając te informacje, stwórz VM z skradzionym Hardware UUID i z wyłączonym SIP, umieść klucz JAMF, podłącz agenta Jamf i skradnij jego informacje.

Kradzież sekretów

a

Możesz również monitorować lokalizację /Library/Application Support/Jamf/tmp/ w poszukiwaniu niestandardowych skryptów, które administratorzy mogą chcieć wykonać za pomocą Jamf, ponieważ są umieszczane tutaj, wykonywane i usuwane. Te skrypty mogą zawierać poświadczenia.

Jednakże, poświadczenia mogą być przekazywane do tych skryptów jako parametry, więc musisz monitorować ps aux | grep -i jamf (nawet nie będąc rootem).

Skrypt JamfExplorer.py może nasłuchiwać na nowe pliki dodawane i nowe argumenty procesów.

Zdalny dostęp do macOS

A także o specjalnych protokółach sieciowych MacOS:

macOS Network Services & Protocols

Active Directory

W niektórych przypadkach możesz stwierdzić, że komputer MacOS jest podłączony do AD. W tym scenariuszu powinieneś spróbować wyenumerować aktywny katalog, jak jesteś do tego przyzwyczajony. Znajdź trochę pomocy na następujących stronach:

389, 636, 3268, 3269 - Pentesting LDAP

Active Directory Methodology

88tcp/udp - Pentesting Kerberos

Niektóre lokalne narzędzia MacOS, które mogą Ci również pomóc, to dscl:

bash
dscl "/Active Directory/[Domain]/All Domains" ls /

Również istnieją narzędzia przygotowane dla MacOS do automatycznego enumerowania AD i zabawy z Kerberosem:

  • Machound: MacHound to rozszerzenie narzędzia audytowego Bloodhound, które umożliwia zbieranie i przetwarzanie relacji Active Directory na hostach MacOS.
  • Bifrost: Bifrost to projekt w Objective-C zaprojektowany do interakcji z interfejsami API Heimdal krb5 na macOS. Celem projektu jest umożliwienie lepszego testowania bezpieczeństwa wokół Kerberosa na urządzeniach macOS, korzystając z natywnych interfejsów API bez potrzeby używania innych frameworków lub pakietów na docelowym systemie.
  • Orchard: Narzędzie JavaScript for Automation (JXA) do enumeracji Active Directory.

Informacje o domenie

bash
echo show com.apple.opendirectoryd.ActiveDirectory | scutil

Użytkownicy

Trzy typy użytkowników MacOS to:

  • Użytkownicy lokalni — Zarządzani przez lokalną usługę OpenDirectory, nie są w żaden sposób połączeni z Active Directory.
  • Użytkownicy sieciowi — Zmienni użytkownicy Active Directory, którzy wymagają połączenia z serwerem DC w celu uwierzytelnienia.
  • Użytkownicy mobilni — Użytkownicy Active Directory z lokalnym zapasowym kopią swoich poświadczeń i plików.

Lokalne informacje o użytkownikach i grupach są przechowywane w folderze /var/db/dslocal/nodes/Default.
Na przykład, informacje o użytkowniku o nazwie mark są przechowywane w /var/db/dslocal/nodes/Default/users/mark.plist, a informacje o grupie admin znajdują się w /var/db/dslocal/nodes/Default/groups/admin.plist.

Oprócz używania krawędzi HasSession i AdminTo, MacHound dodaje trzy nowe krawędzie do bazy danych Bloodhound:

  • CanSSH - podmiot dozwolony do SSH na hoście
  • CanVNC - podmiot dozwolony do VNC na hoście
  • CanAE - podmiot dozwolony do wykonywania skryptów AppleEvent na hoście
bash
#User enumeration
dscl . ls /Users
dscl . read /Users/[username]
dscl "/Active Directory/TEST/All Domains" ls /Users
dscl "/Active Directory/TEST/All Domains" read /Users/[username]
dscacheutil -q user

#Computer enumeration
dscl "/Active Directory/TEST/All Domains" ls /Computers
dscl "/Active Directory/TEST/All Domains" read "/Computers/[compname]$"

#Group enumeration
dscl . ls /Groups
dscl . read "/Groups/[groupname]"
dscl "/Active Directory/TEST/All Domains" ls /Groups
dscl "/Active Directory/TEST/All Domains" read "/Groups/[groupname]"

#Domain Information
dsconfigad -show

Więcej informacji w https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/

Hasło Computer$

Uzyskaj hasła za pomocą:

bash
bifrost --action askhash --username [name] --password [password] --domain [domain]

Możliwe jest uzyskanie hasła Computer$ w obrębie systemowego pęku kluczy.

Over-Pass-The-Hash

Uzyskaj TGT dla konkretnego użytkownika i usługi:

bash
bifrost --action asktgt --username [user] --domain [domain.com] \
--hash [hash] --enctype [enctype] --keytab [/path/to/keytab]

Gdy TGT zostanie zebrany, możliwe jest wstrzyknięcie go w bieżącej sesji za pomocą:

bash
bifrost --action asktgt --username test_lab_admin \
--hash CF59D3256B62EE655F6430B0F80701EE05A0885B8B52E9C2480154AFA62E78 \
--enctype aes256 --domain test.lab.local

Kerberoasting

bash
bifrost --action asktgs --spn [service] --domain [domain.com] \
--username [user] --hash [hash] --enctype [enctype]

Dzięki uzyskanym biletom serwisowym możliwe jest próbowanie uzyskania dostępu do udostępnionych zasobów na innych komputerach:

bash
smbutil view //computer.fqdn
mount -t smbfs //server/folder /local/mount/point

Uzyskiwanie dostępu do Keychain

Keychain prawdopodobnie zawiera wrażliwe informacje, które, jeśli zostaną uzyskane bez generowania monitu, mogą pomóc w realizacji ćwiczenia red team:

macOS Keychain

Usługi zewnętrzne

MacOS Red Teaming różni się od standardowego Windows Red Teaming, ponieważ zazwyczaj MacOS jest zintegrowany z kilkoma zewnętrznymi platformami bezpośrednio. Typowa konfiguracja MacOS polega na uzyskiwaniu dostępu do komputera za pomocą zsynchronizowanych poświadczeń OneLogin oraz dostępu do kilku zewnętrznych usług (takich jak github, aws...) za pośrednictwem OneLogin.

Różne techniki Red Team

Safari

Gdy plik jest pobierany w Safari, jeśli jest to plik "bezpieczny", zostanie automatycznie otwarty. Na przykład, jeśli pobierzesz zip, zostanie on automatycznie rozpakowany:

Odnośniki

tip

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) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks