
macnoise v0.2.0
विस्तारणीय 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 run --category file --format jsonl --output /tmp/events.jsonl
टेलीमेट्री श्रेणियाँ
| श्रेणी | विवरण | मॉड्यूल |
|---|---|---|
network | आउटबाउंड कनेक्शन, DNS, बीकनिंग, लिसनर, रिवर्स शेल, एक्सफ़िलट्रेशन | net_connect, net_listen, net_beacon, net_revshell, net_dns, net_exfil |
process | प्रोसेस स्पॉनिंग, सिग्नल डिलीवरी, डायलिब इंजेक्शन, डिस्कवरी, गेटकीपर बाईपास, osascript | proc_spawn, proc_signal, proc_inject, proc_discovery, proc_gatekeeper, proc_osascript |
file | फ़ाइल निर्माण, संशोधन, क्रेडेंशियल फ़ाइल और कीचेन रीड, आर्काइविंग, छिपाना | file_create, file_modify, file_browser_creds, file_cred_files, file_keychain_copy, file_archive, file_hide |
tcc | TCC अनुमति प्रोब (FDA, Contacts, Keychain, Accessibility, Screen Recording) | tcc_fda, tcc_contacts, tcc_keychain, tcc_accessibility, tcc_screen_recording |
endpoint_security | ES फ्रेमवर्क इवेंट ट्रिगर, जिसमें .dmg माउंट और पेलोड निष्पादन शामिल है | es_file, es_process, es_mount |
service | LaunchAgent/Daemon पर्सिस्टेंस, cron, शेल प्रोफ़ाइल, लॉगिन आइटम | svc_launch_agent, svc_launch_daemon, svc_cron, svc_shell_profile, svc_login_item |
plist | Plist निर्माण और संशोधन | plist_create, plist_modify |
xpc | XPC सेवा एन्यूमरेशन | xpc_enumerate |
कमांड्स
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> Run a YAML scenario
macnoise categories List categories with counts
macnoise version Print version
ग्लोबल फ़्लैग्स
| फ़्लैग | डिफ़ॉल्ट | विवरण |
|---|---|---|
--format | human | आउटपुट फ़ॉर्मेट: human या jsonl |
--output | (none) | आउटपुट को फ़ाइल में लिखें (stdout के अतिरिक्त) |
--verbose | false | वर्बोज़ आउटपुट जिसमें क्लीनअप त्रुटियाँ शामिल हैं |
--dry-run | false | निष्पादित किए बिना क्रियाओं का पूर्वावलोकन करें |
--no-cleanup | false | मॉड्यूल आर्टिफैक्ट्स को यथास्थान छोड़ दें (नीचे देखें) |
--timeout | 30 | प्रति-मॉड्यूल टाइमआउट सेकंड में |
--audit-log | (none) | OCSF 1.7.0 ऑडिट रिकॉर्ड को JSONL फ़ाइल में लिखें |
--config | (none) | YAML कॉन्फ़िग फ़ाइल से डिफ़ॉल्ट लोड करें |
आर्टिफैक्ट्स को यथास्थान छोड़ना
डिफ़ॉल्ट रूप से हर मॉड्यूल समाप्त होने पर स्वयं को पूर्ववत कर लेता है। यह आम तौर पर वही है जो आप चाहते हैं, लेकिन इसका मतलब है कि एक डिटेक्शन केवल इंस्टॉल इवेंट ही देख पाता है। यह सत्यापित करने के लिए कि आपका स्टैक पर्सिस्टेंस को स्वयं डिटेक्ट करता है - ~/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 पर जाते हैं। एक दूसरी, वैकल्पिक स्ट्रीम OCSF 1.7.0 JSONL में रिकॉर्ड करती है कि MacNoise ने स्वयं क्या किया: कौन से मॉड्यूल चले, प्रीरेक/क्लीनअप परिणाम, और MITRE मैपिंग।
./macnoise scenario configs/scenarios/amos_atomic_stealer.yaml --audit-log /tmp/audit.jsonl
हर टेलीमेट्री इवेंट success (schema 1.1) के साथ एक outcome भी रखता है। success बताता है कि MacNoise ने काम किया या नहीं; outcome बताता है कि उसके द्वारा प्रयासित क्रिया के साथ क्या हुआ:
outcome | अर्थ | मानव मार्कर |
|---|---|---|
executed | क्रिया चली और उसने वही किया जो मॉड्यूल का दावा है | [+] |
denied | क्रिया चली और पर्यावरण ने उसे अस्वीकार कर दिया | [-] |
indeterminate | क्रिया चली, लेकिन कुछ भी निष्कर्ष नहीं निकाला जा सकता | [?] |
error | MacNoise स्वयं क्रिया को पूरा करने में विफल रहा | [!] |
एक अस्वीकृत TCC प्रोब या मृत C2 तक पहुँचने वाला बीकन वह टेलीमेट्री है जिसे उत्पन्न करने के लिए यह टूल मौजूद है, इसलिए वे success: true ही रहते हैं और उन्हें outcome द्वारा अलग पहचाना जाता है। केवल error ही success: false सेट करता है। ऑडिट लॉग में यही मान unmapped.outcome पर दिखाई देता है, क्योंकि OCSF status एक अस्वीकृत क्रिया और एक टूटे हुए टूल को समान रूप से रिकॉर्ड करता है।
ऑडिट लॉग append मोड में खुलता है, इसलिए कई रनों के रिकॉर्ड बैच विश्लेषण के लिए एक ही फ़ाइल में एकत्रित होते रहते हैं। यदि आप एक मॉड्यूल जोड़ रहे हैं और जानना चाहते हैं कि एक नया इवेंट प्रकार OCSF में कैसे वर्गीकृत होता है, तो CONTRIBUTING.md देखें।
मॉड्यूल संदर्भ
मॉड्यूल दस्तावेज़ीकरण हर श्रेणी के साथ उपलब्ध है:
| श्रेणी | 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 |
परिदृश्य
परिदृश्य मॉड्यूलों को क्रमबद्ध अनुक्रमों में जोड़ते हैं - एक एकल YAML फ़ाइल जो आपकी डिटेक्शन के विरुद्ध बहु-चरणीय घुसपैठ पैटर्न को दोहराती है।
| फ़ाइल | विवरण |
|---|---|
network_only.yaml | सभी नेटवर्क मॉड्यूल |
edr_validation.yaml | व्यापक EDR डिटेक्शन कवरेज |
full_sweep.yaml | सभी श्रेणियाँ |
lazarus_group.yaml | लाज़ारस ग्रुप: डायलिब इंजेक्शन, सेवा डिस्कवरी, रिवर्स शेल, plist पर्सिस्टेंस |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: MaaS इन्फोस्टीलर, गेटकीपर बाईपास, कीचेन डंप, ZIP एक्सफ़िल, बैकडोर पर्सिस्टेंस |
दोनों APT परिदृश्य वास्तविक प्रलेखित घुसपैठ अनुक्रमों का तकनीक-दर-तकनीक अनुसरण करते हैं - प्रत्येक YAML फ़ाइल उस वास्तविक थ्रेट इंटेल को उद्धृत करती है जिससे इसे बनाया गया है और हर चरण को उस MITRE तकनीक से एनोटेट करती है जिसे वह लागू करता है, इसलिए यहाँ पुनर्कथन के बजाय पूर्ण विवरण के लिए वहीं से शुरू करें।
पहले ड्राई-रन करें:
./macnoise scenario configs/scenarios/<scenario>.yaml --dry-run
अपने SIEM/EDR के साथ क्रॉस-रेफरेंस करें: प्रत्येक चरण की टिप्पणी उस तकनीक का नाम बताती है जिसे उसे ट्रिगर करना चाहिए। वास्तविक रन के बाद कोई मेल खाता अलर्ट न मिलना आपके कवरेज में एक कमी है।
अपना खुद का लिखना:
name: My Custom Scenario
steps:
- module: net_connect
params:
target: "192.168.1.1"
port: "443"
- category: file
params:
base_dir: "/tmp/test"
योगदान
नए मॉड्यूल जोड़ने, कोड शैली और पूर्ण PR प्रक्रिया के लिए CONTRIBUTING.md देखें।
रिलीज़ स्वचालित हैं - release-please आपके Conventional Commit PR शीर्षक से सीधे एक नया संस्करण तैयार करता है, इसलिए feat: add net_tls module या fix: correct beacon jitter आपके PR शीर्षक और आपकी चेंजलॉग प्रविष्टि दोनों है।
अस्वीकरण
MacNoise आपके स्वामित्व वाले या जिन पर परीक्षण करने की स्पष्ट लिखित अनुमति है, ऐसे सिस्टम पर अधिकृत सुरक्षा परीक्षण, EDR सत्यापन और डिटेक्शन इंजीनियरिंग के लिए है। लेखक दुरुपयोग के लिए कोई दायित्व नहीं लेते हैं।
AI कोड नीति
AI कोड योगदान ठीक हैं, लेकिन कृपया ध्यान रखें कि कोड समीक्षा वर्तमान में मानव-नेतृत्व वाली प्रक्रिया होगी, जिसका अर्थ है कि हम केवल उतना ही कोड समीक्षा कर सकते हैं। कृपया PR को किसी विशेष फिक्स या नए टेलीमेट्री मॉड्यूल तक सीमित रखें। व्यापक बदलाव वाले PR संभवतः बंद कर दिए जाएँगे।