अपडेट पर वापस जाएँ
New releaseAug 2, 2026

macnoise v0.2.1

विस्तारणीय MacOS सिस्टम टेलीमेट्री जनरेटर।

साझा करें
छवि का विवरण

CI Release

MacNoise

MacNoise वास्तविक macOS टेलीमेट्री उत्पन्न करता है: नेटवर्क कनेक्शन, फ़ाइल राइट, प्रोसेस स्पॉन, plist म्यूटेशन, TCC प्रोब, और बहुत कुछ। इसे अपने EDR, SIEM, या फ़ायरवॉल स्टैक चलाने वाली मशीन पर इंगित करें और देखें कि वास्तव में क्या ट्रिगर होता है - न कि वह जो विक्रेता का डेटाशीट दावा करता है कि ट्रिगर होगा।

प्रेरणा और डिज़ाइन की पृष्ठभूमि के लिए, रिलीज़ ब्लॉग पोस्ट देखें।

त्वरित शुरुआत

# 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

टेलीमेट्री श्रेणियाँ

श्रेणीविवरण
networkTCP कनेक्शन, HTTP, लिसनर, रिवर्स शेल, DNS, और TLS
processसटीक निष्पादन, सिग्नल डिलीवरी, dylib इंजेक्शन, Gatekeeper बायपास, और osascript
fileसीमित डिस्कवरी, शाब्दिक पठन/प्रतिलिपि, निर्माण, संशोधन, संग्रहण, छिपाना, और डिकॉय एन्क्रिप्शन
tccसटीक Full Disk Access, Contacts, Accessibility, या Screen Recording आवश्यकताओं के साथ TCC अनुमति जाँच
credentialनेटिव क्रेडेंशियल-स्टोर एक्सेस
volumeडिस्क-इमेज निर्माण और माउंटेड-वॉल्यूम जीवनचक्र
serviceLaunchd गणना, LaunchAgent/Daemon पर्सिस्टेंस, cron, शेल प्रोफ़ाइल, और Login Items
plistPlist निर्माण और संशोधन
evasionलॉग सफ़ाई, टाइमस्टॉम्पिंग, इतिहास हटाना, और मास्करेडिंग

प्रत्येक मॉड्यूल, पैरामीटर, आउटपुट, इवेंट प्रकार, विशेषाधिकार, और ATT&CK मैपिंग के लिए जनरेट किया गया मॉड्यूल कैटलॉग देखें।

कमांड

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

वैश्विक फ़्लैग

फ़्लैगडिफ़ॉल्टविवरण
--formathumanआउटपुट प्रारूप: human या jsonl
--output(कोई नहीं)आउटपुट को फ़ाइल में लिखें (stdout के अतिरिक्त)
--verbosefalseक्लीनअप त्रुटियों सहित विस्तृत आउटपुट
--dry-runfalseनिष्पादित किए बिना क्रियाओं का पूर्वावलोकन करें
--no-cleanupfalseमॉड्यूल आर्टिफ़ैक्ट्स को यथावत छोड़ दें (नीचे देखें)
--timeout30प्रति-मॉड्यूल टाइमआउट सेकंड में
--audit-log(कोई नहीं)OCSF 1.7.0 ऑडिट रिकॉर्ड को JSONL फ़ाइल में लिखें
--config(कोई नहीं)YAML कॉन्फ़िग फ़ाइल से डिफ़ॉल्ट लोड करें
--run-idजनरेट किया गयाइस रन के लिए सहसंबंध पहचानकर्ता सेट करें

परिदृश्य डेटाफ़्लो

परिदृश्य फ़ाइलें version: 1 का उपयोग करती हैं। इनपुट और मॉड्यूल आउटपुट टाइप किए गए हैं, और एक बाद का चरण स्ट्रिंग इंटरपोलेशन के बजाय स्पष्ट मैपिंग के साथ उनका संदर्भ देता है:

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

किसी मॉड्यूल द्वारा घोषित केवल आउटपुट ही संदर्भित किए जा सकते हैं। स्थानीय परिदृश्यों को include चरण के साथ पुनः उपयोग किया जा सकता है; include सापेक्ष होते हैं, रूट परिदृश्य निर्देशिका से ऊपर नहीं जा सकते, उनकी चक्र-जाँच की जाती है, और वे आठ स्तरों तक सीमित हैं। MacNoise निष्पादन से पहले पूर्ण ग्राफ़ को मान्य करता है, रन को एक निजी कार्यक्षेत्र देता है, और आमंत्रित मॉड्यूल को उल्टे क्रम में साफ़ करता है। इनपुट प्रदान करने के लिए --input content=value और संस्करणित निष्पादन रिपोर्ट के लिए --report report.json का उपयोग करें।

