Torna agli aggiornamenti
New releaseAug 2, 2026

macnoise v0.2.1

Generatore di telemetria di sistema MacOS estensibile.

Condividi
Descrizione dell'immagine

CI Release

MacNoise

MacNoise genera telemetria macOS reale: connessioni di rete, scritture su file, avvio di processi, mutazioni di plist, sonde TCC e altro ancora. Puntalo verso una macchina che esegue il tuo stack EDR, SIEM o firewall e osserva cosa si attiva realmente, non ciò che la scheda tecnica del fornitore dichiara che si attiverà.

Per il contesto sulle motivazioni e sul design, consulta il post del blog di rilascio.

Avvio rapido

# 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

Categorie di telemetria

CategoriaDescrizione
networkConnessioni TCP, HTTP, listener, reverse shell, DNS e TLS
processEsecuzione esatta, invio di segnali, iniezione di dylib, bypass di Gatekeeper e osascript
fileScoperta limitata, letture/copie letterali, creazione, modifica, archiviazione, occultamento e crittografia esca
tccSonde sui permessi TCC con requisiti esatti di Accesso completo al disco, Contatti, Accessibilità o Registrazione schermo
credentialAccesso nativo all'archivio delle credenziali
volumeCreazione di immagini disco e ciclo di vita dei volumi montati
serviceEnumerazione di Launchd, persistenza LaunchAgent/Daemon, cron, profilo shell e Login Items
plistCreazione e modifica di plist
evasionCancellazione dei log, timestomping, rimozione della cronologia e mascheramento

Consulta il catalogo dei moduli generato per ogni modulo, parametro, output, tipo di evento, privilegio e mappatura ATT&CK.

Comandi

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 globali

FlagPredefinitoDescrizione
--formathumanFormato di output: human o jsonl
--output(nessuno)Scrive l'output su file (in aggiunta a stdout)
--verbosefalseOutput dettagliato, inclusi gli errori di pulizia
--dry-runfalseAnteprima delle azioni senza esecuzione
--no-cleanupfalseLascia gli artefatti del modulo al loro posto (vedi sotto)
--timeout30Timeout per modulo in secondi
--audit-log(nessuno)Scrive i record di audit OCSF 1.7.0 in un file JSONL
--config(nessuno)Carica i valori predefiniti da un file di configurazione YAML
--run-idgeneratoImposta l'identificatore di correlazione per questa esecuzione

Flusso di dati degli scenari

I file di scenario usano version: 1. Gli input e gli output dei moduli sono tipizzati, e un passaggio successivo vi fa riferimento tramite mappature esplicite anziché interpolazione di stringhe:

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

Solo gli output dichiarati da un modulo possono essere referenziati. Gli scenari locali possono essere riutilizzati con un passo include; gli include sono relativi, non possono risalire oltre la directory radice degli scenari, sono sottoposti a controllo dei cicli e sono limitati a otto livelli. MacNoise convalida il grafo completo prima dell'esecuzione, assegna alla run un workspace privato e ripulisce i moduli invocati in ordine inverso. Usa --input content=value per fornire gli input e --report report.json per il report di esecuzione versionato.

Lasciare gli artefatti in posizione

Per impostazione predefinita ogni modulo si annulla al termine. Di solito è ciò che si desidera, ma significa che una detection vede solo l'evento di install. Per validare che il tuo stack rilevi la persistenza stessa - un LaunchAgent presente in ~/Library/LaunchAgents, una voce cron, un profilo shell modificato - l'artefatto deve essere ancora lì quando viene eseguita la scansione:

./macnoise run svc_launch_agent --no-cleanup

Ogni modulo che salta la pulizia stampa una riga con il proprio nome, e il registro di audit registra cleanup_result: skipped anziché ok, così un'esecuzione che ha lasciato persistenza dietro di sé non viene mai confusa con una che ha ripulito. Usa macnoise info <module> per vedere cosa crea un determinato modulo.

Sei responsabile di rimuoverli tu stesso. Rieseguire lo stesso modulo senza il flag pulirà solo ciò che quell'esecuzione ha creato, non ciò che una precedente esecuzione con --no-cleanup ha lasciato dietro di sé.

Registrazione di audit

MacNoise scrive due flussi separati. Gli eventi di telemetria - ciò che il tuo EDR/SIEM vede effettivamente - vanno su stdout o --output. Un secondo flusso opzionale registra ciò che MacNoise stesso ha fatto: quali moduli sono stati eseguiti, gli esiti di prereq/cleanup e le mappature MITRE, in JSONL OCSF 1.7.0.

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

Ogni evento di telemetria porta un outcome autorevole e un subject tipizzato (schema 2.0). L'outcome indica cosa è successo all'azione tentata da MacNoise, mentre il subject identifica il file, il processo, l'endpoint di rete, il servizio o la risorsa coinvolti:

outcomeSignificatoIndicatore umano
executedL'azione è stata eseguita e ha fatto ciò che il modulo dichiara[+]
deniedL'azione è stata eseguita e l'ambiente l'ha rifiutata[-]
indeterminateL'azione è stata eseguita, ma non è possibile concludere nulla[?]
errorMacNoise stesso non è riuscito a portare a termine l'azione[!]

Una sonda TCC negata o un beacon verso un C2 morto è la telemetria che questo strumento esiste per generare, quindi è distinta da error, che significa che MacNoise stesso ha fallito. Il registro di audit registra lo stesso valore in unmapped.outcome. I parametri dichiarati sensibili vengono sostituiti con [REDACTED] nei record di audit gestiti e nell'identità della riga di comando.

Categorie