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

macnoise v0.3.0

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

साझा करें
Description of image

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-idgeneratedइस रन के लिए सहसंबंध पहचानकर्ता सेट करें

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

परिदृश्य फ़ाइलें 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

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

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

ऑडिट लॉगिंग

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

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

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

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

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

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

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

श्रेणियाँ