
أداة لتقييم جودة البيانات، مبنية على أساس OSSEM الرائع.

أداة لتقييم جودة البيانات، مبنية على مشروع OSSEM الرائع.
يستخدم Power-up نموذج بيانات الكشف (DDM) من OSSEM كأساس لتقييم جودة البيانات. السبب الرئيسي لذلك هو أنه يوفر طريقة منظمة لربط مصادر بيانات ATT&CK، كيانات نموذج المعلومات المشتركة (CIM)، و قواميس البيانات (الأحداث) مع بعضها البعض.
لغير الملمين بهيكل DDM، إليك نموذج:
كما ترى، كل إدخال في DDM يحدد مصدر بيانات فرعي (نطاق) باستخدام كيانات مجردة مثل process، user، file، إلخ. يحتوي كل إدخال أيضاً على معرف الحدث (EventID) الذي ينطبق عليه النطاق. يمكنك قراءة المزيد عن هذه الكيانات هنا.
باختصار، تلعب إدخالات DDM دوراً رئيسياً في إزالة تعقيد الأحداث الخام، من خلال توفير نطاق يحدد كيف يمكن استهلاك مصدر السجل (قنوات البيانات).
يقوم Power-up بتقييم درجة جودة البيانات وفقاً لخمسة أبعاد متميزة:
يتم تقييم كل بعد بدرجة تتراوح بين 0 (لا شيء) و5 (ممتاز).
ترتبط هذه الأبعاد بقنوات البيانات، وتنتشر إلى جميع الأحداث التي توفرها.
نظراً لطبيعة هذه الأبعاد، يجب تقييمها يدوياً، وفقاً لخصائص قنوات البيانات.
يستخدم Power-up ملف resources/dcs.yml لتحديد قناة البيانات وتقييم الأبعاد:
data channel: sysmon
description: مراقبة sysmon
coverage: 2
timeliness: 5
retention: 2
---
data channel: security
description: تدقيق أمان ويندوز
coverage: 5
timeliness: 5
retention: 2
لحساب مدى اكتمال هيكل الحدث، يقارن power-up بين الأسماء القياسية في قاموس البيانات وحقول الكيانات (CIM) المشار إليها في إدخال DDM (المصدر والوجهة).
نظراً لأن جميع حقول الكيان ليست ذات صلة (يعتمد على السياق)، يستخدم power-up مفهوم الملفات الشخصية (profiles) لاختيار الحقول التي يجب أن تطابق الأسماء القياسية لقاموس البيانات. على سبيل المثال:
# ملف تعريف CIM لـ OSSEM
process:
- process_name
- process_path
- process_command_line
ملاحظة: يوجد ملف تعريف مثال في
profiles/default.ymlيمكنك التجربة به.
يتم حساب درجة الهيكل باستخدام الصيغة التالية:
SCORE_PERCENT = (MATCHED_FIELDS / TOTAL_RELEVANT_FIELDS) * 100
لتوضيح الأمر، إليك مثال لكيفية حساب درجة الهيكل:

