# 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)*