
macnoise v0.2.1
विस्तारणीय MacOS सिस्टम टेलीमेट्री जनरेटर।
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
टेलीमेट्री श्रेणियाँ
| श्रेणी | विवरण |
|---|---|
network | TCP कनेक्शन, HTTP, लिसनर, रिवर्स शेल, DNS, और TLS |
process | सटीक निष्पादन, सिग्नल डिलीवरी, dylib इंजेक्शन, Gatekeeper बायपास, और osascript |
file | सीमित डिस्कवरी, शाब्दिक पठन/प्रतिलिपि, निर्माण, संशोधन, संग्रहण, छिपाना, और डिकॉय एन्क्रिप्शन |
tcc | सटीक Full Disk Access, Contacts, Accessibility, या Screen Recording आवश्यकताओं के साथ TCC अनुमति जाँच |
credential | नेटिव क्रेडेंशियल-स्टोर एक्सेस |
volume | डिस्क-इमेज निर्माण और माउंटेड-वॉल्यूम जीवनचक्र |
service | Launchd गणना, LaunchAgent/Daemon पर्सिस्टेंस, cron, शेल प्रोफ़ाइल, और Login Items |
plist | Plist निर्माण और संशोधन |
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
वैश्विक फ़्लैग
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
--format | human | आउटपुट प्रारूप: human या jsonl |
--output | (कोई नहीं) | आउटपुट को फ़ाइल में लिखें (stdout के अतिरिक्त) |
--verbose | false | क्लीनअप त्रुटियों सहित विस्तृत आउटपुट |
--dry-run | false | निष्पादित किए बिना क्रियाओं का पूर्वावलोकन करें |
--no-cleanup | false | मॉड्यूल आर्टिफ़ैक्ट्स को यथावत छोड़ दें (नीचे देखें) |
--timeout | 30 | प्रति-मॉड्यूल टाइमआउट सेकंड में |
--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 | क्रिया चली, लेकिन कोई निष्कर्ष नहीं निकाला जा सकता | [?] |
error | MacNoise स्वयं क्रिया को पूरा करने में विफल रहा | [!] |
अस्वीकृत TCC प्रोब या मृत C2 की ओर भेजा गया बीकन वही टेलीमेट्री है जिसे उत्पन्न करने के लिए यह टूल मौजूद है, इसलिए यह error से अलग है, जिसका अर्थ है कि MacNoise स्वयं विफल रहा। ऑडिट लॉग unmapped.outcome पर वही मान दर्ज करता है। संवेदनशील घोषित पैरामीटर प्रबंधित ऑडिट रिकॉर्ड और कमांड-लाइन पहचान में [REDACTED] से बदल दिए जाते हैं।
ऑडिट लॉग append मोड में खुलता है, इसलिए कई रनों के रिकॉर्ड बैच विश्लेषण के लिए एक ही फ़ाइल में जमा होते हैं। यदि आप कोई मॉड्यूल जोड़ रहे हैं और जानना चाहते हैं कि एक नया इवेंट प्रकार OCSF में कैसे वर्गीकृत होता है, तो देखें CONTRIBUTING.md।