
macnoise v0.2.1
Gerador de telemetria do sistema MacOS extensível.
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
| 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, contorno 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ões 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 imagens de disco e ciclo de vida de volumes montados |
service | Enumeração de Launchd, persistência de LaunchAgent/Daemon, cron, perfil de shell e Itens de Início de Sessão |
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.
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
| Flag | Padrão | Descrição |
|---|---|---|
--format | human | Formato de saída: human ou jsonl |
--output | (nenhum) | Escreve 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 | Mantém os artefatos do módulo no lugar (veja abaixo) |
--timeout | 30 | Tempo 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-id | gerado | Define 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:
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 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.