
macnoise v0.5.0
Erweiterbarer Generator für MacOS-Systemtelemetrie.
MacNoise
MacNoise erzeugt echte macOS-Telemetrie: Netzwerkverbindungen, Dateischreibvorgänge, Prozessstarts, Plist-Mutationen, TCC-Sonden und mehr. Richten Sie es auf eine Maschine, auf der Ihr EDR-, SIEM- oder Firewall-Stack läuft, und sehen Sie, was tatsächlich ausgelöst wird – nicht das, was das Datenblatt des Anbieters behauptet.
Hintergrund zu Motivation und Design finden Sie im Release-Blogbeitrag.
Schnellstart
# Build (build-amd64 / build-arm64 für Cross-Compile auf Darwin hinzufügen, oder release für beides)
make build
# Verfügbare Module auflisten
./macnoise list
# Ein einzelnes Modul ausführen
./macnoise run net_connect --param target=127.0.0.1 --param port=8080
# Vorschau ohne Ausführung
./macnoise run svc_launch_agent --dry-run
# Alle Netzwerkmodule ausführen
./macnoise run --category network
# Ein Szenario ausführen
./macnoise scenario configs/scenarios/edr_validation.yaml
# Strukturierte JSONL-Ausgabe erzeugen
./macnoise run --category file --format jsonl --output /tmp/events.jsonl
Telemetriekategorien
| Kategorie | Beschreibung | Module |
|---|---|---|
network | Ausgehende Verbindungen, DNS, Beaconing, Listener, Reverse Shells, TLS, Exfiltration | net_connect, net_listen, net_beacon, net_revshell, net_dns, net_dns_exfil, net_tls, net_exfil |
process | Prozessstart, Signalzustellung, Dylib-Injektion, Discovery, Gatekeeper-Bypass, osascript | proc_spawn, proc_signal, proc_inject, proc_discovery, proc_gatekeeper, proc_osascript |
file | Dateierstellung, -änderung, Lesen von Anmeldedaten- und Schlüsselbunddateien, Archivierung, Verstecken | file_create, file_modify, file_browser_creds, file_cred_files, file_keychain_copy, file_archive, file_hide |
tcc | TCC-Berechtigungssonden (FDA, Kontakte, Schlüsselbund, Bedienungshilfen, Bildschirmaufnahme) | tcc_fda, tcc_contacts, tcc_keychain, tcc_accessibility, tcc_screen_recording |
endpoint_security | ES-Framework-Ereignisauslöser, einschließlich .dmg-Mount und Payload-Ausführung | es_file, es_process, es_mount |
service | LaunchAgent/Daemon-Persistenz, cron, Shell-Profil, Anmeldeobjekte | svc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item |
plist | Plist-Erstellung und -Änderung | plist_create, plist_modify |
xpc | XPC-Dienstaufzählung | xpc_enumerate |
evasion | Verteidigungsumgehung: Log-Bereinigung, Timestomping, Verlaufsentfernung | evade_log_clear |
Befehle
macnoise run <module> [--param key=val ...] Ein bestimmtes Modul ausführen
macnoise run --category <cat> Alle Module einer Kategorie ausführen
macnoise run --all Alle Module ausführen
macnoise list [--category <cat>] Module auflisten
macnoise info <module> Moduldetails, Parameter, MITRE anzeigen
macnoise scenario <file.yaml> Ein YAML-Szenario ausführen
macnoise categories Kategorien mit Anzahl auflisten
macnoise version Version ausgeben
Globale Flags
| Flag | Standard | Beschreibung |
|---|---|---|
--format | human | Ausgabeformat: human oder jsonl |
--output | (keine) | Ausgabe in Datei schreiben (zusätzlich zu stdout) |
--verbose | false | Ausführliche Ausgabe einschließlich Bereinigungsfehlern |
--dry-run | false | Aktionen ohne Ausführung in der Vorschau anzeigen |
--no-cleanup | false | Modulartefakte an Ort und Stelle belassen (siehe unten) |
--timeout | 30 | Zeitlimit pro Modul in Sekunden |
--audit-log | (keine) | OCSF-1.7.0-Auditdatensätze in eine JSONL-Datei schreiben |
--config | (keine) | Standardwerte aus einer YAML-Konfigurationsdatei laden |
Artefakte an Ort und Stelle belassen
Standardmäßig macht jedes Modul seine Änderungen rückgängig, wenn es fertig ist. Das ist normalerweise das, was Sie wollen, aber es bedeutet, dass eine Erkennung nur das Installationsereignis sieht. Um zu validieren, dass Ihr 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 die Bereinigung überspringt, gibt eine Zeile mit seinem Namen aus, und das Audit-Log protokolliert cleanup_result: skipped statt ok, sodass ein Lauf, der Persistenz hinterlassen hat, niemals mit einem verwechselt wird, der aufgeräumt hat. Verwenden Sie macnoise info <module>, um zu sehen, was ein bestimmtes Modul erstellt.
Sie sind dafür verantwortlich, diese selbst zu entfernen. Das erneute Ausführen desselben Moduls ohne das Flag bereinigt nur das, was dieser Lauf erstellt hat, nicht das, was ein früherer --no-cleanup-Lauf hinterlassen hat.
Audit-Protokollierung
MacNoise schreibt zwei getrennte Streams. Telemetrieereignisse – was Ihr EDR/SIEM tatsächlich sieht – gehen an stdout oder --output. Ein zweiter, optionaler Stream protokolliert, was MacNoise selbst getan hat: welche Module liefen, Voraussetzungs-/Bereinigungsergebnisse und MITRE-Zuordnungen, im OCSF-1.7.0-JSONL-Format.
./macnoise scenario configs/scenarios/amos_atomic_stealer.yaml --audit-log /tmp/audit.jsonl
Jedes Telemetrieereignis trägt ein outcome neben success (Schema 1.1). success sagt, ob MacNoise funktioniert hat; outcome sagt, was mit der versuchten Aktion passiert ist:
outcome | Bedeutung | Menschliche Markierung |
|---|---|---|
executed | Die Aktion lief und tat, was das Modul behauptet | [+] |
denied | Die Aktion lief und die Umgebung verweigerte sie | [-] |
indeterminate | Die Aktion lief, aber es kann nichts geschlossen werden | [?] |
error | MacNoise selbst konnte die Aktion nicht ausführen | [!] |
Eine verweigerte TCC-Sonde oder ein Beacon zu einem toten C2 ist die Telemetrie, für deren Erzeugung dieses Tool existiert, also bleiben diese success: true und werden durch outcome unterschieden. Nur error setzt success: false. Im Audit-Log erscheint derselbe Wert unter unmapped.outcome, da der OCSF-status eine verweigerte Aktion und ein defektes Tool identisch aufzeichnet.
Das Audit-Log wird im Anhängemodus geöffnet, sodass sich Datensätze aus mehreren Läufen in einer Datei für die Stapelanalyse ansammeln. Wenn Sie ein Modul hinzufügen und wissen möchten, wie ein neuer Ereignistyp in OCSF klassifiziert wird, siehe CONTRIBUTING.md.
Modulreferenz
Die Moduldokumentation befindet sich neben jeder Kategorie:
| Kategorie | README |
|---|---|
network | modules/network/README.md |
process | modules/process/README.md |
file | modules/file/README.md |
tcc | modules/tcc/README.md |
endpoint_security | modules/endpoint_security/README.md |
service | modules/service/README.md |
plist | modules/plist/README.md |
xpc | modules/xpc/README.md |
evasion | modules/evasion/README.md |
Szenarien
Szenarien verketten Module zu geordneten Sequenzen – eine einzelne YAML-Datei, die ein mehrstufiges Eindringmuster gegen Ihre Erkennungen abspielt.
| Datei | Beschreibung |
|---|---|
network_only.yaml | Alle Netzwerkmodule |
edr_validation.yaml | Umfassende EDR-Erkennungsabdeckung |
full_sweep.yaml | Alle Kategorien |
lazarus_group.yaml | Lazarus Group: Dylib-Injektion, Dienst-Discovery, Reverse Shell, Plist-Persistenz |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: MaaS-Infostealer, Gatekeeper-Bypass, Schlüsselbund-Dump, ZIP-Exfiltration, Backdoor-Persistenz |
clickfix.yaml | ClickFix: obfuskierter Einzeiler in Terminal eingefügt, base64-Dekodierung, Abruf der zweiten Stufe, LaunchAgent-Persistenz |
Die beiden APT-Szenarien folgen echten dokumentierten Eindringsequenzen, Technik für Technik – jede YAML-Datei zitiert die tatsächliche Threat Intelligence, auf der sie aufbaut, und annotiert jeden Schritt mit der MITRE-Technik, die er ausübt. Beginnen Sie also dort für die vollständige Aufschlüsselung, statt einer Nacherzählung hier.
Zuerst Trockenlauf:
./macnoise scenario configs/scenarios/<szenario>.yaml --dry-run
Querverweis mit Ihrem SIEM/EDR: Jeder Schrittkommentar benennt die Technik, die er auslösen sollte. Keine passende Warnung nach einem echten Lauf ist eine Lücke in Ihrer Abdeckung.
Eigene Szenarien schreiben:
name: Mein Benutzerdefiniertes Szenario
steps:
- module: net_connect
params:
target: "192.168.1.1"
port: "443"
- category: file
params:
base_dir: "/tmp/test"
Mitwirken
Siehe CONTRIBUTING.md für das Hinzufügen neuer Module, Codestil und den vollständigen PR-Prozess.
Releases sind automatisiert – release-please erstellt eine neue Version direkt aus Ihrem Conventional-Commit-PR-Titel, sodass feat: add net_tls module oder fix: correct beacon jitter sowohl Ihr PR-Titel als auch Ihr Changelog-Eintrag ist.
Haftungsausschluss
MacNoise ist für autorisierte Sicherheitstests, EDR-Validierung und Detection Engineering auf Systemen gedacht, die Ihnen gehören oder für die Sie eine ausdrückliche schriftliche Testgenehmigung haben. Die Autoren übernehmen keine Haftung für Missbrauch.
KI-Code-Richtlinie
KI-Code-Beiträge sind in Ordnung, aber bitte beachten Sie, dass die Code-Review derzeit ein menschlich geführter Prozess ist, was bedeutet, dass wir nur eine begrenzte Menge an Code reviewen können. Bitte beschränken Sie PRs auf eine bestimmte Korrektur oder ein neues Telemetriemodul. PRs mit umfangreichen Änderungen werden wahrscheinlich geschlossen.