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, bypass do Gatekeeper e osascript
fileDescoberta limitada, leituras/cópias literais, criação, modificação, arquivamento, ocultação e criptografia de iscas
tccSondagens de permissão 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 imagem de disco e ciclo de vida de volume montado
serviceEnumeração do Launchd, persistência via LaunchAgent/Daemon, cron, perfil de shell e Itens de Login
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)Grava 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-cleanupfalseDeixa os artefatos do módulo no lugar (veja abaixo)
--timeout30Timeout 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
--run-idgeradoDefine o identificador de correlação para esta execução

Fluxo de dados de cenários

Arquivos de cenário usam version: 1. Entradas e saídas de módulos são tipadas, e um passo posterior as referencia 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 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 atravessar acima do diretório raiz do cenário, são verificados quanto a ciclos e são limitados a oito níveis. O MacNoise valida o grafo completo antes da execução, concede à execução um workspace privado e limpa os módulos invocados em ordem reversa. Use --input content=value para fornecer entradas e --report report.json para o relatório de execução versionado.

Deixando Artefatos no Lugar

Por padrão, todo módulo se reverte quando termina. Isso geralmente é o que você quer, 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 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 fez a limpeza. Use macnoise info <module> para ver o que um determinado módulo cria.

Você é responsável por removê-los por conta própria. 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.

Registro de Auditoria

O MacNoise grava dois fluxos separados. 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, 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 autoritativo e um subject tipado (schema 2.0). O outcome diz o que aconteceu com a ação que o MacNoise tentou, 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 em executar a ação[!]

Uma sondagem TCC negada ou um beacon para um C2 morto é a telemetria que esta ferramenta existe para gerar, então é 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 da linha de comando.

Categorias