
Erweiterbarer Generator für MacOS-Systemtelemetrie.
MacNoise erzeugt echte macOS-Telemetrie: Netzwerkverbindungen, Dateischreibvorgänge, Prozessstarts, Plist-Mutationen, TCC-Probes und mehr. Richten Sie es auf eine Maschine, auf der Ihr EDR, SIEM oder Ihre Firewall läuft, und sehen Sie, was tatsächlich auslöst – nicht das, was das Datenblatt des Herstellers verspricht.
Für Hintergründe zu Motivation und Design siehe den Release-Blogbeitrag.
# Build (build-amd64 / build-arm64 hinzufügen, um für Darwin zu cross-kompilieren, 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
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 und MITRE anzeigen
macnoise scenario <file.yaml> Ein YAML-Szenario ausführen
macnoise categories Kategorien mit Anzahl auflisten
macnoise version Version anzeigen
Standardmäßig macht jedes Modul seine Änderungen rückgängig, sobald es fertig ist. Das ist normalerweise gewünscht, bedeutet aber, 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 modifiziertes 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 Namen aus, und das Audit-Log protokolliert cleanup_result: skipped statt ok, sodass ein Lauf, der Persistenz hinterlassen hat, niemals mit einem verwechselt werden kann, 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. Wenn Sie dasselbe Modul ohne das Flag erneut ausführen, wird nur das aufgeräumt, was dieser Lauf erstellt hat, nicht das, was ein früherer --no-cleanup-Lauf hinterlassen hat.
MacNoise schreibt zwei getrennte Streams. Telemetrie-Ereignisse – das, was Ihr EDR/SIEM tatsächlich sieht – gehen an stdout oder an --output. Ein zweiter, optionaler Stream zeichnet auf, was MacNoise selbst getan hat: welche Module liefen, Ergebnisse von Voraussetzungen/Cleanup und MITRE-Zuordnungen, im OCSF-1.7.0-JSONL-Format.
./macnoise scenario configs/scenarios/amos_atomic_stealer.yaml --audit-log /tmp/audit.jsonl
Jedes Telemetrie-Ereignis trägt neben success (Schema 1.1) ein outcome. success sagt, ob MacNoise funktioniert hat; outcome sagt, was mit der versuchten Aktion passiert ist:
Eine verweigerte TCC-Probe oder ein Beacon zu einem toten C2 ist genau die Telemetrie, für die dieses Tool existiert. Diese bleiben also success: true und werden durch outcome unterschieden. Nur error setzt success: false. Im Audit-Log erscheint derselbe Wert unter unmapped.outcome, da OCSF status eine verweigerte Aktion und ein defektes Werkzeug identisch aufzeichnet.
Das Audit-Log wird im Append-Modus geöffnet, sodass sich Datensätze mehrerer Läufe für die Stapelanalyse in einer Datei ansammeln. Wenn Sie ein Modul hinzufügen und wissen möchten, wie ein neuer Ereignistyp in OCSF klassifiziert wird, lesen Sie CONTRIBUTING.md.
Die Moduldokumentation befindet sich neben jeder Kategorie:
Szenarien verketten Module zu geordneten Abläufen – eine einzelne YAML-Datei, die ein mehrstufiges Eindringmuster gegen Ihre Erkennungen abspielt.
Die beiden APT-Szenarien folgen real dokumentierten Eindringsequenzen, Technik für Technik – jede YAML-Datei zitiert die tatsächliche Threat Intelligence, auf der sie basiert, und kommentiert jeden Schritt mit der MITRE-Technik, die er ausübt. Beginnen Sie also dort für die vollständige Aufschlüsselung, statt hier einer Nacherzählung zu folgen.
Zuerst als Trockenlauf ausführen:
./macnoise scenario configs/scenarios/<szenario>.yaml --dry-run
Mit Ihrem SIEM/EDR abgleichen: Jeder Schrittkommentar benennt die Technik, die er auslösen sollte. Wenn nach einem echten Lauf keine passende Warnung erscheint, ist das eine Lücke in Ihrer Abdeckung.
Eigene Szenarien schreiben:
name: My Custom Scenario
steps:
- module: net_connect
params:
target: "192.168.1.1"
port: "443"
- category: file
params:
base_dir: "/tmp/test"
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-Commits-PR-Titel. feat: add net_tls module oder fix: correct beacon jitter ist also sowohl Ihr PR-Titel als auch Ihr Changelog-Eintrag.
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-Beiträge sind in Ordnung, aber bedenken Sie bitte, dass das Code-Review derzeit ein von Menschen 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.
| Kategorie | Beschreibung | Module |
|---|
network | Ausgehende Verbindungen, DNS, Beaconing, Listener, Reverse Shells, Exfiltration | net_connect, net_listen, net_beacon, net_revshell, net_dns, net_exfil |
process | Prozessstart, Signalzustellung, Dylib-Injection, Discovery, Gatekeeper-Bypass, osascript | proc_spawn, proc_signal, proc_inject, proc_discovery, proc_gatekeeper, proc_osascript |
file | Dateierstellung, -änderung, Lesen von Zugangsdaten- und Keychain-Dateien, Archivierung, Verstecken | file_create, file_modify, file_browser_creds, file_cred_files, file_keychain_copy, file_archive, file_hide |
tcc | TCC-Berechtigungs-Probes (FDA, Kontakte, Keychain, 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, Login Items | svc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item |
plist | Erstellung und Änderung von Plists | plist_create, plist_modify |
xpc | XPC-Dienst-Enumeration | xpc_enumerate |
| 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 Cleanup-Fehlern |
--dry-run | false | Aktionen ohne Ausführung als Vorschau anzeigen |
--no-cleanup | false | Modul-Artefakte hinterlassen (siehe unten) |
--timeout | 30 | Timeout 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 |
outcome | Bedeutung | Menschliche Markierung |
|---|
executed | Die Aktion wurde ausgeführt und hat getan, was das Modul behauptet | [+] |
denied | Die Aktion wurde ausgeführt und die Umgebung hat sie verweigert | [-] |
indeterminate | Die Aktion wurde ausgeführt, aber es kann nichts geschlussfolgert werden | [?] |
error | MacNoise selbst ist gescheitert, die Aktion auszuführen | [!] |
| 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 |
| Datei | Beschreibung |
|---|
network_only.yaml | Alle Netzwerkmodule |
edr_validation.yaml | Umfassende EDR-Erkennungsabdeckung |
full_sweep.yaml | Alle Kategorien |
lazarus_group.yaml | Lazarus Group: Dylib-Injection, Diensterkennung, Reverse Shell, Plist-Persistenz |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: MaaS-Infostealer, Gatekeeper-Bypass, Keychain-Dump, ZIP-Exfiltration, Backdoor-Persistenz |