# T1647 - Plist File Modification
> [!danger] Persistência e Evasão - macOS
> Adversários modificam arquivos **Property List (plist)** do macOS para estabelecer persistência, ocultar execução de aplicações e injetar variáveis de ambiente maliciosas - tudo através de mecanismos nativos do sistema operacional.
## Descrição
**T1647 - Plist File Modification** descreve o abuso de arquivos Property List (`.plist`) do macOS para alcançar persistência, evasão de defesas e alteração de comportamento do sistema. Plist files são a espinha dorsal da configuração de aplicações e serviços no macOS - estruturas XML de par chave-valor baseadas no Apple Core Foundation DTD que informam ao sistema operacional como tratar cada aplicação em tempo de execução.
### O que são Plist Files?
Os plist files existem em dois formatos:
- **XML (texto)**: Legível por humanos, editável com qualquer editor de texto
- **Binário**: Mais eficiente, editável via `plutil`, `defaults` ou PlistBuddy
Os adversários abusam de três categorias principais de plist:
**1. LaunchAgent Plists** (`~/Library/LaunchAgents/` e `/Library/LaunchAgents/`)
Definem processos que iniciam automaticamente quando um usuário faz login. Modificações ou criações neste diretório estabelecem persistência de nível de usuário - técnica documentada em [[t1543-001-launch-agent|T1543.001 - Launch Agent]].
**2. LaunchDaemon Plists** (`/Library/LaunchDaemons/` e `/System/Library/LaunchDaemons/`)
Controlam serviços do sistema que iniciam no boot, independente do usuário logado. Requer privilégios de root - técnica documentada em [[t1543-004-launch-daemon|T1543.004 - Launch Daemon]].
**3. Info.plist de Aplicações** (`Aplicação.app/Contents/Info.plist`)
Controla metadados e comportamento de cada aplicação. Chaves críticas que adversários modificam:
- `LSUIElement` (Boolean): Quando `true`, oculta a aplicação do Dock e da barra de menu - implementação de [[t1564-003-hidden-window|T1564.003 - Hidden Window]]
- `LSEnvironment` (Dictionary): Injeta variáveis de ambiente carregadas antes da execução - vetor para [[t1574-006-dynamic-linker-hijacking|T1574.006 - Dynamic Linker Hijacking]] via `DYLD_INSERT_LIBRARIES`
- `LSBackgroundOnly` (Boolean): Executa a aplicação exclusivamente em background
**4. Dock Plist** (`~/Library/Preferences/com.apple.dock.plist`)
O adversário insere o caminho de uma aplicação maliciosa nas preferências do Dock, garantindo persistência discreta no próximo login.
**Relação com outras técnicas:**
- Habilita [[t1543-001-launch-agent|T1543.001 - Launch Agent]] e [[t1543-004-launch-daemon|T1543.004 - Launch Daemon]]
- Implementa [[t1564-003-hidden-window|T1564.003 - Hidden Window]] via `LSUIElement`
- Facilita [[t1574-006-dynamic-linker-hijacking|T1574.006 - Dynamic Linker Hijacking]] via `LSEnvironment`
- Relacionado a [[t1547-007-re-opened-applications|T1547.007 - Re-opened Applications]] via modificações de preferências
## Como Funciona
### Mecanismo Técnico
**Ferramenta nativa: `defaults`**
```bash
# Definir LSUIElement (ocultar do Dock e menu bar)
defaults write /Applications/Malware.app/Contents/Info.plist LSUIElement -bool true
# Injetar variável de ambiente para hijacking de linker dinâmico
defaults write /Applications/App.app/Contents/Info.plist LSEnvironment -dict DYLD_INSERT_LIBRARIES /path/to/malicious.dylib
```
**Ferramenta nativa: `PlistBuddy`**
```bash
# Adicionar entrada no LaunchAgent para persistência
/usr/libexec/PlistBuddy -c "Set :RunAtLoad true" ~/Library/LaunchAgents/com.legit.updater.plist
/usr/libexec/PlistBuddy -c "Set :ProgramArguments:0 /tmp/.backdoor" ~/Library/LaunchAgents/com.legit.updater.plist
```
**Ferramenta nativa: `plutil`**
```bash
# Converter plist binário para XML (legível), modificar, e reconverter
plutil -convert xml1 ~/Library/Preferences/com.apple.dock.plist
# ... editar o arquivo XML ...
plutil -convert binary1 ~/Library/Preferences/com.apple.dock.plist
```
### Principais Vetores de Abuso
| Plist | Localização | Vetor | Privilégio |
|-------|-------------|-------|------------|
| LaunchAgent | `~/Library/LaunchAgents/*.plist` | Persistência por usuário | Usuário comum |
| LaunchDaemon | `/Library/LaunchDaemons/*.plist` | Persistência por sistema | Root |
| Info.plist (LSUIElement) | `App.app/Contents/Info.plist` | Ocultar processo | Usuário comum |
| Info.plist (LSEnvironment) | `App.app/Contents/Info.plist` | Injeção de dylib | Usuário comum |
| com.apple.dock.plist | `~/Library/Preferences/` | Autorun disfarçado | Usuário comum |
| com.apple.loginwindow.plist | `~/Library/Preferences/` | Login items | Usuário comum |
## Attack Flow
```mermaid
graph TB
A([Adversário - acesso inicial ao macOS]) --> B{Objetivo da modificação de plist}
B -->|Persistência| C[Criar ou modificar<br/>LaunchAgent plist<br/>em ~/Library/LaunchAgents/]
B -->|Ocultar processo| D[Modificar Info.plist<br/>da aplicação maliciosa<br/>LSUIElement = true]
B -->|Injeção de código| E[Inserir LSEnvironment<br/>com DYLD_INSERT_LIBRARIES<br/>apontando para .dylib maliciosa]
B -->|Persistência via Dock| F[Modificar<br/>com.apple.dock.plist<br/>com caminho malicioso]
C --> G[LaunchAgent carregado<br/>pelo launchd no próximo login]
G --> H[Payload executado automaticamente<br/>cada vez que usuário faz login]
H --> I([Persistência estabelecida])
D --> J[Aplicação executa em background<br/>Sem ícone no Dock ou menu bar<br/>Invisível para o usuário]
J --> K([Evasão de detecção visual])
E --> L[App legítimo modificado<br/>carrega dylib maliciosa via linker]
L --> M[Código injetado executa<br/>no contexto da aplicação legítima]
M --> N([Hijacking de processo legítimo])
F --> O[Item adicionado ao Dock]
O --> P[Usuário pode executar inadvertidamente<br/>ou autorun no próximo login]
P --> Q([Execução persistente via Dock])
I --> R{Objetivos pós-comprometimento}
K --> R
N --> R
Q --> R
R --> S[Coleta de credenciais<br/>Keychain dump]
R --> T[Exfiltração de dados<br/>Documents / iCloud]
R --> U([C2 - Command and Control])
style A fill:#8B0000,color:#fff
style I fill:#8B0000,color:#fff
style K fill:#8B0000,color:#fff
style N fill:#8B0000,color:#fff
style U fill:#8B0000,color:#fff
style G fill:#b8860b,color:#fff
style L fill:#b8860b,color:#fff
```
## Exemplos de Uso
### Cuckoo Stealer
[[s1153-cuckoo-stealer|Cuckoo Stealer]] é um infostealer macOS descoberto em 2024 por pesquisadores da Kandji com foco em coleta de credenciais, dados de browser, carteiras de criptomoeda e informações do sistema. O malware demonstrou uso sofisticado de plist modification:
- **Persistência via LaunchAgent**: Criou um plist malicioso em `~/Library/LaunchAgents/` com `RunAtLoad: true` para garantir execução a cada login do usuário
- **Ocultação via LSUIElement**: Modificou o Info.plist do dropper para executar em background sem interface visível
- **Targeting de preferências**: Leu e modificou plists de aplicações como Chrome, Firefox e carteiras cripto para exfiltrar dados armazenados
**Impacto observado:**
- Coleta de credenciais de mais de 20 aplicações
- Dump de chaves SSH e certificados
- Exfiltração de dados de carteiras Ethereum, Bitcoin e Monero
### XCSSET
[[s0658-xcsset|XCSSET]] é um malware macOS sofisticado descoberto em 2020 pela Trend Micro que se propaga via projetos Xcode infectados. Suas técnicas de plist modification são extensas:
- **Injeção em projetos Xcode**: Modifica o arquivo `project.pbxproj` (que é um plist) de projetos Xcode para incluir fase de build maliciosa
- **LaunchAgent para persistência**: Cria múltiplos LaunchAgents sob nomes que imitam serviços legítimos do macOS
- **LSEnvironment para dylib injection**: Usa a chave `LSEnvironment` no Info.plist de browsers como Safari para injetar dylibs maliciosas que interceptam sessões HTTPS
- **Manipulação do Dock**: Modifica `com.apple.dock.plist` para adicionar referências a aplicações maliciosas
**Cadeia de ataque completa:**
1. Desenvolvedor clona repositório infectado no GitHub
2. Build do projeto Xcode dispara execução do payload injetado
3. Payload modifica plist de Safari com `DYLD_INSERT_LIBRARIES`
4. Sessions HTTPS são interceptadas e credenciais/cookies exfiltrados
5. LaunchAgent garante persistência entre reinicializações
**Relevância para supply chain**: XCSSET representa um risco significativo para desenvolvedores brasileiros de iOS/macOS que colaboram em projetos open-source.
### OSX.Dok / Bella
Variantes como **OSX.Dok** (2017, Check Point Research) e o spyware **Bella** usaram modificações de LaunchDaemon plists com privilégios de root para estabelecer backdoors de nível de sistema - demonstrando que atores com capacidade de escalonamento de privilégios podem usar plist modification para persistência extremamente resiliente, sobrevivendo reinstalações parciais do sistema.
## Detecção
### Estrategia de Monitoramento
Monitorar plist modification requer três camadas:
1. **File System Events** - criação/modificação de arquivos `.plist` em diretórios críticos
2. **Process Execution** - uso de `defaults`, `PlistBuddy`, `plutil` em contextos suspeitos
3. **LaunchAgent/LaunchDaemon Loading** - novos serviços carregados pelo `launchd`
### Regra Sigma - LaunchAgent Plist Criado em Diretório de Usuário
```yaml
title: New LaunchAgent Plist Created in User Library
id: f2e8b4c7-1d6a-5f9e-0c3b-8a7d2e4f6c1b
status: stable
description: >
Detecta criação de novo arquivo plist no diretório LaunchAgents do usuário.
Indicador comum de persistência via T1543.001 / T1647 em macOS.
author: RunkIntel
daté: 2026-03-25
references:
- https://attack.mitre.org/techniques/T1647/
- https://attack.mitre.org/techniques/T1543/001/
logsource:
category: file_event
product: macos
detection:
selection:
TargetFilename|contains:
- '/Library/LaunchAgents/'
- '/Library/LaunchDaemons/'
TargetFilename|endswith: '.plist'
EventType: 'FileCreaté'
filter_legitimate:
# Processos legítimos de gerenciamento (Jámf, MDM, instaladores Apple)
Image|contains:
- '/usr/sbin/installer'
- 'jámf'
- 'munki'
condition: selection and not filter_legitimate
falsepositives:
- Instalação legítima de software que usa LaunchAgents
- Scripts de automação IT aprovados
level: medium
tags:
- attack.persistence
- attack.defense_evasion
- attack.t1647
- attack.t1543.001
```
### Regra Sigma - Uso Suspeito de Ferramentas de Edição de Plist
```yaml
title: Suspicious Plist Modification via Native Tools
id: a3c9d7e2-5b8f-4a1c-d6e0-2f5b8c9e1a4d
status: experimental
description: >
Detecta uso de defaults, PlistBuddy ou plutil para modificar plist files de
aplicações instaladas ou preferências do sistema. Adversários usam estas
ferramentas nativas para T1647, T1543.001 e T1574.006.
author: RunkIntel
daté: 2026-03-25
logsource:
category: process_creation
product: macos
detection:
selection_defaults:
Image|endswith: '/defaults'
CommandLine|contains:
- 'LSUIElement'
- 'LSEnvironment'
- 'DYLD_INSERT_LIBRARIES'
- 'RunAtLoad'
selection_plistbuddy:
Image|endswith: '/PlistBuddy'
CommandLine|contains:
- 'LaunchAgents'
- 'LaunchDaemons'
- 'ProgramArguments'
selection_plutil_suspicious:
Image|endswith: '/plutil'
CommandLine|contains:
- 'LaunchAgents'
- 'LaunchDaemons'
condition: selection_defaults or selection_plistbuddy or selection_plutil_suspicious
falsepositives:
- Desenvolvedores macOS testando configurações de aplicação
- Scripts de ITops configurando LaunchAgents legítimos
level: high
tags:
- attack.defense_evasion
- attack.persistence
- attack.t1647
```
### Regra Sigma - LSEnvironment com DYLD para Dynamic Linker Hijacking
```yaml
title: Dynamic Linker Hijacking via LSEnvironment in Plist
id: b7d4f1a9-3e6c-8b2d-5a0f-9c3e7b4d1a6f
status: experimental
description: >
Detecta configuração de DYLD_INSERT_LIBRARIES via LSEnvironment em plist,
indicando tentativa de injeção de dylib maliciosa em aplicações legítimas.
Técnica T1574.006 + T1647.
author: RunkIntel
daté: 2026-03-25
logsource:
category: process_creation
product: macos
detection:
selection:
Image|endswith: '/defaults'
CommandLine|contains|all:
- 'LSEnvironment'
- 'DYLD_INSERT_LIBRARIES'
condition: selection
falsepositives:
- Desenvolvedores usando dylib injection para debugging (ambiente de dev apenas)
level: critical
tags:
- attack.defense_evasion
- attack.t1647
- attack.t1574.006
```
## Mitigação
| ID | Mitigação | Descrição | Efetividade |
|---|-----------|-----------|-------------|
| [[m1013-application-developer-guidance\|M1013]] | Application Developer Guidance | Orientar devs a assinar digitalmente e notarizar aplicações; usar Hardened Runtime que bloqueia `DYLD_INSERT_LIBRARIES` | Alta |
| SIP (System Integrity Protection) | Proteção Nativa macOS | SIP bloqueia modificações de plist em `/System/` e `/Library/` por processos não-privilegiados | Alta (para system plists) |
| MDM / PPPC | Preferências Gerenciadas | Implantar perfis MDM via Jámf/Mosyle que bloqueiam modificações de LaunchAgent por aplicações não gerenciadas | Média-Alta |
| EDR macOS | Monitoramento Comportamental | Soluções como Jámf Protect, CrowdStrike Falcon, SentinelOne monitoram criação/modificação de LaunchAgent plists em tempo real | Alta |
| Transparency, Consent, and Control | TCC Framework | Garantir que políticas TCC estejam corretamente configuradas para limitar acesso de apps a diretórios sensíveis | Média |
### Hardening Prioritário
> [!tip] Recomendação para Ambientes Corporativos macOS
> 1. **Habilitar SIP** - nunca desabilitar, mesmo para troubleshooting
> 2. **Hardened Runtime** - exigir para todas as aplicações aprovadas internamente
> 3. **MDM com restrição de LaunchAgent** - bloquear criação de plists em `~/Library/LaunchAgents` por apps não-gerenciados via Jámf
> 4. **Monitorar com Endpoint Security Framework** - para eventos `ES_EVENT_TYPE_NOTIFY_CREATE` em diretórios de LaunchAgents
> 5. **Auditar LaunchAgents regularmente** - `launchctl list` e comparar baseline
## Contexto Brasil/LATAM
> [!info] Crescente Relevância no Ecossistema Brasileiro
> O Brasil possui um dos maiores ecossistemas de desenvolvimento Apple fora dos EUA, com São Paulo sendo hub de desenvolvimento iOS/macOS para toda a América Latina. Isso torna T1647 particularmente relevante.
**Cenários de risco específicos para o Brasil:**
**1. Desenvolvedores iOS/macOS brasileiros:**
O caso [[s0658-xcsset|XCSSET]] é diretamente relevante - desenvolvedores que colaboram em projetos Xcode no GitHub ou GitLab são vetores potenciais de propagação. A comunidade de desenvolvimento mobile brasileira (uma das maiores do mundo) representa uma superfície de ataque significativa.
**2. Fintechs e startups de tecnologia:**
O ecossistema fintech brasileiro (maior da LATAM) tem alta densidade de uso de macOS em equipes de engenharia. Infostealers como [[s1153-cuckoo-stealer|Cuckoo Stealer]] que usam plist modification para persistência são uma ameaça real para acesso a credenciais bancárias e chaves de API.
**3. Espionagem industrial:**
Empresas brasileiras de setores estratégicos (petróleo e gás, agronegócio, defesa) com equipes de pesquisa usando macOS são alvos de campanhas de espionagem que utilizam técnicas furtivas como T1647 para operar sob o radar por longos períodos.
**Malware com foco em LATAM abusando de plists:**
- Variantes de [[Shlayer]] com distribuição global (incluindo Brasil via sites de download)
- Adware families que modificam preferências de browser via plist para injetar publicidade
- RATs macOS de atores brasileiros adaptando técnicas documentadas do MITRE
**Grupos com presença confirmada na LATAM que operam em macOS:**
- Atores de espionagem patrocinados por Estado com campanhas em múltiplos países da região
- Grupos de cybercrime financeiro direcionados a bancos e fintechs brasileiras
## Referências
- [MITRE ATT&CK - T1647](https://attack.mitre.org/techniques/T1647/)
- [Kandji - Cuckoo Stealer Analysis](https://blog.kandji.io/cuckoo-stealer)
- [Trend Micro - XCSSET macOS Malware](https://www.trendmicro.com/en_us/research/20/h/xcsset-mac-malware--infects-xcode-projects--uses-0-days.html)
- [Apple Developer - Property List Programming Guide](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/PropertyLists/Introduction/Introduction.html)
- [Objective-See - macOS LaunchAgent Persistence](https://objective-see.org/blog/blog_0x61.html)
- [[t1543-001-launch-agent|T1543.001 - Launch Agent]]
- [[t1543-004-launch-daemon|T1543.004 - Launch Daemon]]
- [[t1564-003-hidden-window|T1564.003 - Hidden Window]]
- [[t1574-006-dynamic-linker-hijacking|T1574.006 - Dynamic Linker Hijacking]]
- [[t1547-007-re-opened-applications|T1547.007 - Re-opened Applications]]
- [[s1153-cuckoo-stealer|Cuckoo Stealer]] - infostealer macOS com uso documentado de T1647
- [[s0658-xcsset|XCSSET]] - malware macOS com uso extenso de plist modification
- [[m1013-application-developer-guidance|M1013 - Application Developer Guidance]]
---
*Fonte: [MITRE ATT&CK - T1647](https://attack.mitre.org/techniques/T1647)*