आर्टिफ़ैक्ट्स को यथावत छोड़ना

डिफ़ॉल्ट रूप से प्रत्येक मॉड्यूल समाप्त होने पर स्वयं को उलट देता है। आमतौर पर यही आप चाहते हैं, लेकिन इसका मतलब है कि एक डिटेक्शन केवल इंस्टॉल इवेंट को ही देखता है। यह सत्यापित करने के लिए कि आपका स्टैक स्वयं पर्सिस्टेंस का पता लगाता है - ~/Library/LaunchAgents में बैठा एक LaunchAgent, एक cron प्रविष्टि, एक संशोधित शेल प्रोफ़ाइल - स्कैन चलने के समय आर्टिफ़ैक्ट को अभी भी वहाँ होना चाहिए:

./macnoise run svc_launch_agent --no-cleanup

जो भी मॉड्यूल cleanup छोड़ता है, वह अपना नाम बताते हुए एक पंक्ति प्रिंट करता है, और audit log में ok के बजाय cleanup_result: skipped दर्ज होता है, ताकि जिस रन ने persistence पीछे छोड़ दी हो, उसे कभी भी सफ़ाई करने वाले रन के रूप में न समझा जाए। यह देखने के लिए कि कोई दिया गया मॉड्यूल क्या बनाता है, macnoise info <module> का उपयोग करें।

इन्हें हटाने की ज़िम्मेदारी आपकी स्वयं की है। उसी मॉड्यूल को बिना flag के दोबारा चलाने पर केवल वही साफ़ होगा जो उस रन ने बनाया था, न कि वह जो किसी पिछले --no-cleanup रन ने पीछे छोड़ दिया था।

Audit Logging

MacNoise दो अलग-अलग स्ट्रीम लिखता है। Telemetry events - जो आपका EDR/SIEM वास्तव में देखता है - stdout या --output पर जाते हैं। एक दूसरी, वैकल्पिक स्ट्रीम यह दर्ज करती है कि MacNoise ने स्वयं क्या किया: कौन से मॉड्यूल चले, prereq/cleanup परिणाम, और MITRE mappings, OCSF 1.7.0 JSONL में।

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

प्रत्येक टेलीमेट्री इवेंट में एक आधिकारिक outcome और एक टाइप्ड subject होता है (स्कीमा 2.0)। outcome बताता है कि MacNoise द्वारा प्रयास की गई क्रिया के साथ क्या हुआ, जबकि subject उस फ़ाइल, प्रक्रिया, नेटवर्क एंडपॉइंट, सेवा या संसाधन की पहचान करता है जो इसमें शामिल है:

outcomeअर्थमानव मार्कर
executedक्रिया चली और उसने वही किया जो मॉड्यूल का दावा है[+]
deniedक्रिया चली और परिवेश ने उसे अस्वीकार कर दिया[-]
indeterminateक्रिया चली, लेकिन कोई निष्कर्ष नहीं निकाला जा सकता[?]
errorMacNoise स्वयं क्रिया को पूरा करने में विफल रहा[!]

अस्वीकृत TCC प्रोब या मृत C2 की ओर भेजा गया बीकन वही टेलीमेट्री है जिसे उत्पन्न करने के लिए यह टूल मौजूद है, इसलिए यह error से अलग है, जिसका अर्थ है कि MacNoise स्वयं विफल रहा। ऑडिट लॉग unmapped.outcome पर वही मान दर्ज करता है। संवेदनशील घोषित पैरामीटर प्रबंधित ऑडिट रिकॉर्ड और कमांड-लाइन पहचान में [REDACTED] से बदल दिए जाते हैं।

ऑडिट लॉग append मोड में खुलता है, इसलिए कई रनों के रिकॉर्ड बैच विश्लेषण के लिए एक ही फ़ाइल में जमा होते हैं। यदि आप कोई मॉड्यूल जोड़ रहे हैं और जानना चाहते हैं कि एक नया इवेंट प्रकार OCSF में कैसे वर्गीकृत होता है, तो देखें CONTRIBUTING.md।

मॉड्यूल संदर्भ

श्रेणियाँ