Torna agli aggiornamenti
New releaseAug 6, 2026

macnoise v0.3.0

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, spawn di processi, mutazioni di plist, probe TCC e altro. Puntalo verso una macchina che esegue il tuo stack EDR, SIEM o firewall e osserva cosa scatta davvero - non ciò che la scheda tecnica del vendor afferma che scatti.

Per il contesto su motivazione e design, consulta il post del blog di rilascio.

Avvio Rapido

# Build (aggiungi build-amd64 / build-arm64 per cross-compilare per Darwin, o release per entrambi)
make build

# Elenca i moduli disponibili
./macnoise list

# Esegui un singolo modulo
./macnoise run net_connect --param target=127.0.0.1 --param port=8080

# Anteprima senza eseguire
./macnoise run svc_launch_agent --dry-run

# Esegui tutti i moduli di rete
./macnoise run --category network

# Esegui uno scenario
./macnoise scenario configs/scenarios/edr_validation.yaml

# Emetti output JSONL strutturato
./macnoise run --category file --format jsonl --output /tmp/events.jsonl

Categorie di Telemetria

CategoriaDescrizioneModuli
networkConnessioni in uscita, DNS, beaconing, listener, reverse shell, esfiltrazionenet_connect, net_listen, net_beacon, net_revshell, net_dns, net_exfil
processSpawn di processi, invio di segnali, iniezione di dylib, discovery, bypass di Gatekeeper, osascriptproc_spawn, proc_signal, proc_inject, proc_discovery, proc_gatekeeper, proc_osascript
fileCreazione di file, modifica, letture di file di credenziali e portachiavi, archiviazione, occultamentofile_create, file_modify, file_browser_creds, file_cred_files, file_keychain_copy, file_archive, file_hide
tccProbe dei permessi TCC (FDA, Contatti, Portachiavi, Accessibilità, Registrazione Schermo)tcc_fda, tcc_contacts, tcc_keychain, tcc_accessibility, tcc_screen_recording
endpoint_securityTrigger di eventi del framework ES, inclusi mount di .dmg ed esecuzione di payloades_file, es_process, es_mount
servicePersistenza LaunchAgent/Daemon, cron, profilo shell, elementi di accessosvc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item
plistCreazione e modifica di plistplist_create, plist_modify
xpcEnumerazione dei servizi XPCxpc_enumerate

Comandi

macnoise run <module> [--param key=val ...]   Esegue un modulo specifico
macnoise run --category <cat>                 Esegue tutti i moduli di una categoria
macnoise run --all                            Esegue tutti i moduli
macnoise list [--category <cat>]              Elenca i moduli
macnoise info <module>                        Mostra dettagli del modulo, parametri, MITRE
macnoise scenario <file.yaml>                 Esegue uno scenario YAML
macnoise categories                           Elenca le categorie con i conteggi
macnoise version                              Stampa la versione

Flag Globali

FlagDefaultDescrizione
--formathumanFormato di output: human o jsonl
--output(nessuno)Scrive l'output su file (in aggiunta a stdout)
--verbosefalseOutput dettagliato inclusi gli errori di cleanup
--dry-runfalseAnteprima delle azioni senza eseguirle
--no-cleanupfalseLascia gli artefatti dei moduli in posizione (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 default da un file di configurazione YAML

Lasciare Artefatti in Posizione

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

./macnoise run svc_launch_agent --no-cleanup

Ogni modulo che salta il cleanup stampa una riga che lo identifica, e il log di audit registra cleanup_result: skipped invece di ok, così un'esecuzione che ha lasciato persistenza 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 quella esecuzione ha creato, non ciò che una precedente esecuzione con --no-cleanup ha lasciato.

Log di Audit

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

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

Ogni evento di telemetria porta un outcome insieme a success (schema 1.1). success indica se MacNoise ha funzionato; outcome indica cosa è successo all'azione tentata:

outcomeSignificatoMarcatore 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 si può concludere nulla[?]
errorMacNoise stesso non è riuscito a portare a termine l'azione[!]

Un probe TCC negato o un beacon verso un C2 morto è la telemetria che questo strumento esiste per generare, quindi questi restano success: true e vengono distinti tramite outcome. Solo error imposta success: false. Nel log di audit lo stesso valore appare in unmapped.outcome, poiché lo status OCSF registra un'azione rifiutata e uno strumento guasto in modo identico.

Il log di audit si apre in modalità append, quindi i record di più esecuzioni si accumulano in un unico file per l'analisi batch. Se stai aggiungendo un modulo e vuoi sapere come un nuovo tipo di evento viene classificato in OCSF, consulta CONTRIBUTING.md.

Riferimento Moduli

La documentazione dei moduli vive accanto a ciascuna categoria:

Scenari

Gli scenari concatenano i moduli in sequenze ordinate - un singolo file YAML che riproduce un pattern di intrusione multi-fase contro le tue rilevazioni.

FileDescrizione
network_only.yamlTutti i moduli di rete
edr_validation.yamlCopertura completa delle rilevazioni EDR
full_sweep.yamlTutte le categorie
lazarus_group.yamlLazarus Group: iniezione dylib, discovery dei servizi, reverse shell, persistenza plist
amos_atomic_stealer.yamlAMOS / Atomic Stealer: infostealer MaaS, bypass di Gatekeeper, dump del portachiavi, esfiltrazione ZIP, persistenza backdoor

I due scenari APT seguono sequenze di intrusione reali e documentate, tecnica per tecnica - ogni file YAML cita l'intelligence sulle minacce effettiva da cui è costruito e annota ogni passaggio con la tecnica MITRE che esercita, quindi inizia da lì per la ripartizione completa piuttosto che per una riscrittura qui.

Prima prova in dry-run:

./macnoise scenario configs/scenarios/<scenario>.yaml --dry-run

Cross-reference con il tuo SIEM/EDR: ogni commento di passaggio nomina la tecnica che dovrebbe attivare. Nessun alert corrispondente dopo un'esecuzione reale è una lacuna nella tua copertura.

Scrivere i tuoi:

name: Il Mio Scenario Personalizzato
steps:
  - module: net_connect
    params:
      target: "192.168.1.1"
      port: "443"
  - category: file
    params:
      base_dir: "/tmp/test"

Contribuire

Consulta CONTRIBUTING.md per aggiungere nuovi moduli, stile del codice e l'intero processo di PR.

I rilasci sono automatizzati - release-please taglia una nuova versione direttamente dal titolo della tua PR Conventional Commit, quindi feat: add net_tls module o fix: correct beacon jitter è sia il titolo della tua PR che la voce del changelog.

Disclaimer

MacNoise è pensato per test di sicurezza autorizzati, validazione EDR e ingegneria delle rilevazioni su sistemi di tua proprietà o per i quali hai esplicita autorizzazione scritta al test. Gli autori non si assumono alcuna responsabilità per un uso improprio.

Politica sul Codice AI

I contributi di codice AI sono ben accetti, ma tieni presente che la revisione del codice sarà attualmente un processo guidato da esseri umani, il che significa che possiamo revisionare solo una quantità limitata di codice. Ti preghiamo di limitare le PR a una correzione specifica o a un nuovo modulo di telemetria. Le PR con modifiche estese verranno probabilmente chiuse.

Categorie