
Gerador extensível de telemetria do sistema MacOS.
O MacNoise gera telemetria real do macOS: conexões de rede, gravações de arquivos, spawn de processos, mutações de plist, sondas TCC e muito mais. Aponte-o para uma máquina que execute seu EDR, SIEM ou firewall e veja o que realmente dispara — não o que a ficha técnica do fornecedor afirma que disparará.
Para contexto sobre a motivação e o design, consulte o post do blog de lançamento.
# Build (adicione build-amd64 / build-arm64 para cross-compile para Darwin, ou release para ambos)
make build
# Liste os módulos disponíveis
./macnoise list
# Execute um único módulo
./macnoise run net_connect --param target=127.0.0.1 --param port=8080
# Pré-visualize sem executar
./macnoise run svc_launch_agent --dry-run
# Execute todos os módulos de rede
./macnoise run --category network
# Execute um cenário
./macnoise scenario configs/scenarios/edr_validation.yaml
# Emita saída estruturada em JSONL
./macnoise run --category file --format jsonl --output /tmp/events.jsonl
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 Imprime a versão
Por padrão, todo módulo se desfaz de si mesmo ao terminar. Geralmente é o que você quer, mas isso significa que uma detecção só vê o evento de instalação. Para validar que sua stack detecta a própria persistência — um LaunchAgent em ~/Library/LaunchAgents, uma entrada de cron, um perfil de shell modificado — o artefato precisa continuar lá quando a varredura rodar:
./macnoise run svc_launch_agent --no-cleanup
Cada módulo que pula a limpeza imprime uma linha que o identifica, e o log de auditoria registra 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 arrumou tudo. Use macnoise info <module> para ver o que cada módulo cria.
Você é responsável por removê-los você mesmo. Reexecutar o mesmo módulo sem a flag limpará apenas o que aquela execução criou, não o que uma execução anterior com --no-cleanup deixou para trás.
O MacNoise grava dois fluxos separados. Os 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 rodaram, resultados de pré-requisitos/limpeza e mapeamentos MITRE, em OCSF 1.7.0 JSONL.
./macnoise scenario configs/scenarios/amos_atomic_stealer.yaml --audit-log /tmp/audit.jsonl
Todo evento de telemetria carrega um outcome junto com success (schema 1.1). success indica se o MacNoise funcionou; outcome indica o que aconteceu com a ação que ele tentou:
Uma sonda TCC negada ou um beacon para um C2 morto é a telemetria que esta ferramenta existe para gerar, então eles permanecem success: true e são diferenciados por outcome. Apenas error define success: false. No log de auditoria, o mesmo valor aparece em unmapped.outcome, já que o status do OCSF registra uma ação recusada e uma ferramenta quebrada de forma idêntica.
O log de auditoria abre em modo de anexação, então registros de várias 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.
A documentação dos módulos fica junto de cada categoria:
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.
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 da qual foi construído e anota cada etapa com a técnica MITRE que ela exercita. Portanto, comece por lá para o detalhamento completo, em vez de uma recontagem aqui.
Faça um dry-run primeiro:
./macnoise scenario configs/scenarios/<scenario>.yaml --dry-run
Faça a referência cruzada com seu SIEM/EDR: o comentário de cada etapa nomeia a técnica que deve disparar. Nenhum alerta correspondente após uma execução real é uma lacuna na sua cobertura.
Escrevendo o seu próprio:
name: My Custom Scenario
steps:
- module: net_connect
params:
target: "192.168.1.1"
port: "443"
- category: file
params:
base_dir: "/tmp/test"
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 a entrada do seu changelog.
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.
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 só há uma quantidade limitada de código que podemos revisar. 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.
| Categoria | Descrição | Módulos |
|---|
network | Conexões de saída, DNS, beaconing, listeners, reverse shells, exfiltração | net_connect, net_listen, net_beacon, net_revshell, net_dns, net_exfil |
process | Spawn de processos, envio 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 e modificação de arquivos, 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 |
| 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 |
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 | [!] |
| 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 |
| 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 | Grupo Lazarus: injeção de dylib, descoberta de serviços, reverse shell, persistência em plist |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: infostealer MaaS, bypass de Gatekeeper, dump de keychain, exfiltração via ZIP, persistência de backdoor |