
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، أو ملف تعريف 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. تشرح ملاحظات الفئات سلوك المنصة والحدود التشغيلية: