
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 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 | إنشاء الملفات، تعديلها، قراءة ملفات بيانات الاعتماد وسلسلة المفاتيح، الأرشفة، الإخفاء | file_create, file_modify, file_browser_creds, file_cred_files, file_keychain_copy, file_archive, file_hide |
tcc | فحوصات أذونات TCC (FDA، جهات الاتصال، سلسلة المفاتيح، إمكانية الوصول، تسجيل الشاشة) | 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 ...] 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 | (لا شيء) | كتابة الإخراج إلى ملف (بالإضافة إلى stdout) |
--verbose | false | إخراج مطوّل يتضمن أخطاء التنظيف |
--dry-run | false | معاينة الإجراءات دون تنفيذها |
--no-cleanup | false | ترك آثار الوحدة في مكانها (انظر أدناه) |
--timeout | 30 | المهلة الزمنية لكل وحدة بالثواني |
--audit-log | (لا شيء) | كتابة سجلات تدقيق OCSF 1.7.0 إلى ملف JSONL |
--config | (لا شيء) | تحميل الإعدادات الافتراضية من ملف تكوين YAML |
ترك الآثار في مكانها
بشكل افتراضي، تعكس كل وحدة تأثيرها عند انتهائها. هذا عادةً ما تريده، لكنه يعني أن الكشف لا يرى سوى حدث التثبيت. للتحقق من أن حزمتك تكشف الاستمرارية نفسها - LaunchAgent موجود في ~/Library/LaunchAgents، أو إدخال cron، أو ملف تعريف صدفة معدّل - يجب أن يكون الأثر لا يزال موجودًا عند تشغيل الفحص:
./macnoise run svc_launch_agent --no-cleanup
كل وحدة تتخطى التنظيف تطبع سطرًا يسمّي نفسها، ويسجّل سجل التدقيق cleanup_result: skipped بدلاً من ok، بحيث لا يُخطئ أبدًا في اعتبار تشغيل ترك استمرارية وراءه كتشغيل نظّف نفسه. استخدم macnoise info <module> لمعرفة ما تنشئه وحدة معينة.
أنت مسؤول عن إزالة هذه بنفسك. إعادة تشغيل الوحدة نفسها دون العلم ستُنظّف فقط ما أنشأه ذلك التشغيل، وليس ما تركه تشغيل سابق بـ --no-cleanup.
تسجيل التدقيق
يكتب MacNoise تدفقين منفصلين. أحداث القياس عن بُعد - ما يراه EDR/SIEM لديك فعليًا - تذهب إلى stdout أو --output. وهناك تدفق ثانٍ اختياري يسجّل ما فعله MacNoise نفسه: أي الوحدات عملت، ونتائج المتطلبات المسبقة/التنظيف، وتعيينات MITRE، بصيغة OCSF 1.7.0 JSONL.
./macnoise scenario configs/scenarios/amos_atomic_stealer.yaml --audit-log /tmp/audit.jsonl
يحمل كل حدث قياس عن بُعد قيمة outcome إلى جانب success (المخطط 1.1). تشير success إلى ما إذا كان MacNoise قد عمل؛ وتشير outcome إلى ما حدث للإجراء الذي حاول تنفيذه:
outcome | المعنى | العلامة البشرية |
|---|---|---|
executed | نُفّذ الإجراء وفعل ما تدّعيه الوحدة | [+] |
denied | نُفّذ الإجراء ورفضته البيئة | [-] |
indeterminate | نُفّذ الإجراء، لكن لا يمكن استنتاج أي شيء | [?] |
error | فشل MacNoise نفسه في تنفيذ الإجراء | [!] |
فحص TCC مرفوض أو إشارة دورية إلى C2 ميت هو القياس عن بُعد الذي وُجدت هذه الأداة لتوليده، لذا تبقى هذه success: true ويُفرّق بينها بواسطة outcome. فقط error تضبط success: false. في سجل التدقيق تظهر القيمة نفسها عند unmapped.outcome، لأن status في OCSF يسجّل إجراءً مرفوضًا وأداة معطّلة بشكل متطابق.
يُفتح سجل التدقيق في وضع الإلحاق، لذا تتراكم السجلات من عدة تشغيلات في ملف واحد للتحليل الدفعي. إذا كنت تضيف وحدة وتريد معرفة كيف يُصنّف نوع حدث جديد في 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: حقن dylib، استكشاف الخدمات، صدفة عكسية، استمرارية plist |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: برمجية سرقة معلومات MaaS، تجاوز Gatekeeper، استخراج سلسلة المفاتيح، تسريب 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"
المساهمة
راجع CONTRIBUTING.md لإضافة وحدات جديدة، وأسلوب الكود، وعملية PR الكاملة.
الإصدارات آلية - release-please يصدر إصدارًا جديدًا مباشرةً من عنوان PR الخاص بك بصيغة Conventional Commit، لذا فإن feat: add net_tls module أو fix: correct beacon jitter هو عنوان PR الخاص بك وإدخال سجل التغييرات في آنٍ واحد.
إخلاء المسؤولية
MacNoise مخصص لاختبارات الأمان المصرّح بها، والتحقق من EDR، وهندسة الكشف على الأنظمة التي تملكها أو لديك إذن كتابي صريح باختبارها. لا يتحمل المؤلفون أي مسؤولية عن سوء الاستخدام.
سياسة كود الذكاء الاصطناعي
مساهمات كود الذكاء الاصطناعي مقبولة، لكن يرجى الأخذ في الاعتبار أن مراجعة الكود ستكون حاليًا عملية يقودها البشر، مما يعني أن هناك حدًا لما يمكننا مراجعته من الكود. يرجى قصر طلبات PR على إصلاح محدد، أو وحدة قياس عن بُعد جديدة. من المرجح أن تُغلق طلبات PR ذات التغييرات الواسعة.