
macnoise v0.5.0
Gerador extensível de telemetria do sistema MacOS.
MacNoise
O MacNoise gera telemetria real do macOS: conexões de rede, gravações de arquivos, spawns de processos, mutações de plist, sondas de TCC e muito mais. Aponte-o para uma máquina que executa sua pilha de EDR, SIEM ou firewall e veja o que realmente dispara — não o que a ficha técnica do fornecedor afirma que disparará.
Para obter contexto sobre a motivação e o design, consulte a postagem do blog de lançamento.
Início Rápido
# Compilar (adicione build-amd64 / build-arm64 para compilar de forma cruzada para Darwin, ou release para ambos)
make build
# Listar módulos disponíveis
./macnoise list
# Executar um único módulo
./macnoise run net_connect --param target=127.0.0.1 --param port=8080
# Pré-visualizar sem executar
./macnoise run svc_launch_agent --dry-run
# Executar todos os módulos de rede
./macnoise run --category network
# Executar um cenário
./macnoise scenario configs/scenarios/edr_validation.yaml
# Emitir saída JSONL estruturada
./macnoise run --category file --format jsonl --output /tmp/events.jsonl
Categorias de Telemetria
| Categoria | Descrição | Módulos |
|---|---|---|
network | Conexões de saída, DNS, beaconing, listeners, reverse shells, TLS, exfiltração | net_connect, net_listen, net_beacon, net_revshell, net_dns, net_dns_exfil, net_tls, net_exfil |
process | Spawn de processos, entrega de sinais, injeção de dylib, descoberta, bypass de Gatekeeper, osascript | proc_spawn, proc_signal, proc_inject, proc_discovery, proc_gatekeeper, proc_osascript |
file | Criação de arquivos, modificação, leituras de arquivos de credenciais e keychain, arquivamento, ocultação | file_create, file_modify, file_browser_creds, file_cred_files, file_keychain_copy, file_archive, file_hide |
tcc | Sondas de permissão TCC (FDA, Contatos, Keychain, Acessibilidade, Gravação de Tela) | tcc_fda, tcc_contacts, tcc_keychain, tcc_accessibility, tcc_screen_recording |
endpoint_security | Gatilhos de eventos do framework ES, incluindo montagem de .dmg e execução de payload | es_file, es_process, es_mount |
service | Persistência via LaunchAgent/Daemon, cron, perfil de shell, Itens de Login | svc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item |
plist | Criação e modificação de plist | plist_create, plist_modify |
xpc | Enumeração de serviços XPC | xpc_enumerate |
evasion | Evasão de defesa: limpeza de logs, timestomping, remoção de histórico | evade_log_clear |
Comandos
macnoise run <module> [--param key=val ...] Executa um módulo específico
macnoise run --category <cat> Executa todos os módulos de uma categoria
macnoise run --all Executa todos os módulos
macnoise list [--category <cat>] Lista módulos
macnoise info <module> Mostra detalhes do módulo, parâmetros, MITRE
macnoise scenario <file.yaml> Executa um cenário YAML
macnoise categories Lista categorias com contagens
macnoise version Exibe a versão
Flags Globais
| Flag | Padrão | Descrição |
|---|---|---|
--format | human | Formato de saída: human ou jsonl |
--output | (nenhum) | Grava a saída em arquivo (além do stdout) |
--verbose | false | Saída detalhada, incluindo erros de limpeza |
--dry-run | false | Pré-visualiza ações sem executar |
--no-cleanup | false | Deixa artefatos do módulo no lugar (veja abaixo) |
--timeout | 30 | Tempo limite por módulo em segundos |
--audit-log | (nenhum) | Grava registros de auditoria OCSF 1.7.0 em um arquivo JSONL |
--config | (nenhum) | Carrega padrões de um arquivo de configuração YAML |
Deixando Artefatos no Lugar
Por padrão, todo módulo se reverte ao terminar. Isso geralmente é o que você deseja, mas significa que uma detecção só vê o evento de instalação. Para validar que sua pilha detecta a persistência em si — um LaunchAgent em ~/Library/LaunchAgents, uma entrada de cron, um perfil de shell modificado — o artefato precisa ainda estar lá quando a varredura for executada:
./macnoise run svc_launch_agent --no-cleanup
Cada módulo que pula a limpeza imprime uma linha nomeando a si mesmo, e o registro de auditoria grava cleanup_result: skipped em vez de ok, para que uma execução que deixou persistência para trás nunca seja confundida com uma que fez a limpeza. Use macnoise info <module> para ver o que um determinado módulo cria.
Você é responsável por removê-los você mesmo. Reexecutar o mesmo módulo sem a flag limpará apenas o que essa execução criou, não o que uma execução anterior com --no-cleanup deixou para trás.
Registro de Auditoria
O MacNoise grava dois fluxos separados. Eventos de telemetria — o que seu EDR/SIEM realmente vê — vão para o stdout ou --output. Um segundo fluxo, opcional, registra o que o próprio MacNoise fez: quais módulos foram executados, resultados de pré-requisitos/limpeza e mapeamentos MITRE, em JSONL OCSF 1.7.0.
./macnoise scenario configs/scenarios/amos_atomic_stealer.yaml --audit-log /tmp/audit.jsonl
Todo evento de telemetria carrega um outcome junto com success (esquema 1.1). success indica se o MacNoise funcionou; outcome indica o que aconteceu com a ação que ele tentou:
outcome | Significado | Marcador humano |
|---|---|---|
executed | A ação foi executada e fez o que o módulo afirma | [+] |
denied | A ação foi executada e o ambiente a recusou | [-] |
indeterminate | A ação foi executada, mas nada pode ser concluído | [?] |
error | O próprio MacNoise falhou ao realizar a ação | [!] |
Uma sonda TCC negada ou um beacon para um C2 morto é a telemetria que esta ferramenta existe para gerar, então eles permanecem com success: true e são diferenciados por outcome. Apenas error define success: false. No registro de auditoria, o mesmo valor aparece em unmapped.outcome, pois o status do OCSF registra uma ação recusada e uma ferramenta quebrada de forma idêntica.
O registro de auditoria abre em modo de anexação, então registros de múltiplas execuções se acumulam em um único arquivo para análise em lote. Se você estiver adicionando um módulo e quiser saber como um novo tipo de evento é classificado no OCSF, consulte CONTRIBUTING.md.
Referência de Módulos
A documentação dos módulos fica junto de cada categoria:
| Categoria | README |
|---|---|
network | modules/network/README.md |
process | modules/process/README.md |
file | modules/file/README.md |
tcc | modules/tcc/README.md |
endpoint_security | modules/endpoint_security/README.md |
service | modules/service/README.md |
plist | modules/plist/README.md |
xpc | modules/xpc/README.md |
evasion | modules/evasion/README.md |
Cenários
Os cenários encadeiam módulos em sequências ordenadas — um único arquivo YAML que reproduz um padrão de intrusão em múltiplos estágios contra suas detecções.
| Arquivo | Descrição |
|---|---|
network_only.yaml | Todos os módulos de rede |
edr_validation.yaml | Cobertura abrangente de detecção EDR |
full_sweep.yaml | Todas as categorias |
lazarus_group.yaml | Lazarus Group: injeção de dylib, descoberta de serviços, reverse shell, persistência via plist |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: infostealer MaaS, bypass de Gatekeeper, dump de keychain, exfiltração via ZIP, persistência via backdoor |
clickfix.yaml | ClickFix: one-liner ofuscado colado no Terminal, decode base64, busca de segundo estágio, persistência via LaunchAgent |
Os dois cenários de APT seguem sequências reais documentadas de intrusão, técnica por técnica — cada arquivo YAML cita a inteligência de ameaças real na qual se baseia e anota cada etapa com a técnica MITRE que exercita, então comece por lá para a análise completa em vez de uma recontagem aqui.
Dry-run primeiro:
./macnoise scenario configs/scenarios/<scenario>.yaml --dry-run
Referência cruzada com seu SIEM/EDR: cada comentário de etapa nomeia a técnica que deve disparar. Nenhum alerta correspondente após uma execução real é uma lacuna em sua cobertura.
Escrevendo o seu próprio:
name: Meu Cenário Personalizado
steps:
- module: net_connect
params:
target: "192.168.1.1"
port: "443"
- category: file
params:
base_dir: "/tmp/test"
Contribuindo
Consulte CONTRIBUTING.md para adicionar novos módulos, estilo de código e o processo completo de PR.
Os lançamentos são automatizados — o release-please gera uma nova versão diretamente do título do seu PR Conventional Commit, então feat: add net_tls module ou fix: correct beacon jitter é tanto o título do seu PR quanto sua entrada de changelog.
Aviso Legal
O MacNoise é destinado a testes de segurança autorizados, validação de EDR e engenharia de detecção em sistemas que você possui ou para os quais tem permissão explícita por escrito para testar. Os autores não assumem responsabilidade por uso indevido.
Política de Código com IA
Contribuições de código com IA são bem-vindas, mas lembre-se de que a revisão de código atualmente será um processo conduzido por humanos, o que significa que há apenas uma quantidade limitada de código que podemos revisar. Por favor, limite os PRs a uma correção específica ou a um novo módulo de telemetria. PRs com mudanças extensas provavelmente serão fechados.