macOS Gatekeeper / Quarantine / XProtect
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Gatekeeper è una funzione di sicurezza sviluppata per i sistemi operativi Mac, progettata per garantire che gli utenti eseguano solo software affidabile sui loro sistemi. Funziona validando il software che un utente scarica e tenta di aprire da fonti esterne all'App Store, come un'app, un plug-in o un pacchetto di installazione.
Il meccanismo chiave di Gatekeeper risiede nel suo processo di verifica. Controlla se il software scaricato è firmato da uno sviluppatore riconosciuto, garantendo l'autenticità del software. Inoltre, verifica se il software è notarizzato da Apple, confermando che è privo di contenuti dannosi noti e non è stato manomesso dopo la notarizzazione.
Inoltre, Gatekeeper rafforza il controllo e la sicurezza dell'utente richiedendo agli utenti di approvare l'apertura del software scaricato per la prima volta. Questa protezione aiuta a prevenire che gli utenti eseguano involontariamente codice eseguibile potenzialmente dannoso che potrebbero aver scambiato per un file di dati innocuo.
Le firme delle applicazioni, note anche come firme del codice, sono un componente critico dell'infrastruttura di sicurezza di Apple. Vengono utilizzate per verificare l'identità dell'autore del software (lo sviluppatore) e per garantire che il codice non sia stato manomesso da quando è stato firmato l'ultima volta.
Ecco come funziona:
Firmare l'applicazione: Quando uno sviluppatore è pronto a distribuire la propria applicazione, firma l'applicazione utilizzando una chiave privata. Questa chiave privata è associata a un certificato che Apple rilascia allo sviluppatore quando si iscrive al Programma Sviluppatori Apple. Il processo di firma comporta la creazione di un hash crittografico di tutte le parti dell'app e la crittografia di questo hash con la chiave privata dello sviluppatore.
Distribuire l'applicazione: L'applicazione firmata viene quindi distribuita agli utenti insieme al certificato dello sviluppatore, che contiene la corrispondente chiave pubblica.
Verificare l'applicazione: Quando un utente scarica e tenta di eseguire l'applicazione, il sistema operativo Mac utilizza la chiave pubblica del certificato dello sviluppatore per decrittografare l'hash. Quindi ricalcola l'hash basato sullo stato attuale dell'applicazione e lo confronta con l'hash decrittografato. Se corrispondono, significa che l'applicazione non è stata modificata da quando è stata firmata dallo sviluppatore, e il sistema consente l'esecuzione dell'applicazione.
Le firme delle applicazioni sono una parte essenziale della tecnologia Gatekeeper di Apple. Quando un utente tenta di aprire un'applicazione scaricata da internet, Gatekeeper verifica la firma dell'applicazione. Se è firmata con un certificato rilasciato da Apple a uno sviluppatore noto e il codice non è stato manomesso, Gatekeeper consente l'esecuzione dell'applicazione. Altrimenti, blocca l'applicazione e avvisa l'utente.
A partire da macOS Catalina, Gatekeeper controlla anche se l'applicazione è stata notarizzata da Apple, aggiungendo un ulteriore livello di sicurezza. Il processo di notarizzazione controlla l'applicazione per problemi di sicurezza noti e codice dannoso, e se questi controlli vengono superati, Apple aggiunge un ticket all'applicazione che Gatekeeper può verificare.
Quando controlli alcuni campioni di malware, dovresti sempre controllare la firma del binario poiché il developer che l'ha firmato potrebbe essere già relato con malware.
Il processo di notarizzazione di Apple funge da ulteriore protezione per proteggere gli utenti da software potenzialmente dannoso. Comporta che il sviluppatore invii la propria applicazione per l'esame da parte del Servizio Notariale di Apple, che non deve essere confuso con la Revisione dell'App. Questo servizio è un sistema automatizzato che esamina il software inviato per la presenza di contenuti dannosi e eventuali problemi con la firma del codice.
Se il software supera questo controllo senza sollevare preoccupazioni, il Servizio Notariale genera un biglietto di notarizzazione. Il sviluppatore è quindi tenuto a allegare questo biglietto al proprio software, un processo noto come 'stapling.' Inoltre, il biglietto di notarizzazione è anche pubblicato online dove Gatekeeper, la tecnologia di sicurezza di Apple, può accedervi.
Al momento della prima installazione o esecuzione del software da parte dell'utente, l'esistenza del biglietto di notarizzazione - sia che sia allegato all'eseguibile o trovato online - informa Gatekeeper che il software è stato notarizzato da Apple. Di conseguenza, Gatekeeper visualizza un messaggio descrittivo nella finestra di dialogo di avvio iniziale, indicando che il software è stato sottoposto a controlli per contenuti dannosi da parte di Apple. Questo processo aumenta quindi la fiducia degli utenti nella sicurezza del software che installano o eseguono sui propri sistemi.
Nota che dalla versione Sequoia, spctl
non consente più di modificare la configurazione di Gatekeeper.
spctl
è lo strumento CLI per enumerare e interagire con Gatekeeper (con il demone syspolicyd
tramite messaggi XPC). Ad esempio, è possibile vedere lo stato di GateKeeper con:
Nota che i controlli delle firme di GateKeeper vengono eseguiti solo su file con l'attributo Quarantena, non su ogni file.
GateKeeper verificherà se, secondo le preferenze e la firma, un binario può essere eseguito:
syspolicyd
è il principale daemon responsabile dell'applicazione di Gatekeeper. Mantiene un database situato in /var/db/SystemPolicy
ed è possibile trovare il codice per supportare il database qui e il modello SQL qui. Nota che il database non è limitato da SIP ed è scrivibile da root e il database /var/db/.SystemPolicy-default
è utilizzato come backup originale nel caso in cui l'altro si corrompa.
Inoltre, i bundle /var/db/gke.bundle
e /var/db/gkopaque.bundle
contengono file con regole che vengono inserite nel database. Puoi controllare questo database come root con:
syspolicyd
espone anche un server XPC con diverse operazioni come assess
, update
, record
e cancel
che sono raggiungibili anche utilizzando le API SecAssessment*
di Security.framework
e xpctl
comunica effettivamente con syspolicyd
tramite XPC.
Nota come la prima regola sia terminata in "App Store" e la seconda in "Developer ID" e che nell'immagine precedente era abilitato ad eseguire app dall'App Store e sviluppatori identificati. Se modifichi quella impostazione su App Store, le "regole Notarized Developer ID" scompariranno.
Ci sono anche migliaia di regole di tipo GKE :
Questi sono gli hash che provengono da:
/var/db/SystemPolicyConfiguration/gke.bundle/Contents/Resources/gke.auth
/var/db/gke.bundle/Contents/Resources/gk.db
/var/db/gkopaque.bundle/Contents/Resources/gkopaque.db
Oppure puoi elencare le informazioni precedenti con:
Le opzioni --master-disable
e --global-disable
di spctl
disabiliteranno completamente questi controlli di firma:
Quando completamente abilitato, apparirà una nuova opzione:
È possibile verificare se un'app sarà consentita da GateKeeper con:
È possibile aggiungere nuove regole in GateKeeper per consentire l'esecuzione di determinate app con:
Riguardo alle estensioni del kernel, la cartella /var/db/SystemPolicyConfiguration
contiene file con elenchi di kext autorizzati a essere caricati. Inoltre, spctl
ha il diritto com.apple.private.iokit.nvram-csr
perché è in grado di aggiungere nuove estensioni del kernel pre-approvate che devono essere salvate anche in NVRAM in una chiave kext-allowed-teams
.
Al download di un'applicazione o file, specifiche applicazioni macOS come browser web o client di posta elettronica allegano un attributo di file esteso, comunemente noto come "flag di quarantena," al file scaricato. Questo attributo funge da misura di sicurezza per contrassegnare il file come proveniente da una fonte non attendibile (internet) e potenzialmente portatore di rischi. Tuttavia, non tutte le applicazioni allegano questo attributo; ad esempio, i comuni software client BitTorrent di solito bypassano questo processo.
La presenza di un flag di quarantena segnala la funzione di sicurezza Gatekeeper di macOS quando un utente tenta di eseguire il file.
Nel caso in cui il flag di quarantena non sia presente (come con i file scaricati tramite alcuni client BitTorrent), i controlli di Gatekeeper potrebbero non essere eseguiti. Pertanto, gli utenti dovrebbero esercitare cautela nell'aprire file scaricati da fonti meno sicure o sconosciute.
Controllare la validità delle firme del codice è un processo intensivo in termini di risorse che include la generazione di hash crittografici del codice e di tutte le sue risorse incorporate. Inoltre, il controllo della validità del certificato comporta un controllo online sui server di Apple per vedere se è stato revocato dopo essere stato emesso. Per questi motivi, un controllo completo della firma del codice e della notarizzazione è impraticabile da eseguire ogni volta che un'app viene avviata.
Pertanto, questi controlli vengono eseguiti solo quando si eseguono app con l'attributo di quarantena.
Questo attributo deve essere impostato dall'applicazione che crea/scarica il file.
Tuttavia, i file che sono in sandbox avranno questo attributo impostato su ogni file che creano. E le app non in sandbox possono impostarlo da sole, o specificare la chiave LSFileQuarantineEnabled nel Info.plist che farà sì che il sistema imposti l'attributo esteso com.apple.quarantine
sui file creati,
Inoltre, tutti i file creati da un processo che chiama qtn_proc_apply_to_self
sono messi in quarantena. Oppure l'API qtn_file_apply_to_path
aggiunge l'attributo di quarantena a un percorso di file specificato.
È possibile controllare il suo stato e abilitare/disabilitare (richiesta di root) con:
Puoi anche verificare se un file ha l'attributo esteso di quarantena con:
Controlla il valore degli attributi estesi e scopri l'app che ha scritto l'attributo di quarantena con:
In realtà, un processo "potrebbe impostare i flag di quarantena sui file che crea" (ho già provato ad applicare il flag USER_APPROVED in un file creato, ma non si applica):
Impara e pratica AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Impara e pratica GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)