Login Hook macOS: Persistenza via com.apple.loginwindow.plist (T1037.002)
La tecnica T1037.002 — Login Hook descrive un meccanismo di persistenza specifico di macOS che sfrutta un file plist di sistema per eseguire uno script arbitrario, con privilegi di root, ad ogni login utente. Il file bersaglio è /Library/Preferences/com.apple.loginwindow.plist e le chiavi rilevanti sono LoginHook e LogoutHook, quest'ultima invocata alla disconnessione.
Dal punto di vista tattico la tecnica ricade in TA0003 (Persistence), perché garantisce riesecuzione del payload attraverso reboot e cambi di sessione, e in TA0004 (Privilege Escalation), dato che lo script viene lanciato dal processo loginwindow con contesto root anche se l'utente che effettua il login è non privilegiato. La modifica del plist richiede però permessi amministrativi, quindi la tecnica presuppone un accesso già elevato o l'abuso di sudo.
Apple ha deprecato i login/logout hook a partire da macOS 10.11 El Capitan, promuovendo Launch Daemon e Launch Agent come sostituti. Nonostante ciò il meccanismo rimane funzionante nelle versioni recenti per retrocompatibilità, il che lo rende un vettore interessante per gli attaccanti proprio perché poco monitorato dagli strumenti EDR rispetto alle LaunchAgent più moderne. Sul sistema può esistere un solo login hook e un solo logout hook alla volta, dettaglio che condiziona sia le tecniche offensive (rischio di sovrascrittura di hook legittimi) sia quelle difensive (baseline binaria: presente/assente).
In un ingaggio red team su endpoint macOS, l'installazione di un login hook è un'operazione a bassa complessità che richiede però privilegi amministrativi. Il comando canonico documentato da Apple sfrutta l'utility defaults:
sudo defaults write com.apple.loginwindow LoginHook /path/to/script.sh
Lo script deve essere eseguibile (chmod +x) e di proprietà root per essere invocato correttamente da loginwindow. In modo speculare si imposta un logout hook con la chiave LogoutHook. La rimozione avviene con sudo defaults delete com.apple.loginwindow LoginHook.
Per un payload realistico in laboratorio, lo script bash può contenere una reverse shell verso un listener controllato, oppure invocare un binario Mach-O droppato in una directory scrivibile. Un pattern osservato consiste nel wrappare il payload malevolo in uno script che esegue anche un comando legittimo, riducendo il sospetto in caso di ispezione manuale. Ricorda che il payload gira come root indipendentemente dall'utente che effettua il login, un aspetto sfruttabile per lateral movement locale verso account amministrativi.
Per la fase di enumeration precedente, verifica la presenza di hook già configurati con:
sudo defaults read com.apple.loginwindow
Se una chiave LoginHook è già presente, sovrascriverla comprometterebbe un servizio legittimo (raro ma possibile in ambienti MDM legacy); considera invece di aggiungere comandi allo script esistente per mantenere la funzionalità originale ed evitare detection basate su comportamento anomalo dell'utente.
Sul piano tooling, il framework offensivo di riferimento per macOS è Mythic (open source), che nei payload Apfell/Poseidon include moduli di persistenza. Per validare la catena end-to-end in un lab isolato sono utili anche Empire (open source, fork attivo BC-Security) e i moduli macOS di Atomic Red Team (open source), che pubblica test T1037.002 riproducibili con il runner Invoke-AtomicTest.
Come consideration OPSEC: la tecnica lascia un artefatto binario molto evidente (il plist modificato) e la deprecazione ufficiale rende un login hook di per sé un IOC ad alta confidenza per un blue team preparato. In ingaggi contro target maturi, meccanismi Launch Agent con nomi camuffati offrono maggiore stealth. Il login hook resta però utile in scenari smash-and-grab, contro workstation aziendali con MDM datati o in retest per verificare che remediation precedenti abbiano coperto anche i vettori legacy.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo