العودة إلى التحديثات
New releaseAug 2, 2026

macnoise v0.2.1

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

مشاركة
وصف الصورة

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 scenario configs/scenarios/file_flow.yaml --format jsonl --output /tmp/events.jsonl

فئات القياس عن بُعد

الفئةالوصف
networkاتصالات TCP، وHTTP، والمستمعون، والأصداف العكسية، وDNS، وTLS
processالتنفيذ الدقيق، وإرسال الإشارات، وحقن dylib، وتجاوز Gatekeeper، وosascript
fileالاستكشاف المحدود، والقراءة/النسخ الحرفي، والإنشاء، والتعديل، والأرشفة، والإخفاء، وتشفير الطُعم
tccفحوص أذونات TCC مع متطلبات الوصول الكامل إلى القرص، أو جهات الاتصال، أو إمكانية الوصول، أو تسجيل الشاشة الدقيقة
credentialالوصول الأصلي إلى مخزن بيانات الاعتماد
volumeإنشاء صور القرص ودورة حياة وحدة التخزين المثبّتة
serviceتعداد Launchd، واستمرارية LaunchAgent/Daemon، وcron، وملف تعريف الصدفة، وعناصر تسجيل الدخول
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

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

العلمالافتراضيالوصف
--formathumanصيغة الإخراج: human أو jsonl
--output(لا شيء)كتابة الإخراج إلى ملف (بالإضافة إلى stdout)
--verbosefalseإخراج مطوّل يتضمن أخطاء التنظيف
--dry-runfalseمعاينة الإجراءات دون تنفيذها
--no-cleanupfalseترك مخلفات الوحدة في مكانها (انظر أدناه)
--timeout30مهلة كل وحدة بالثواني
--audit-log(لا شيء)كتابة سجلات تدقيق OCSF 1.7.0 إلى ملف JSONL
--config(لا شيء)تحميل الإعدادات الافتراضية من ملف إعدادات YAML
--run-idمُولَّدتعيين معرّف الارتباط لهذه التشغيلة

تدفق بيانات السيناريو

تستخدم ملفات السيناريو 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؛ فالإدراجات نسبية، ولا يمكنها تجاوز الدليل الجذري للسيناريو، ويتم فحصها بحثًا عن الدورات، وتقتصر على ثمانية مستويات. يتحقق MacNoise من الرسم البياني الكامل قبل التنفيذ، ويمنح التشغيل مساحة عمل خاصة واحدة، وينظّف الوحدات المستدعاة بترتيب عكسي. استخدم --input content=value لتوفير المدخلات و--report report.json لتقرير التنفيذ المُصدَّر بإصدار.

ترك الآثار في مكانها

بشكل افتراضي، تعكس كل وحدة تأثيرها عند انتهائها. هذا عادةً ما تريده، لكنه يعني أن الكشف لا يرى سوى حدث التثبيت. للتحقق من أن حزمتك تكشف الاستمرارية نفسها - مثل LaunchAgent موجود في ~/Library/LaunchAgents، أو إدخال cron، أو ملف تعريف shell معدَّل - يجب أن يظل الأثر موجودًا عند تشغيل الفحص:

./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 مرجعية واحدة وsubject واحدًا مُنمّطًا (schema 2.0). يوضّح outcome ما حدث للإجراء الذي حاول MacNoise تنفيذه، بينما يحدّد subject الملف أو العملية أو نقطة النهاية الشبكية أو الخدمة أو المورد المعني:

outcomeالمعنىالعلامة البشرية
executedنُفّذ الإجراء وفعل ما تدّعيه الوحدة[+]
deniedنُفّذ الإجراء ورفضته البيئة[-]
indeterminateنُفّذ الإجراء، لكن لا يمكن استنتاج شيء[?]
errorفشل MacNoise نفسه في تنفيذ الإجراء[!]

فحص TCC مرفوض أو beacon إلى C2 ميت هو القياس عن بُعد الذي وُجدت هذه الأداة لتوليده، لذا فهو متميز عن error، الذي يعني أن MacNoise نفسه فشل. يسجّل سجل التدقيق القيمة نفسها عند unmapped.outcome. تُستبدل المعاملات المعلنة كحساسة بـ [REDACTED] في سجلات التدقيق المُدارة وهوية سطر الأوامر.

يُفتح سجل التدقيق في وضع الإلحاق، لذا تتراكم السجلات من عمليات تشغيل متعددة في ملف واحد للتحليل الدفعي. إذا كنت تضيف وحدة وتريد معرفة كيف يُصنَّف نوع حدث جديد ضمن OCSF، راجع CONTRIBUTING.md.

مرجع الوحدات

يُعد كتالوج الوحدات المُولَّد المرجع الموثوق للأسماء والمعاملات والمخرجات وأنواع الأحداث والصلاحيات وتعيينات ATT&CK. تشرح ملاحظات الفئات سلوك المنصة والحدود التشغيلية:

الفئات