العودة إلى التحديثات
New releaseSep 3, 2026

macnoise v0.5.0

مولّد قابل للتوسيع لبيانات القياس عن بُعد لنظام MacOS.

مشاركة
Description of image

CI Release

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، osascriptproc_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تعداد خدمة XPCxpc_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

الأعلام العامة

العلمالافتراضيالوصف
--formathumanتنسيق الإخراج: human أو jsonl
--output(لا شيء)كتابة الإخراج إلى ملف (بالإضافة إلى stdout)
--verbosefalseإخراج مطوّل يتضمن أخطاء التنظيف
--dry-runfalseمعاينة الإجراءات دون تنفيذها
--no-cleanupfalseترك آثار الوحدة في مكانها (انظر أدناه)
--timeout30المهلة الزمنية لكل وحدة بالثواني
--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.

مرجع الوحدات

توجد وثائق الوحدات بجانب كل فئة:

السيناريوهات

تربط السيناريوهات الوحدات في تسلسلات مرتّبة - ملف YAML واحد يعيد تشغيل نمط اختراق متعدد المراحل ضد أنظمة الكشف لديك.

الملفالوصف
network_only.yamlجميع وحدات الشبكة
edr_validation.yamlتغطية شاملة لكشف EDR
full_sweep.yamlجميع الفئات
lazarus_group.yamlمجموعة Lazarus: حقن dylib، استكشاف الخدمات، صدفة عكسية، استمرارية plist
amos_atomic_stealer.yamlAMOS / Atomic Stealer: برمجية سرقة معلومات MaaS، تجاوز Gatekeeper، استخراج سلسلة المفاتيح، تسريب ZIP، استمرارية باب خلفي
clickfix.yamlClickFix: سطر أوامر واحد مموّه يُلصق في 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 ذات التغييرات الواسعة.

الفئات