
macnoise v0.5.0
विस्तारणीय MacOS सिस्टम टेलीमेट्री जनरेटर।
MacNoise
MacNoise वास्तविक macOS टेलीमेट्री उत्पन्न करता है: नेटवर्क कनेक्शन, फ़ाइल लेखन, प्रोसेस स्पॉन, plist म्यूटेशन, TCC प्रोब, और बहुत कुछ। इसे आपके EDR, SIEM, या फ़ायरवॉल स्टैक पर चल रही मशीन पर इंगित करें और देखें कि वास्तव में क्या फायर होता है - न कि वह जो विक्रेता की डेटाशीट दावा करती है कि फायर होगा।
प्रेरणा और डिज़ाइन की पृष्ठभूमि के लिए, रिलीज़ ब्लॉग पोस्ट देखें।
त्वरित आरंभ
# बिल्ड करें (Darwin के लिए क्रॉस-कंपाइल करने हेतु build-amd64 / build-arm64 जोड़ें, या दोनों के लिए release)
make build
# उपलब्ध मॉड्यूल सूचीबद्ध करें
./macnoise list
# एकल मॉड्यूल चलाएँ
./macnoise run net_connect --param target=127.0.0.1 --param port=8080
# निष्पादन के बिना पूर्वावलोकन करें
./macnoise run svc_launch_agent --dry-run
# सभी नेटवर्क मॉड्यूल चलाएँ
./macnoise run --category network
# एक परिदृश्य चलाएँ
./macnoise scenario configs/scenarios/edr_validation.yaml
# संरचित JSONL आउटपुट उत्सर्जित करें
./macnoise run --category file --format jsonl --output /tmp/events.jsonl
टेलीमेट्री श्रेणियाँ
| श्रेणी | विवरण | मॉड्यूल |
|---|---|---|
network | आउटबाउंड कनेक्शन, DNS, बीकनिंग, लिसनर, रिवर्स शेल, TLS, एक्सफ़िल्ट्रेशन | net_connect, net_listen, net_beacon, net_revshell, net_dns, net_dns_exfil, net_tls, net_exfil |
process | प्रोसेस स्पॉनिंग, सिग्नल डिलीवरी, dylib इंजेक्शन, डिस्कवरी, Gatekeeper बायपास, osascript | proc_spawn, proc_signal, proc_inject, proc_discovery, proc_gatekeeper, proc_osascript |
file | फ़ाइल निर्माण, संशोधन, क्रेडेंशियल फ़ाइल और keychain रीड, आर्काइविंग, छिपाना | 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 |
evasion | डिफेंस एवेज़न: लॉग क्लियरिंग, टाइमस्टॉम्पिंग, हिस्ट्री हटाना | evade_log_clear |
कमांड
macnoise run <module> [--param key=val ...] एक विशिष्ट मॉड्यूल चलाएँ
macnoise run --category <cat> एक श्रेणी के सभी मॉड्यूल चलाएँ
macnoise run --all सभी मॉड्यूल चलाएँ
macnoise list [--category <cat>] मॉड्यूल सूचीबद्ध करें
macnoise info <module> मॉड्यूल विवरण, पैरामीटर, MITRE दिखाएँ
macnoise scenario <file.yaml> YAML परिदृश्य चलाएँ
macnoise categories गणना सहित श्रेणियाँ सूचीबद्ध करें
macnoise 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 कॉन्फ़िग फ़ाइल से डिफ़ॉल्ट लोड करें |
आर्टिफैक्ट को जगह पर छोड़ना
डिफ़ॉल्ट रूप से हर मॉड्यूल समाप्त होने पर स्वयं को पूर्ववत कर देता है। यह आमतौर पर वही है जो आप चाहते हैं, लेकिन इसका मतलब है कि एक डिटेक्शन केवल इंस्टॉल इवेंट को ही देख पाता है। यह सत्यापित करने के लिए कि आपका स्टैक पर्सिस्टेंस को स्वयं डिटेक्ट करता है - ~/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
हर टेलीमेट्री इवेंट success (स्कीमा 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 |
evasion | modules/evasion/README.md |
परिदृश्य
परिदृश्य मॉड्यूल को क्रमबद्ध अनुक्रमों में जोड़ते हैं - एक एकल YAML फ़ाइल जो आपकी डिटेक्शन के विरुद्ध एक बहु-चरणीय घुसपैठ पैटर्न को फिर से चलाती है।
| फ़ाइल | विवरण |
|---|---|
network_only.yaml | सभी नेटवर्क मॉड्यूल |
edr_validation.yaml | व्यापक EDR डिटेक्शन कवरेज |
full_sweep.yaml | सभी श्रेणियाँ |
lazarus_group.yaml | Lazarus Group: dylib इंजेक्शन, सेवा डिस्कवरी, रिवर्स शेल, plist पर्सिस्टेंस |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: MaaS इन्फोस्टीलर, Gatekeeper बायपास, keychain डंप, ZIP एक्सफ़िल, बैकडोर पर्सिस्टेंस |
clickfix.yaml | ClickFix: Terminal में पेस्ट किया गया अस्पष्ट एक-लाइनर, base64 डिकोड, दूसरे-चरण का फ़ेच, LaunchAgent पर्सिस्टेंस |
दोनों 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 संभवतः बंद कर दिए जाएंगे।