Launch Agent Persistence: Create or Modify Launch Agents (T1543.001)

Quando un utente effettua il login su macOS, il sistema carica automaticamente i Launch Agent definiti nei file .plist presenti in directory specifiche del sistema. Questa tecnica sfrutta proprio questo meccanismo per garantirsi la persistenza nel sistema compromesso.

Gli attaccanti posizionano file di configurazione malevoli nelle cartelle /System/Library/LaunchAgents, /Library/LaunchAgents o ~/Library/LaunchAgents. Ogni file contiene chiavi come Label, ProgramArguments e RunAtLoad che definiscono nome, percorso eseguibile e modalità di esecuzione del programma.

Questa tecnica appartiene a due tattiche nella kill chain: TA0003 (Persistence) per mantenere l'accesso dopo riavvii o cambi credenziali, e TA0004 (Privilege Escalation) quando sfruttata per ottenere privilegi elevati. Il metodo è stato documentato in 20 famiglie di malware e utilizzato dal gruppo Contagious Interview.

Per testare questa tecnica in laboratorio, inizia creando un semplice Launch Agent malevolo. Il primo passo consiste nel preparare un file plist che eseguirà il tuo payload.

Crea il file con questo contenuto base:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.apple.updates</string>
    <key>ProgramArguments</key>
    <array>
        <string>/Users/Shared/updates.sh</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>KeepAlive</key>
    <true/>
</dict>
</plist>

Salva questo file come com.apple.updates.plist e posizionalo nella directory target con cp com.apple.updates.plist ~/Library/LaunchAgents/. Il naming è cruciale: usa nomi che sembrino legittimi come quelli utilizzati da Komplex che crea com.apple.updates.plist.

Per attivare immediatamente l'agent senza riavviare, usa launchctl load -w ~/Library/LaunchAgents/com.apple.updates.plist. Verifica lo stato con launchctl list | grep com.apple.

Tecniche più sofisticate prevedono l'uso di path randomizzati come fa Dok che genera nomi nel formato com.random.name.plist. CoinTicker invece utilizza .espl.plist nascondendo il file con il punto iniziale.

Per simulare comportamenti APT avanzati, implementa variazioni come quella di MacMa che include LimitLoadToSessionType con valore Aqua, garantendo l'esecuzione solo con GUI attiva. Oppure replica ThiefQuest che cripta il template plist prima di decifrarlo e installarlo.

Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Scarica la guida gratuita e segui il percorso corretto fin dal primo passo