Voltar às atualizações
New releaseSep 3, 2026

macnoise v0.5.0

Gerador extensível de telemetria do sistema MacOS.

Compartilhar
Descrição da imagem

CI Release

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

CategoriaDescriçãoMódulos
networkConexões de saída, DNS, beaconing, listeners, reverse shells, TLS, exfiltraçãonet_connect, net_listen, net_beacon, net_revshell, net_dns, net_dns_exfil, net_tls, net_exfil
processSpawn de processos, entrega de sinais, injeção de dylib, descoberta, bypass de Gatekeeper, osascriptproc_spawn, proc_signal, proc_inject, proc_discovery, proc_gatekeeper, proc_osascript
fileCriação de arquivos, modificação, leituras de arquivos de credenciais e keychain, arquivamento, ocultaçãofile_create, file_modify, file_browser_creds, file_cred_files, file_keychain_copy, file_archive, file_hide
tccSondas de permissão TCC (FDA, Contatos, Keychain, Acessibilidade, Gravação de Tela)tcc_fda, tcc_contacts, tcc_keychain, tcc_accessibility, tcc_screen_recording
endpoint_securityGatilhos de eventos do framework ES, incluindo montagem de .dmg e execução de payloades_file, es_process, es_mount
servicePersistência via LaunchAgent/Daemon, cron, perfil de shell, Itens de Loginsvc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item
plistCriação e modificação de plistplist_create, plist_modify
xpcEnumeração de serviços XPCxpc_enumerate
evasionEvasão de defesa: limpeza de logs, timestomping, remoção de históricoevade_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

FlagPadrãoDescrição
--formathumanFormato de saída: human ou jsonl
--output(nenhum)Grava a saída em arquivo (além do stdout)
--verbosefalseSaída detalhada, incluindo erros de limpeza
--dry-runfalsePré-visualiza ações sem executar
--no-cleanupfalseDeixa artefatos do módulo no lugar (veja abaixo)
--timeout30Tempo 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:

outcomeSignificadoMarcador humano
executedA ação foi executada e fez o que o módulo afirma[+]
deniedA ação foi executada e o ambiente a recusou[-]
indeterminateA ação foi executada, mas nada pode ser concluído[?]
errorO 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:

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.

ArquivoDescrição
network_only.yamlTodos os módulos de rede
edr_validation.yamlCobertura abrangente de detecção EDR
full_sweep.yamlTodas as categorias
lazarus_group.yamlLazarus Group: injeção de dylib, descoberta de serviços, reverse shell, persistência via plist
amos_atomic_stealer.yamlAMOS / Atomic Stealer: infostealer MaaS, bypass de Gatekeeper, dump de keychain, exfiltração via ZIP, persistência via backdoor
clickfix.yamlClickFix: 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.

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.

Categorias