ملاحظة: نظراً لأن قاموس بيانات Sysmon Event Id 1 يطابق 100% من حقول الكيان ذات الصلة، فسيتم تقييم درجة الهيكل بـ 5 (ممتاز).
يتم تحويل درجة الهيكل إلى مقياس 0-5 بالطريقة التالية:
| Percentage | Score |
|---|
ملاحظة: اعتماداً على حالة الاستخدام (SIEM، صيد التهديدات، التحقيق الرقمي)، يمكنك تحديد ملفات تعريف مختلفة لتقييم سجلاتك بشكل مختلف.
لحساب الاتساق، يقوم power-up ببساطة بحساب النسبة المئوية للحقول التي تحتوي على اسم قياسي في قاموس البيانات. قواميس البيانات ذات العدد الكبير من الحقول المعينة لاسم قياسي هي أكثر عرضة للارتباط مع كيانات CIM.
يتم حساب درجة الاتساق باستخدام الصيغة التالية:
SCORE_PERCENT = (STANDARD_NAME_FIELDS / TOTAL_FIELDS) * 100
يتم تحويل درجة الاتساق إلى مقياس 0-5 بالطريقة التالية:
| Percentage | Score |
|---|---|
| 0 | 0 |
| 1 إلى 50 | 1 |
| 51 إلى 99 | 3 |
| 100 | 5 |
pip install -r requirements.txt$> python3 powerup.py --help
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
usage: powerup.py [-h] [-o OSSEM] [-y OSSEM_YAML] [-p PROFILE] [--excel]
[--elastic] [--yaml]
أداة لتقييم تغطية مصادر بيانات ATT&CK، مبنية على OSSEM الرائع.
optional arguments:
-h, --help show this help message and exit
-o OSSEM, --ossem OSSEM
path to import OSSEM markdown
-y OSSEM_YAML, --ossem-yaml OSSEM_YAML
path to import OSSEM yaml
-p PROFILE, --profile PROFILE
path to CIM profile
--excel export OSSEM DDM to excel
--elastic export OSSEM data models to elastic
--yaml export OSSEM data models to yaml
--layer export OSSEM data models to navigator layer
كما ترى، يمكن لـ power-up استهلاك بيانات OSSEM من صيغتين مختلفتين:
حالياً، يقوم Power-up بتصدير مخرجات OSSEM إلى:
output/ouput/ملاحظة: إذا لم يتم تحديد مسار ملف تعريف، يستخدم power-up
profiles/default.ymlكافتراضي.
$> python3 powerup.py -o ../OSSEM --yaml
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Profile path: profiles/default.yml
[*] Parsing OSSEM from markdown
[*] Exporting OSSEM to YAML
[*] Created output/ddm_20191114_160246.yml
[*] Created output/cim_20191114_160246.yml
[*] Created output/dds_20191114_160246.yml
الهدف من التصدير/الاستيراد من/إلى YAML هو تسهيل تخصيص OSSEM. من المحتمل أن أول شيء ستفعله هو إنشاء قواميس بيانات خاصة بك، ثم إضافة إدخالات DDM جديدة، لذا فإن YAML سيجعل التحديثات أسهل.
ملاحظة 1: قم بتعديل
resources/config.ymlلإرشاد power-up حول أسماء الملفات للهياكل الصحيحة. ثم تحتاج فقط إلى وضعها في مجلد وتمريرها إلى وسيط OSSEM_YAML.
ملاحظة 2: لا يقوم power-up بتحليل كامل كائنات OSSEM إلى YAML، فقط حقول البيانات وبعض البيانات الوصفية (مثال: description). والسبب في ذلك هو أنني أردت إبقاء كائن YAML بسيطاً قدر الإمكان، فقط مع البيانات التي تحتاجها لتقييم جودة البيانات.
$> python3 powerup.py -o ../OSSEM --excel
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Profile path: profiles/default.yml
[*] Parsing OSSEM from markdown
[*] Exporting OSSEM DDM to Excel
[*] Saved Excel to output/ddm_enriched_20191114_160041.xlsx
عند التصدير إلى Excel، سيقوم power-up بإنشاء DDM جذاب بصرياً، مع أبعاد جودة البيانات الخاصة بكل إدخال:

$> python3 powerup.py -o ../OSSEM --elastic
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Profile path: profiles/default.yml
[*] Parsing OSSEM from markdown
[*] Exporting OSSEM to Elastic
[*] Creating elastic index ossem.ddm
[*] Creating elastic index ossem.cim
[*] Creating elastic index ossem.dds
[*] Creating elastic index ossem.dcs
عند التصدير إلى Elastic، سيقوم power-up بتخزين جميع بيانات OSSEM في elastic. نظراً لأن DDM معزز أيضاً بأبعاد جودة البيانات الخاصة به، فستتمكن من إنشاء لوحات تحكم مثل هذه:

$> python3 powerup.py -o ../OSSEM --layer
_____ _____ _____ _____ _____ _____ _____ _ _ _ _____ _____ _____ _____ __
| | __| __| __| | | _ | | | | | __| __ |___| | | _ | |
| | |__ |__ | __| | | | | __| | | | | | __| -|___| | | __|__|
|_____|_____|_____|_____|_|_|_| |__| |_____|_____|_____|__|__| |_____|__| |__|
[*] Profile path: profiles/default.yml
[*] Parsing OSSEM from markdown
[*] Exporting OSSEM to Naviagator Layer
[*] Pulling ATT&CK data
[*] Generating data source quality layer
[*] Created output/ds_layer_20191119_220141.json
عند التصدير إلى طبقة، سيقوم power-up بإنشاء ملف JSON لطبقة Attack Navigator، مع أبعاد جودة البيانات الخاصة بكل تقنية:

ملاحظة: يتم اشتقاق درجات التقنيات من متوسط درجات مصادر البيانات في DDM.
| ATT&CK Data Source | Sub Data Source | Source Data Object | Relationship | Destination Data Object | EventID |
|---|
| مراقبة العمليات | إنشاء عملية | process | created | process | 4688 |
| مراقبة العمليات | إنشاء عملية | process | created | process | 1 |
| مراقبة العمليات | إنهاء عملية | process | terminated | - | 4689 |
| مراقبة العمليات | إنهاء عملية | process | terminated | - | 5 |
| Dimension | Type | Description |
|---|
| التغطية | قناة بيانات | عدد الأجهزة أو شرائح الشبكة التي تغطيها قناة البيانات |
| التوقيت المناسب | قناة بيانات | المدة التي يستغرقها الحدث ليصبح متاحاً |
| الاحتفاظ | قناة بيانات | المدة التي يظل فيها الحدث متاحاً |
| الهيكل | حدث | مدى اكتمال الحدث، وما إذا كانت الحقول ذات الصلة متاحة |
| الاتساق | حدث | مدى توحيد حقول الحدث، وما إذا تم تطبيع الحقول |
| 0 | 0 |
| 1 إلى 25 | 1 |
| 26 إلى 50 | 2 |
| 51 إلى 75 | 3 |
| 76 إلى 99 | 4 |
| 100 | 5 |