Modifica File Plist: Plist File Modification (T1647)
La tecnica T1647 - Plist File Modification riguarda l'abuso dei file property list di macOS, strutture XML o binarie che memorizzano configurazioni e metadati letti dal sistema operativo per gestire applicazioni e servizi al runtime. Un attaccante che riesce a scrivere su questi file può alterare il comportamento di app legittime, nascondere processi malevoli, iniettare variabili d'ambiente o costruire meccanismi di persistenza sfruttando le stesse convenzioni che Apple mette a disposizione degli sviluppatori.
La tecnica è mappata sulla tattica TA0005 Defense Evasion, ma nella pratica offensiva si intreccia costantemente con la persistenza: modificando chiavi come LSUIElement si ottiene l'esecuzione in background senza icona nel Dock, mentre l'iniezione di LSEnvironment apre la strada al Dynamic Linker Hijacking. Un altro vettore ricorrente è la manipolazione di ~/Library/Preferences/com.apple.dock.plist per alterare le applicazioni presentate all'utente, oppure la creazione ex novo di plist in ~/Library/LaunchAgents per registrare un Launch Agent.
L'impatto è significativo perché i file plist sono ubiqui in macOS e la loro modifica raramente genera allarmi diretti: gli utenti finali interagiscono con essi indirettamente e molti strumenti di sicurezza si concentrano su binari eseguibili anziché su file di configurazione. Le statistiche MITRE riportano 2 famiglie malware documentate (XCSSET e Cuckoo Stealer) e 1 mitigazione ufficiale focalizzata sulle linee guida per sviluppatori Apple.
In un ingaggio red team su ambiente macOS, la manipolazione dei plist è uno degli strumenti più eleganti per ottenere persistenza e occultamento senza ricorrere a exploit. Il punto di partenza è la comprensione dei due formati: XML testuale e binario. Per convertirli si usa il comando nativo plutil -convert xml1 file.plist oppure plutil -convert binary1 file.plist, entrambi disponibili out-of-the-box su ogni versione recente di macOS.
Un primo scenario classico è la creazione di un Launch Agent utente. Si scrive un file in ~/Library/LaunchAgents/com.apple.updater.plist contenente le chiavi Label, ProgramArguments con il path al payload, RunAtLoad impostato su true e opzionalmente KeepAlive. Il caricamento avviene con launchctl load ~/Library/LaunchAgents/com.apple.updater.plist (su versioni recenti è preferibile launchctl bootstrap gui/$(id -u)
Per la modifica programmatica delle chiavi il tool di riferimento resta defaults (built-in): defaults write ~/Library/Preferences/com.apple.dock persistent-apps -array-add '
Per scenari di Dynamic Linker Hijacking si inserisce la chiave LSEnvironment nell'Info.plist con un dizionario contenente DYLD_INSERT_LIBRARIES puntato a una dylib controllata. Attenzione però: dal rilascio di System Integrity Protection e con la firma hardened runtime obbligatoria per il notarization, molte variabili DYLD vengono ignorate per binari firmati con com.apple.security.cs.disable-library-validation non attivo.
In laboratorio strumenti come Mythic (open source) con agent Poseidon o Apfell, oppure il framework swiftbelt (open source) di Cedric Owens per l'enumerazione, permettono di simulare l'intera catena. Per validare la persistenza dopo il reboot è utile KnockKnock di Objective-See (gratuito), che elenca gli elementi persistenti e consente di verificare se il proprio artefatto è visibile o meno agli strumenti di difesa comuni.
Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?
Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo