
Gerador extensível de telemetria do sistema MacOS.
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.
# 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
| Categoria | Descrição |
|---|---|
network | Conexões TCP, HTTP, listeners, reverse shells, DNS e TLS |
process | Execução exata, entrega de sinais, injeção de dylib, bypass do Gatekeeper e osascript |
file | Descoberta limitada, leituras/cópias literais, criação, modificação, arquivamento, ocultação e criptografia de iscas |
tcc | Sondagens de permissão TCC com requisitos exatos de Acesso Total ao Disco, Contatos, Acessibilidade ou Gravação de Tela |
credential | Acesso nativo ao armazenamento de credenciais |
volume | Criação de imagem de disco e ciclo de vida de volume montado |
service | Enumeração do Launchd, persistência via LaunchAgent/Daemon, cron, perfil de shell e Itens de Login |
plist | Criação e modificação de plist |
evasion | Limpeza 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.
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
| 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 as ações sem executá-las |
--no-cleanup | false | Deixa os artefatos do módulo no lugar (veja abaixo) |
--timeout | 30 | Timeout 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-id | gerado | Define o identificador de correlação para esta execução |
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.
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.
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:
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 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.