Stealers para MacOS Observados: O que os Defensores Devem Observar
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumo
O artigo perfila um ladrão de credenciais para macOS associado ao ecossistema AMOS, entregue através de páginas falsas de atualização de software. As vítimas são incentivadas a executar uma cadeia de comandos que puxa um binário auxiliar de rvdownloads.com, executa-o via zsh e aciona AppleScript ofuscado para coletar senhas, artefatos de navegador, extensões de carteira de criptomoedas, Notas da Apple e arquivos locais. A persistência é estabelecida usando um plist malicioso de LaunchAgent que se disfarça como um componente legítimo do Spotlight. O artigo também compartilha IOCs observados e as etapas de análise usadas para validar o fluxo de infecção.
Investigação
O pesquisador capturou o comando curl inicial que buscava uma URL codificada em Base64, a decodificava e observou um download curl subsequente do binário auxiliar. O auxiliar executou dois AppleScripts: um para detecção de VM e outro que cuidava da coleta e exfiltração. O ladrão obtinha credenciais do Keychain, tentava desativar ferramentas de segurança, coletava dados do navegador e carteira, copiava Notas da Apple, agrupava resultados em um arquivo e enviava para laislivon.com. A persistência foi criada instalando um LaunchAgent que reexecuta toda a cadeia de script no login do usuário.
Mitigação
Reduza a exposição bloqueando os domínios maliciosos identificados, restringindo a execução de scripts não assinados e monitorando atividades incomuns de carregamento do launchctl vinculadas a novos LaunchAgents. Use controles de endpoint que sinalizam combinações suspeitas de curl e osascript, especialmente ao puxar conteúdo remoto de hosts desconhecidos. Limite a execução privilegiada sempre que possível e aplique listas de permissão de aplicativos para impedir o lançamento de binários auxiliares não confiáveis.
Resposta
Se indicadores forem encontrados, isole o endpoint, termine os processos maliciosos ativos, remova o binário auxiliar e exclua o plist do LaunchAgent desonesto. Restaure credenciais e tokens potencialmente expostos, dando prioridade aos segredos do Keychain e dados armazenados no navegador. Colete artefatos forenses para os IOCs listados, revise logs do sistema para execução curl/osascript e monitore tentativas de callback ou download repetidos associados à mesma infraestrutura C2.
"graph TB %% Class Definitions classDef action fill:#99ccff classDef tool fill:#cccccc classDef technique fill:#ffedcc classDef process fill:#e2e2ff %% Nodes u2013 Actions action_initial_access["<b>Ação</b> – <b>T1219 Ferramentas de Acesso Remoto</b><br/>Execute um comando curl que decodifica uma URL base64 e executa um shell zsh para baixar uma carga secundária de rvdownloads.com/frozenfix/update."] class action_initial_access action action_obfuscation["<b>Ação</b> – <b>T1027 Ofuscação</b><br/>Script auxiliar esconde strings usando Base64, aritmética personalizada, preenchimento binário e inserção de código de lixo."] class action_obfuscation action action_sandbox_evasion["<b>Ação</b> – <b>T1497.002 Evasão de Sandbox Virtualização</b><br/>AppleScript verifica a saída do system_profiler para indicadores de VM como QEMU, VMware e KVM."] class action_sandbox_evasion action action_credential_harvest["<b>Ação</b> – <b>T1056.002 Captura de Entrada GUI</b><br/>Diálogo forjado do osascript solicita a senha de administrador, valida-a contra o Keychain e a armazena em ~/.pwd."] class action_credential_harvest action action_defense_evasion["<b>Ação</b> – <b>T1027.005 Remoção de Indicadores de Ferramentas</b><br/>Malware termina Little Snitch e BlockBlock e descarrega seus agentes de lançamento."] class action_defense_evasion action action_browser_theft["<b>Ação</b> – <b>T1217 Descoberta de Informações do Navegador</b><br/>Enumera perfis do Chrome, Brave, Edge, Opera e Firefox e extrai dados de login, cookies, preenchimento automático e dados de extensão, direcionando extensões de carteira cripto."] class action_browser_theft action action_notes_theft["<b>Ação</b> – Roubo de Dados do Apple Notes<br/>Copia o banco de dados SQLite de Notas e arquivos de mídia associados para uma pasta de preparação."] class action_notes_theft action action_data_staging["<b>Ação</b> – <b>T1132 Codificação de Dados</b><br/>Copia arquivos coletados para /tmp/stolen_data e os comprime em archive.tar.gz."] class action_data_staging action action_c2["<b>Ação</b> – <b>T1102 Serviço Web</b><br/>Envia o arquivo comprimido via POST curl para https://laislivon.com/upload."] class action_c2 action action_persistence["<b>Ação</b> – <b>T1543.001 Persistência do Agente de Lançamento</b><br/>Escreve um plist de LaunchAgent (com.apple.mdworker.plist) para ~/Library/LaunchAgents e o carrega com launchctl."] class action_persistence action action_execution["<b>Ação</b> – <b>T1127.003 Execução por Proxy de Utilitários de Desenvolvedor de Confiança</b><br/>Executa o AppleScript malicioso em cada login usando osascript, aproveitando utilitários de desenvolvedor de confiança."] class action_execution action %% Nodes u2013 Tools tool_curl["<b>Ferramenta</b> – <b>Nome</b>: curl<br/><b>Descrição</b>: Transfere dados de servidores remotos usando sintaxe de URL."] class tool_curl tool tool_osascript["<b>Ferramenta</b> – <b>Nome</b>: osascript<br/><b>Descrição</b>: Executa scripts AppleScript ou JavaScript para Automação em macOS."] class tool_osascript tool tool_launchctl["<b>Ferramenta</b> – <b>Nome</b>: launchctl<br/><b>Descrição</b>: Gerencia agentes de lançamento e daemons em macOS."] class tool_launchctl tool %% Nodes u2013 Techniques (detalhe adicional) tech_T1027_008["<b>Técnica</b> – T1027.008 Cargas Estritamente Limitadas<br/>Cargas são desprovidas de símbolos e informações de depuração para dificultar a análise."] class tech_T1027_008 technique tech_T1027_001["<b>Técnica</b> – T1027.001 Preenchimento Binário<br/>Adiciona bytes não funcionais aos binários para alterar tamanho e hash."] class tech_T1027_001 technique tech_T1027_007["<b>Técnica</b> – T1027.007 Resolução Dinâmica de API<br/>Resolve chamadas de API em tempo de execução para evitar detecção estática."] class tech_T1027_007 technique tech_T1027_016["<b>Técnica</b> – T1027.016 Inserção de Código Lixo<br/>Insere instruções irrelevantes para confundir ferramentas de análise."] class tech_T1027_016 technique tech_T1140["<b>Técnica</b> – T1140 Desofuscar/Descompactar Arquivos ou Informações<br/>Decodifica ou desofusca dados antes da execução."] class tech_T1140 technique tech_T1555_001["<b>Técnica</b> – T1555.001 Credenciais de Armazenamento de Senhas: Keychain<br/>Extrai credenciais armazenadas do Keychain do macOS."] class tech_T1555_001 technique tech_T1555_002["<b>Técnica</b> – T1555.002 Credenciais de Armazenamento de Senhas: Memória do Securityd<br/>Lê credenciais da memória do daemon de segurança."] class tech_T1555_002 technique tech_T1555_003["<b>Técnica</b> – T1555.003 Credenciais de Navegadores Web<br/>Rouba senhas salvas de navegadores."] class tech_T1555_003 technique tech_T1606_001["<b>Técnica</b> – T1606.001 Falsificar Credenciais Web: Cookies da Web<br/>Coleta cookies de navegador para sequestro de sessão."] class tech_T1606_001 technique tech_T1132_001["<b>Técnica</b> – T1132.001 Codificação Padrão<br/>Usa codificação padrão (por exemplo, gzip) para compressão de dados."] class tech_T1132_001 technique tech_T1546_009["<b>Técnica</b> – T1546.009 Execução Disparada por Evento: DLLs do AppCert<br/>Dispara execução via eventos de sistema de confiança."] class tech_T1546_009 technique %% Flow Connections action_initial_access –>|usa| tool_curl tool_curl –>|baixa| action_obfuscation action_obfuscation –>|emprega| tech_T1027_008 action_obfuscation –>|emprega| tech_T1027_001 action_obfuscation –>|emprega| tech_T1027_007 action_obfuscation –>|emprega| tech_T1027_016 action_obfuscation –>|emprega| tech_T1140 action_obfuscation –>|leva a| action_sandbox_evasion action_sandbox_evasion –>|verifica para| tech_T1497_002 action_sandbox_evasion –>|leva a| action_credential_harvest action_credential_harvest –>|usa| tool_osascript action_credential_harvest –>|captura| tech_T1056_002 action_credential_harvest –>|extrai| tech_T1555_001 action_credential_harvest –>|extrai| tech_T1555_002 action_credential_harvest –>|leva a| action_defense_evasion action_defense_evasion –>|remove| tech_T1027_005 action_defense_evasion –>|leva a| action_browser_theft action_browser_theft –>|descobre| tech_T1217 action_browser_theft –>|rouba| tech_T1555_003 action_browser_theft –>|coleta| tech_T1606_001 action_browser_theft –>|leva a| action_notes_theft action_notes_theft –>|armazena em| action_data_staging action_data_staging –>|comprime com| tech_T1132 action_data_staging –>|usa codificação| tech_T1132_001 action_data_staging –>|leva a| action_c2 action_c2 –>|envia via| tool_curl action_c2 –>|usa| tech_T1102 action_c2 –>|leva a| action_persistence action_persistence –>|cria| tech_T1543_001 action_persistence –>|carrega com| tool_launchctl action_persistence –>|leva a| action_execution action_execution –>|executa com| tool_osascript action_execution –>|aproveita| tech_T1127_003 action_execution –>|disparado por| tech_T1546_009 "
Fluxo de Ataque
Detecções
Tentativa Possível de Enumeração do System_profiler (via criação de processo)
Ver
Possível Coleta por Entrada Local de Credenciais do macOS (via linha de comando)
Ver
Arquivo Foi Criado Na Pasta Temporária do MacOS (via evento de arquivo)
Ver
Possível Tentativa de Descoberta de Senha de Navegador do MacOS (via linha de comando)
Ver
Tentativa Suspeita de Execução do Curl [MacOS] (via linha de comando)
Ver
Possível Manipulação de Strings Codificadas em Base64 [MacOS] (via linha de comando)
Ver
Detecção de Execução de Comando Malicioso curl e Base64 [Criação de Processo Linux]
Ver
Detecção de Persistência de Ladrão macOS e Exfiltração de Dados [Evento de Arquivo Linux]
Ver
Execução de Simulação
Pré-requisito: A Verificação Pré-voo de Telemetria & Baseline deve ter sido aprovada.
Fundamentação: Esta seção detalha a execução precisa da técnica adversária (TTP) projetada para acionar a regra de detecção. Os comandos e a narrativa DEVEM refletir diretamente os TTPs identificados e visam gerar a telemetria exata esperada pela lógica de detecção.
-
Narrativa do Ataque & Comandos:
Um atacante que obteve acesso em nível de usuário na máquina da vítima deseja estabelecer persistência e exfiltrar credenciais coletadas.
- Persistência: O atacante escreve um plist malicioso de LaunchAgent no diretório padrão de LaunchAgents no macOS (simulado no coletor Linux via caminho do diretório de origem).
- Coleta de Dados: Arquivos sensíveis são copiados para uma pasta de preparação.
- Preparação para Exfiltração: Os dados preparados são arquivados em
/tmp/archive.tar.gzusando o utilitário nativotar. - Ativação: O atacante carrega o LaunchAgent com
launchctl, causando execução do código malicioso em cada login do usuário.
As linhas de comando exatas correspondem às strings monitoradas pela regra, garantindo que um alerta seja gerado.
-
Script de Teste de Regressão:
#!/usr/bin/env bash set -euo pipefail # 1. Crie um arquivo "roubado" fictício echo "senha123" > /tmp/credentials.txt # 2. Crie um plist malicioso de LaunchAgent (local simulado) PLIST_PATH="$HOME/Library/LaunchAgents/com.apple.mdworker.plist" mkdir -p "$(dirname "$PLIST_PATH")" cat > "$PLIST_PATH" <<EOF <?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.mdworker</string> <key>ProgramArguments</key> <array> <string>/usr/bin/cat</string> <string>/tmp/credentials.txt</string> </array> <key>RunAtLoad</key><true/> </dict> </plist> EOF # 3. Arquive os dados "roubados" (caminho exato que a regra monitora) tar -czf /tmp/archive.tar.gz -C /tmp credentials.txt # 4. Carregue o LaunchAgent (isso gera a linha de comando que a regra monitora) launchctl load "$PLIST_PATH" echo "Simulação completa – a detecção deve ter disparado." -
Comandos de Limpeza:
#!/usr/bin/env bash set -euo pipefail # Descarregue o LaunchAgent launchctl unload "$HOME/Library/LaunchAgents/com.apple.mdworker.plist" || true # Remova arquivos rm -f "$HOME/Library/LaunchAgents/com.apple.mdworker.plist" rm -f /tmp/archive.tar.gz rm -f /tmp/credentials.txt echo "Limpeza finalizada."