
macnoise v0.5.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 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 | generated | इस रन के लिए सहसंबंध पहचानकर्ता सेट करें |
परिदृश्य डेटाफ़्लो
परिदृश्य फ़ाइलें 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 | क्रिया चली, लेकिन कोई निष्कर्ष नहीं निकाला जा सकता | [?] |
error | MacNoise स्वयं क्रिया को पूरा करने में विफल रहा | [!] |
अस्वीकृत TCC प्रोब या मृत C2 को बीकन वह टेलीमेट्री है जिसे उत्पन्न करने के लिए यह टूल मौजूद है, इसलिए यह error से अलग है, जिसका अर्थ है कि MacNoise स्वयं विफल रहा। ऑडिट लॉग unmapped.outcome पर वही मान रिकॉर्ड करता है। संवेदनशील घोषित पैरामीटर प्रबंधित ऑडिट रिकॉर्ड और कमांड-लाइन पहचान में [REDACTED] से बदल दिए जाते हैं।
ऑडिट लॉग append मोड में खुलता है, इसलिए कई रनों के रिकॉर्ड बैच विश्लेषण के लिए एक फ़ाइल में जमा हो जाते हैं। यदि आप एक मॉड्यूल जोड़ रहे हैं और जानना चाहते हैं कि एक नया इवेंट प्रकार OCSF में कैसे वर्गीकृत होता है, तो CONTRIBUTING.md देखें।
मॉड्यूल संदर्भ
जनरेट किया गया मॉड्यूल कैटलॉग नामों, पैरामीटर, आउटपुट, इवेंट प्रकार, विशेषाधिकार, और ATT&CK मैपिंग के लिए आधिकारिक संदर्भ है। श्रेणी नोट्स प्लेटफ़ॉर्म व्यवहार और परिचालन सीमाओं की व्याख्या करते हैं:
| श्रेणी | README |
|---|---|
network | modules/network/README.md |
process | modules/process/README.md |
file | modules/file/README.md |
tcc | modules/tcc/README.md |
credential | modules/credential/README.md |
volume | modules/volume/README.md |
service | modules/service/README.md |
plist | modules/plist/README.md |
evasion | modules/evasion/README.md |
परिदृश्य
परिदृश्य मॉड्यूल को क्रमबद्ध अनुक्रमों में जोड़ते हैं - एक एकल YAML फ़ाइल जो आपके डिटेक्शन के विरुद्ध बहु-चरणीय घुसपैठ पैटर्न को दोबारा चलाती है।
| फ़ाइल | विवरण |
|---|---|
network_only.yaml | संयोजित TCP, लिसनर, DNS, HTTP बीकन, और HTTP एक्सफ़िल्ट्रेशन संचालन |
edr_validation.yaml | व्यापक EDR डिटेक्शन कवरेज |
full_sweep.yaml | सभी श्रेणियाँ |
lazarus_group.yaml | Lazarus Group: dylib इंजेक्शन, सेवा खोज, रिवर्स शेल, LaunchAgent पर्सिस्टेंस |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: MaaS इन्फोस्टीलर, Gatekeeper बायपास, कीचेन डंप, ZIP एक्सफ़िल, बैकडोर पर्सिस्टेंस |
clickfix.yaml | ClickFix: Terminal में पेस्ट किया गया ऑब्फ़स्केटेड वन-लाइनर, base64 डिकोड, सेकंड-स्टेज फ़ेच, LaunchAgent पर्सिस्टेंस |
ransomware.yaml | रैनसमवेयर प्रभाव: प्लेनटेक्स्ट डिकॉय तैयार करें, उन्हें एन्क्रिप्ट करें, फिर रैनसम नोट छोड़ें |
discovery.yaml | संयोजित argv-आधारित सिस्टम, अकाउंट, नेटवर्क, और सुरक्षा सॉफ़्टवेयर खोज रेसिपी |
process_chain.yaml | स्पष्ट आर्ग्युमेंट वेक्टर से बनी तीन-प्रोसेस शेल चेन |
file_flow.yaml | जुड़ा हुआ create, modify, bounded discovery, read, copy, और archive फ़्लो |
mounted_execution.yaml | देखे गए डिस्क-इमेज माउंट पॉइंट से पेलोड बनाएँ और निष्पादित करें |
दो APT परिदृश्य वास्तविक प्रलेखित घुसपैठ अनुक्रमों का अनुसरण करते हैं, तकनीक-दर-तकनीक - प्रत्येक YAML फ़ाइल उस वास्तविक थ्रेट इंटेल का हवाला देती है जिससे यह बनी है और प्रत्येक चरण को उस MITRE तकनीक के साथ एनोटेट करती है जिसका यह अभ्यास करती है, इसलिए पूर्ण विवरण के लिए यहीं से शुरू करें, यहाँ दोबारा बताने के बजाय।
पहले ड्राई-रन करें:
./macnoise scenario configs/scenarios/<scenario>.yaml --dry-run
अपने SIEM/EDR के साथ क्रॉस-रेफ़रेंस करें: प्रत्येक चरण टिप्पणी उस तकनीक का नाम देती है जिसे इसे ट्रिगर करना चाहिए। वास्तविक रन के बाद कोई मेल खाता अलर्ट न होना आपकी कवरेज में एक अंतराल है।
अपना स्वयं लिखना:
version: 1
name: My Custom Scenario
on_error: stop
steps:
- module: net_connect
params:
target: "192.168.1.1"
port: 443
- module: file_create
params:
base_dir: "/tmp/test"
पैरामीटर को पूर्वावलोकन या निष्पादन से पहले प्रत्येक मॉड्यूल के घोषित string, integer, boolean, path, या list प्रकार के विरुद्ध जाँचा जाता है। अज्ञात नाम और अमान्य मान अस्वीकार कर दिए जाते हैं। on_error डिफ़ॉल्ट रूप से stop होता है। इसे continue पर केवल तब सेट करें जब कवरेज स्वीप को विफलता के बाद बाद के मॉड्यूल आमंत्रणों का प्रयास करना चाहिए।
टाइप्ड इनपुट, आउटपुट, और जुड़े डेटाफ़्लो के लिए परिदृश्य टेम्पलेट से शुरू करें।
संस्करण 1 संगतता
संस्करण 1.0 समर्थित CLI कमांड और फ़्लैग, मॉड्यूल नाम और अनुबंध, परिदृश्य schema 1, टेलीमेट्री schema 2.0, और परिदृश्य-रिपोर्ट schema 1.0 को परिभाषित करता है। उन इंटरफ़ेस में भविष्य के असंगत परिवर्तनों के लिए एक नया मेजर रिलीज़ आवश्यक है।
मौजूदा उपयोगकर्ताओं को Migrating from v0.6.0 to v1.0.0 पढ़ना चाहिए। यह प्रत्येक हटाए गए मॉड्यूल को मैप करता है और परिदृश्य, JSONL, और Go API परिवर्तनों का वर्णन करता है।
योगदान
primitive, scenario, और core-change पथों के लिए CONTRIBUTING.md देखें।
रिलीज़ स्वचालित हैं - release-please आपके Conventional Commit PR शीर्षक से सीधे एक नया संस्करण निकालता है, इसलिए feat: add net_tls module या fix: correct beacon jitter दोनों आपका PR शीर्षक और आपकी चेंजलॉग प्रविष्टि है।
अस्वीकरण
MacNoise का उद्देश्य अधिकृत सुरक्षा परीक्षण, EDR सत्यापन, और डिटेक्शन इंजीनियरिंग के लिए है, उन सिस्टमों पर जिनके आप स्वामी हैं या जिनका परीक्षण करने के लिए आपके पास स्पष्ट लिखित अनुमति है। लेखक दुरुपयोग के लिए कोई दायित्व स्वीकार नहीं करते।
AI कोड नीति
AI कोड योगदान ठीक है, लेकिन कृपया ध्यान रखें कि कोड समीक्षा वर्तमान में एक मानव-नेतृत्व वाली प्रक्रिया होगी जिसका अर्थ है कि हम केवल सीमित मात्रा में कोड की समीक्षा कर सकते हैं। कृपया PR को एक विशिष्ट फ़िक्स, या नए टेलीमेट्री मॉड्यूल तक सीमित रखें। व्यापक परिवर्तनों वाले PR संभवतः बंद कर दिए जाएँगे।