Voltar às atualizações
New releaseAug 2, 2026

macnoise v0.2.1

Gerador de telemetria do sistema MacOS extensível.

Compartilhar
Descrição da imagem

CI Release

MacNoise

O MacNoise gera telemetria real do macOS: conexões de rede, gravações de arquivos, criação de processos, mutações de plist, sondagens de TCC e muito mais. Aponte-o para uma máquina executando 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 vai disparar.

Para contexto sobre a motivação e o design, consulte o post do blog de lançamento.

Início Rápido

# Build (add build-amd64 / build-arm64 to cross-compile for Darwin, or release for both)
make build

# List available modules
./macnoise list

# Run a single module
./macnoise run net_connect --param target=127.0.0.1 --param port=8080

# Preview without executing
./macnoise run svc_launch_agent --dry-run

# Run all network modules
./macnoise run --category network

# Run a scenario
./macnoise scenario configs/scenarios/edr_validation.yaml

# Emit structured JSONL output
./macnoise scenario configs/scenarios/file_flow.yaml --format jsonl --output /tmp/events.jsonl

Categorias de Telemetria

CategoriaDescrição
networkConexões TCP, HTTP, listeners, reverse shells, DNS e TLS
processExecução exata, entrega de sinais, injeção de dylib, contorno do Gatekeeper e osascript
fileDescoberta limitada, leituras/cópias literais, criação, modificação, arquivamento, ocultação e criptografia de iscas
tccSondagens de permissões TCC com requisitos exatos de Acesso Total ao Disco, Contatos, Acessibilidade ou Gravação de Tela
credentialAcesso nativo ao armazenamento de credenciais
volumeCriação de imagens de disco e ciclo de vida de volumes montados
serviceEnumeração de Launchd, persistência de LaunchAgent/Daemon, cron, perfil de shell e Itens de Início de Sessão
plistCriação e modificação de Plist
evasionLimpeza de logs, timestomping, remoção de histórico e mascaramento

Consulte o catálogo de módulos gerado para cada módulo, parâmetro, saída, tipo de evento, privilégio e mapeamento ATT&CK.

Comandos

macnoise run <module> [--param key=val ...]   Run a specific module
macnoise run --category <cat>                 Run all modules in a category
macnoise run --all                            Run all modules
macnoise list [--category <cat>]              List modules
macnoise info <module>                        Show module details, params, MITRE
macnoise scenario <file.yaml> [--input key=val] [--report report.json]
                                                Run a YAML scenario
macnoise categories                           List categories with counts
macnoise version                              Print version

Flags Globais

FlagPadrãoDescrição
--formathumanFormato de saída: human ou jsonl
--output(nenhum)Escreve a saída em arquivo (além do stdout)
--verbosefalseSaída detalhada, incluindo erros de limpeza
--dry-runfalsePré-visualiza as ações sem executá-las
--no-cleanupfalseMantém os artefatos do módulo no lugar (veja abaixo)
--timeout30Tempo limite por módulo em segundos
--audit-log(nenhum)Escreve registros de auditoria OCSF 1.7.0 em um arquivo JSONL
--config(nenhum)Carrega os padrões de um arquivo de configuração YAML
--run-idgeradoDefine o identificador de correlação para esta execução

Fluxo de dados de cenário

Os arquivos de cenário usam version: 1. As entradas e as saídas dos módulos são tipadas, e uma etapa posterior faz referência a elas com mapeamentos explícitos em vez de interpolação de strings:

version: 1
name: Archive one generated artifact
on_error: stop
inputs:
  content:
    type: string
    required: true
steps:
  # Custom modules declare these outputs through OutputSpecs.
  - id: create
    module: custom_create
    params:
      content:
        input: content
  - id: archive
    module: custom_archive
    params:
      source:
        output: create.path
outputs:
  archive:
    output: archive.path

Apenas as saídas declaradas por um módulo podem ser referenciadas. Cenários locais podem ser reutilizados com um passo include; os includes são relativos, não podem ultrapassar o diretório raiz de cenários, são verificados quanto a ciclos e estão limitados a oito níveis. O MacNoise valida o grafo completo antes da execução, atribui à execução um workspace privado e limpa os módulos invocados pela ordem inversa. Utilize --input content=value para fornecer entradas e --report report.json para o relatório de execução versionado.

Deixar Artefactos no Local

Por predefinição, cada módulo reverte-se a si próprio quando termina. É normalmente o que se pretende, mas significa que uma deteção apenas vê o evento de instalação. Para validar que a sua stack deteta a própria persistência — um LaunchAgent presente em ~/Library/LaunchAgents, uma entrada cron, um perfil de shell modificado — o artefacto tem de ainda estar lá quando a análise é executada:

./macnoise run svc_launch_agent --no-cleanup

Cada módulo que ignora a limpeza imprime uma linha com o próprio nome, e o log de auditoria registra cleanup_result: skipped em vez de ok, de modo que uma execução que deixou persistência para trás nunca é confundida com uma que fez a limpeza. Use macnoise info <module> para ver o que um determinado módulo cria.

Você é responsável por remover isso por conta própria. Executar novamente 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.

Registro de Auditoria

O MacNoise grava dois fluxos separados. Os eventos de telemetria — o que seu EDR/SIEM realmente vê — vão para stdout ou --output. Um segundo fluxo opcional registra o que o próprio MacNoise fez: quais módulos foram executados, os resultados de prereq/cleanup e os mapeamentos MITRE, em JSONL no formato OCSF 1.7.0.

./macnoise scenario configs/scenarios/amos_atomic_stealer.yaml --audit-log /tmp/audit.jsonl

Cada evento de telemetria carrega um outcome autoritativo e um subject tipado (schema 2.0). O outcome indica o que aconteceu com a ação que o MacNoise tentou executar, enquanto o subject identifica o arquivo, processo, endpoint de rede, serviço ou recurso envolvido:

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 executar a ação[!]

Uma sondagem TCC negada ou um beacon para um C2 morto é a telemetria que esta ferramenta existe para gerar, portanto é distinta de error, que significa que o próprio MacNoise falhou. O log de auditoria registra o mesmo valor em unmapped.outcome. Parâmetros declarados como sensíveis são substituídos por [REDACTED] em registros de auditoria gerenciados e na identidade de linha de comando.

Categorias