
macnoise v0.2.1
مولّد تليمتري نظام 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 | فحوصات أذونات 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
الأعلام العامة
| العلم | الافتراضي | الوصف |
|---|---|---|
--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 | مُولَّد | تعيين معرّف الارتباط لهذه التشغيلة |
تدفق بيانات السيناريو
تستخدم ملفات السيناريو 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، أو ملف تعريف صدفة
معدَّل - يجب أن يكون الأثر لا يزال موجودًا عند تشغيل الفحص:
./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 مُصنَّفًا واحدًا
(المخطط 2.0). تحدّد النتيجة ما حدث للإجراء الذي حاول MacNoise تنفيذه، بينما
يحدّد subject الملف أو العملية أو نقطة نهاية الشبكة أو الخدمة أو المورد المعني:
outcome | المعنى | العلامة البشرية |
|---|---|---|
executed | نُفّذ الإجراء وفعل ما تدّعيه الوحدة | [+] |
denied | نُفّذ الإجراء ورفضته البيئة | [-] |
indeterminate | نُفّذ الإجراء، لكن لا يمكن استنتاج أي شيء | [?] |
error | فشل MacNoise نفسه في تنفيذ الإجراء | [!] |
فحص TCC مرفوض أو إشارة إلى C2 ميت هو القياس عن بُعد الذي وُجدت هذه الأداة
لتوليده، لذا فهو متميز عن error، الذي يعني أن MacNoise نفسه فشل. يسجّل سجل
التدقيق القيمة نفسها عند unmapped.outcome. تُستبدل المعاملات المُصرَّح بأنها
حساسة بـ [REDACTED] في سجلات التدقيق المُدارة وهوية سطر الأوامر.
يفتح سجل التدقيق في وضع الإلحاق، لذا تتراكم السجلات من تشغيلات متعددة في ملف واحد للتحليل الدفعي. إذا كنت تضيف وحدة وتريد معرفة كيف يُصنَّف نوع حدث جديد في OCSF، راجع CONTRIBUTING.md.
مرجع الوحدات
فهرس الوحدات المُولَّد هو المرجع الموثوق للأسماء والمعاملات والمخرجات وأنواع الأحداث والامتيازات وتعيينات ATT&CK. تشرح ملاحظات الفئات سلوك المنصة والحدود التشغيلية: