Zurück zu den Updates
New releaseAug 6, 2026

macnoise v0.3.0

Erweiterbarer Generator für MacOS-Systemtelemetrie.

Teilen
Description of image

CI Release

MacNoise

MacNoise erzeugt echte macOS-Telemetrie: Netzwerkverbindungen, Dateischreibvorgänge, Prozessstarts, Plist-Mutationen, TCC-Probes und mehr. Richte es auf eine Maschine mit deinem EDR-, SIEM- oder Firewall-Stack und sieh, was tatsächlich ausgelöst wird – nicht, was das Datenblatt des Anbieters behauptet.

Hintergrund zu Motivation und Design findest du im Release-Blogbeitrag.

Schnellstart

# 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

Telemetriekategorien

KategorieBeschreibung
networkTCP-Verbindungen, HTTP, Listener, Reverse Shells, DNS und TLS
processExakte Ausführung, Signalzustellung, Dylib-Injection, Gatekeeper-Bypass und osascript
fileBegrenzte Discovery, literale Lese-/Kopiervorgänge, Erstellung, Änderung, Archivierung, Verbergen und Decoy-Verschlüsselung
tccTCC-Berechtigungs-Probes mit exakten Anforderungen an Full Disk Access, Kontakte, Bedienungshilfen oder Bildschirmaufnahme
credentialZugriff auf den nativen Credential-Store
volumeErstellung von Disk-Images und Lebenszyklus gemounteter Volumes
serviceLaunchd-Enumeration, LaunchAgent/Daemon-Persistenz, Cron, Shell-Profil und Login Items
plistErstellung und Änderung von Plists
evasionLog-Löschung, Timestomping, Entfernung der History und Maskerade

Siehe den generierten Modulkatalog für jedes Modul, jeden Parameter, jede Ausgabe, jeden Ereignistyp, jede Berechtigung und jedes ATT&CK-Mapping.

Befehle

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

Globale Flags

FlagStandardBeschreibung
--formathumanAusgabeformat: human oder jsonl
--output(keine)Ausgabe in Datei schreiben (zusätzlich zu stdout)
--verbosefalseAusführliche Ausgabe einschließlich Cleanup-Fehlern
--dry-runfalseAktionen ohne Ausführung vorab anzeigen
--no-cleanupfalseModulartefakte an Ort und Stelle belassen (siehe unten)
--timeout30Timeout pro Modul in Sekunden
--audit-log(keine)OCSF 1.7.0-Audit-Datensätze in eine JSONL-Datei schreiben
--config(keine)Standardwerte aus einer YAML-Konfigurationsdatei laden
--run-idgeneriertKorrelationsbezeichner für diesen Lauf festlegen

Szenario-Datenfluss

Szenariodateien verwenden version: 1. Eingaben und Modulausgaben sind typisiert, und ein späterer Schritt referenziert sie mit expliziten Mappings statt String-Interpolation:

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

Nur von einem Modul deklarierte Ausgaben können referenziert werden. Lokale Szenarien können mit einem include-Schritt wiederverwendet werden; Includes sind relativ, können nicht über das Stammverzeichnis des Szenarios hinausgehen, werden auf Zyklen geprüft und sind auf acht Ebenen begrenzt. MacNoise validiert den vollständigen Graphen vor der Ausführung, gibt dem Lauf einen privaten Workspace und bereinigt aufgerufene Module in umgekehrter Reihenfolge. Verwende --input content=value, um Eingaben bereitzustellen, und --report report.json für den versionierten Ausführungsbericht.

Artefakte an Ort und Stelle belassen

Standardmäßig macht jedes Modul seine Änderungen rückgängig, wenn es fertig ist. Das ist normalerweise gewünscht, bedeutet aber, dass eine Erkennung nur das Installations-Ereignis sieht. Um zu validieren, dass dein Stack die Persistenz selbst erkennt – einen LaunchAgent in ~/Library/LaunchAgents, einen Cron-Eintrag, ein geändertes Shell-Profil –, muss das Artefakt noch vorhanden sein, wenn der Scan läuft:

./macnoise run svc_launch_agent --no-cleanup

Jedes Modul, das das Cleanup überspringt, gibt eine Zeile mit seinem eigenen Namen aus, und das Audit-Log zeichnet cleanup_result: skipped statt ok auf, sodass ein Lauf, der Persistenz hinterlassen hat, niemals mit einem verwechselt wird, der aufgeräumt hat. Verwende macnoise info <module>, um zu sehen, was ein bestimmtes Modul erstellt.

Du bist dafür verantwortlich, diese selbst zu entfernen. Ein erneutes Ausführen desselben Moduls ohne das Flag bereinigt nur das, was dieser Lauf erstellt hat, nicht das, was ein vorheriger --no-cleanup-Lauf hinterlassen hat.

Audit-Logging

MacNoise schreibt zwei separate Streams. Telemetrieereignisse – was dein EDR/SIEM tatsächlich sieht – gehen nach stdout oder --output. Ein zweiter, optionaler Stream zeichnet auf, was MacNoise selbst getan hat: welche Module liefen, Ergebnisse von Voraussetzungen/Cleanup und MITRE-Mappings, in OCSF 1.7.0 JSONL.

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

Jedes Telemetrieereignis trägt ein maßgebliches outcome und ein typisiertes subject (Schema 2.0). Das Outcome sagt, was mit der von MacNoise versuchten Aktion geschehen ist, während das Subject die beteiligte Datei, den Prozess, den Netzwerkendpunkt, den Dienst oder die Ressource identifiziert:

outcomeBedeutungMenschlicher Marker
executedDie Aktion lief und tat, was das Modul behauptet[+]
deniedDie Aktion lief und die Umgebung verweigerte sie[-]
indeterminateDie Aktion lief, aber es kann nichts geschlossen werden[?]
errorMacNoise selbst konnte die Aktion nicht ausführen[!]

Eine verweigerte TCC-Probe oder ein Beacon zu einem toten C2 ist die Telemetrie, für deren Erzeugung dieses Tool existiert, daher unterscheidet sie sich von error, was bedeutet, dass MacNoise selbst fehlgeschlagen ist. Das Audit-Log zeichnet denselben Wert unter unmapped.outcome auf. Als sensibel deklarierte Parameter werden in verwalteten Audit-Datensätzen und in der Kommandozeilen-Identität durch [REDACTED] ersetzt.

Kategorien