macOS Red Teaming

Impara l'hacking su AWS da zero a eroe con htARTE (Esperto Red Team di HackTricks su AWS)!

Altri modi per supportare HackTricks:

Abuso di MDM

  • JAMF Pro: jamf checkJSSConnection

  • Kandji

Se riesci a compromettere le credenziali di amministrazione per accedere alla piattaforma di gestione, potresti potenzialmente compromettere tutti i computer distribuendo il tuo malware nelle macchine.

Per il red teaming negli ambienti MacOS è altamente consigliato avere una certa comprensione di come funzionano i MDM:

Utilizzo di MDM come C2

Un MDM avrà il permesso di installare, interrogare o rimuovere profili, installare applicazioni, creare account amministrativi locali, impostare la password del firmware, cambiare la chiave di FileVault...

Per eseguire il proprio MDM è necessario avere il tuo CSR firmato da un fornitore che potresti provare a ottenere con https://mdmcert.download/. E per eseguire il proprio MDM per i dispositivi Apple potresti utilizzare MicroMDM.

Tuttavia, per installare un'applicazione in un dispositivo registrato, è comunque necessario che sia firmata da un account sviluppatore... tuttavia, al momento dell'iscrizione al MDM il dispositivo aggiunge il certificato SSL del MDM come CA attendibile, quindi ora puoi firmare qualsiasi cosa.

Per iscrivere il dispositivo in un MDM, è necessario installare un file mobileconfig come root, che potrebbe essere consegnato tramite un file pkg (potresti comprimerlo in zip e quando scaricato da safari verrà decompresso).

L'agente Mythic Orthrus utilizza questa tecnica.

Abuso di JAMF PRO

JAMF può eseguire script personalizzati (script sviluppati dall'amministratore di sistema), payload nativi (creazione di account locali, impostazione password EFI, monitoraggio file/processo...) e MDM (configurazioni del dispositivo, certificati del dispositivo...).

Auto-iscrizione JAMF

Vai su una pagina come https://<nome-azienda>.jamfcloud.com/enroll/ per vedere se hanno abilitato l'auto-iscrizione. Se l'hanno potrebbe chiedere le credenziali per accedere.

Potresti utilizzare lo script JamfSniper.py per eseguire un attacco di password spraying.

Inoltre, dopo aver trovato le credenziali corrette potresti essere in grado di forzare altre username con il modulo successivo:

Autenticazione dispositivo JAMF

Il binario jamf conteneva il segreto per aprire il portachiavi che al momento della scoperta era condiviso tra tutti ed era: jk23ucnq91jfu9aj. Inoltre, jamf persiste come LaunchDaemon in /Library/LaunchAgents/com.jamf.management.agent.plist

Assunzione del controllo del dispositivo JAMF

L'URL del JSS (Jamf Software Server) che jamf utilizzerà si trova in /Library/Preferences/com.jamfsoftware.jamf.plist. Questo file contiene fondamentalmente l'URL:

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

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

Quindi, un attaccante potrebbe rilasciare un pacchetto dannoso (pkg) che sovrascrive questo file durante l'installazione impostando l'URL su un listener Mythic C2 da un agente Typhon per poter abusare di JAMF come C2.

# 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

Impersonificazione JAMF

Per impersonare la comunicazione tra un dispositivo e JMF hai bisogno di:

  • L'UUID del dispositivo: ioreg -d2 -c IOPlatformExpertDevice | awk -F" '/IOPlatformUUID/{print $(NF-1)}'

  • Il portachiavi JAMF da: /Library/Application\ Support/Jamf/JAMF.keychain che contiene il certificato del dispositivo

Con queste informazioni, crea una VM con l'UUID dell'hardware rubato e con SIP disabilitato, rilascia il portachiavi JAMF, intercetta l'agente Jamf e ruba le sue informazioni.

Furto di segreti

Potresti anche monitorare la posizione /Library/Application Support/Jamf/tmp/ per gli script personalizzati che gli amministratori potrebbero voler eseguire tramite Jamf poiché vengono posizionati qui, eseguiti e rimossi. Questi script potrebbero contenere credenziali.

Tuttavia, le credenziali potrebbero essere passate a questi script come parametri, quindi dovresti monitorare ps aux | grep -i jamf (senza nemmeno essere root).

Lo script JamfExplorer.py può ascoltare l'aggiunta di nuovi file e nuovi argomenti dei processi.

Accesso Remoto a macOS

E anche riguardo ai protocolli di rete "speciali" di MacOS:

Active Directory

In alcune occasioni potresti trovare che il computer MacOS è connesso a un AD. In questo scenario dovresti provare a enumerare l'active directory come sei abituato a fare. Trova un po' di aiuto nelle seguenti pagine:

Uno strumento locale MacOS che potrebbe aiutarti è dscl:

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

Inoltre ci sono alcuni strumenti preparati per MacOS per enumerare automaticamente l'AD e interagire con kerberos:

  • Machound: MacHound è un'estensione dello strumento di audit Bloodhound che consente di raccogliere e inglobare le relazioni dell'Active Directory su host MacOS.

  • Bifrost: Bifrost è un progetto Objective-C progettato per interagire con le API Heimdal krb5 su macOS. L'obiettivo del progetto è consentire una migliore verifica della sicurezza attorno a Kerberos su dispositivi macOS utilizzando API native senza richiedere altri framework o pacchetti nel target.

  • Orchard: Strumento JavaScript for Automation (JXA) per enumerare l'Active Directory.

echo show com.apple.opendirectoryd.ActiveDirectory | scutil

Utenti

I tre tipi di utenti MacOS sono:

  • Utenti Locali — Gestiti dal servizio locale OpenDirectory, non sono in alcun modo collegati all'Active Directory.

  • Utenti di Rete — Utenti volatili dell'Active Directory che richiedono una connessione al server DC per l'autenticazione.

  • Utenti Mobili — Utenti dell'Active Directory con un backup locale per le loro credenziali e file.

Le informazioni locali sugli utenti e sui gruppi sono memorizzate nella cartella /var/db/dslocal/nodes/Default. Ad esempio, le informazioni sull'utente chiamato mark sono memorizzate in /var/db/dslocal/nodes/Default/users/mark.plist e le informazioni sul gruppo admin sono in /var/db/dslocal/nodes/Default/groups/admin.plist.

Oltre all'utilizzo dei bordi HasSession e AdminTo, MacHound aggiunge tre nuovi bordi al database Bloodhound:

  • CanSSH - entità autorizzata a fare SSH all'host

  • CanVNC - entità autorizzata a fare VNC all'host

  • CanAE - entità autorizzata ad eseguire script AppleEvent sull'host

#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

Ulteriori informazioni in https://its-a-feature.github.io/posts/2018/01/Active-Directory-Discovery-with-a-Mac/

Accesso al portachiavi

Il portachiavi contiene molto probabilmente informazioni sensibili che, se accessate senza generare una richiesta, potrebbero aiutare a far progredire un esercizio di red team:

Servizi esterni

Il Red Teaming su MacOS è diverso da un Red Teaming regolare su Windows poiché di solito MacOS è integrato direttamente con diverse piattaforme esterne. Una configurazione comune di MacOS è accedere al computer utilizzando le credenziali sincronizzate di OneLogin e accedere a diversi servizi esterni (come github, aws...) tramite OneLogin.

Tecniche di Red Team varie

Safari

Quando un file viene scaricato in Safari, se è un file "sicuro", verrà aperto automaticamente. Quindi, ad esempio, se si scarica un file zip, verrà decompresso automaticamente:

Riferimenti

Last updated