
macnoise v0.3.0
مولّد قابل للتوسيع لبيانات القياس عن بُعد لنظام MacOS.
MacNoise
يولّد MacNoise بيانات تتبع حقيقية لنظام macOS: اتصالات الشبكة، كتابة الملفات، إطلاق العمليات، تعديلات plist، فحوصات TCC، والمزيد. وجّهه إلى جهاز يعمل عليه نظام EDR أو SIEM أو جدار الحماية الخاص بك وشاهد ما يتم رصده فعليًا - وليس ما تدّعي ورقة بيانات البائع أنه سيتم رصده.
للاطلاع على خلفية الدافع والتصميم، راجع منشور المدونة الخاص بالإصدار.
بدء سريع
# البناء (أضف build-amd64 / build-arm64 للترجمة المتقاطعة لنظام Darwin، أو 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، إشارات دورية، مستمعون، قذائف عكسية، سرقة بيانات | net_connect, net_listen, net_beacon, net_revshell, net_dns, 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 (الوصول الكامل للقرص، جهات الاتصال، سلسلة المفاتيح، إمكانية الوصول، تسجيل الشاشة) | 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 ...] تشغيل وحدة محددة
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 |
ترك الآثار في مكانها
بشكل افتراضي، تعكس كل وحدة نفسها عند الانتهاء. هذا عادةً ما تريده، لكنه يعني أن نظام الكشف لا يرى سوى حدث التثبيت. للتحقق من أن مجموعتك تكتشف الاستمرارية نفسها - 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، لأن OCSF status يسجل الإجراء المرفوض والأداة المعطلة بشكل متطابق.
يفتح سجل التدقيق في وضع الإلحاق، لذا تتراكم السجلات من تشغيلات متعددة في ملف واحد للتحليل الدفعي. إذا كنت تضيف وحدة وتريد معرفة كيف يتم تصنيف نوع حدث جديد في 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 | مجموعة Lazarus: حقن dylib، اكتشاف الخدمات، قذيفة عكسية، استمرارية plist |
amos_atomic_stealer.yaml | AMOS / Atomic Stealer: سارق معلومات MaaS، تجاوز Gatekeeper، تفريغ سلسلة المفاتيح، سرقة 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"
المساهمة
راجع CONTRIBUTING.md لإضافة وحدات جديدة، وأسلوب الكود، وعملية طلب السحب الكاملة.
الإصدارات مؤتمتة - يقوم release-please بإصدار نسخة جديدة مباشرة من عنوان طلب السحب الخاص بك وفق Conventional Commit، لذا فإن feat: add net_tls module أو fix: correct beacon jitter هو عنوان طلب السحب وإدخال سجل التغييرات في آن واحد.
إخلاء المسؤولية
MacNoise مخصص لاختبار الأمان المصرح به، والتحقق من EDR، وهندسة الكشف على الأنظمة التي تملكها أو لديك إذن كتابي صريح لاختبارها. لا يتحمل المؤلفون أي مسؤولية عن سوء الاستخدام.
سياسة كود الذكاء الاصطناعي
مساهمات كود الذكاء الاصطناعي مرحب بها، لكن يرجى مراعاة أن مراجعة الكود ستكون حاليًا عملية يقودها البشر مما يعني أن هناك حدًا لكمية الكود التي يمكننا مراجعتها. يرجى قصر طلبات السحب على إصلاح محدد، أو وحدة تتبع جديدة. من المرجح أن تُغلق طلبات السحب ذات التغييرات الواسعة.