
أداة تصور بيانات تفاعلية لفرق الدفاع السيبراني لتحليل بيانات الكشف، وفهم العلاقات، وتقليل إرهاق التنبيهات، وتحسين الاستجابة للحوادث.
Detectree هي أداة تصور بيانات مخصصة لفرق الدفاع (الفرق الزرقاء). توفر تمثيلًا رسوميًا لبيانات الاكتشافات، مما يسمح للمحلل بتكوين آراء شبه فورية حول طبيعة النشاط الأساسي وفهم العلاقات المعقدة بين نقاط البيانات. في النهاية، يمكن أن يساعد ذلك في تقليل زمن الاستجابة، وتقليل إرهاق التنبيهات، وتسهيل التواصل بين المحللين داخل الفرق.
Detectree مكتوبة بلغة Svelte ومبنية على مكتبة force-graph بلغة JavaScript.
من أجل استخدام Detectree في بيئتك، يجب أن تستوفي الاكتشافات مجموعة دنيا من الخصائص. في الجدول التالي يمكنك رؤية الحقول التي يجب تضمينها في كل اكتشاف وتلك الاختيارية.
| الحقل | مطلوب |
|---|---|
| معرف نقطة النهاية | نعم |
| الفئة | نعم |
| الخطورة | نعم |
| اسم الاكتشاف | نعم |
| اسم العملية الأصلية | نعم |
| معرف العملية الأصلية | نعم |
| اسم العملية | نعم |
| معرف العملية | نعم |
| المستخدم | لا |
| سطر الأوامر | لا |
| اسم الملف | لا |
| مفتاح التسجيل | لا |
| عنوان الشبكة | لا |
| اسم العملية المستهدفة | لا |
| معرف العملية المستهدفة | لا |
يتم تعريف تعيينات كل حقل في ملف schema.yml، ويتم توفير ملف مثال schema.yml.example. يحدد هذا الملف الحقول التي يجب استخراجها من البيانات في الواجهة الخلفية وكيفية تعيينها داخليًا. على وجه الخصوص، يحتوي جزء التعيين على تعيين Detectree على اليسار وتعيين الواجهة الخلفية على اليمين، وستحتاج إلى ملء التعيين وفقًا لبيئتك.
يحتوي المخطط أيضًا على تكوين الواجهة الخلفية، وبالنسبة لـ Elastic يجب أن يكون الأمر مباشرًا ولكن معنى الحقول المختلفة هو كما يلي:
primaryId هو المعرف الفريد لنقطة النهاية. هذا هو ما يُستخدم لاسترداد الاكتشافات.
timeField هو حقل الوقت المستخدم لتقييد الاستعلام.
source هو الحقل الذي يحدد نوع الاكتشاف، وفي مخطط المثال يتم تعيينه إلى NewProcess وRegistryWrite وFileAccess وما إلى ذلك.
بعد ذلك في mappings، يحدد حقل type اكتشافًا معينًا، على سبيل المثال إذا كانت واجهتك الخلفية تدعم فقط اكتشافات NewProcess (أو أي اسم مقابل)، فستحتاج إلى تعيين واحد فقط. ومرتبطًا بذلك بشكل وثيق، يربط حقل kind نوع الاكتشاف بنوع Detectree. كمثال، إذا كان kind هو file، يجب أن يوفر التعيين filePath الذي سيُستخدم لرسم عقدة سياق.
حاليًا، الواجهة الخلفية الوحيدة المدعومة هي Elastic، ومع ذلك يجب أن يكون بناء محول لأي واجهة خلفية جديدة أمرًا بسيطًا. راجع قسم إضافة واجهة خلفية جديدة لمزيد من المعلومات.
من أجل نشر التطبيق في بيئتك، تحتاج إلى تثبيت التبعيات المطلوبة باستخدام npm install (أو pnpm install أو yarn). ستحتاج بعد ذلك إلى تحديد المحول المناسب لبيئتك، اتبع هذا الدليل للحصول على أحدث المعلومات.
على سبيل المثال، إذا كنت تريد استخدام Node كواجهة خلفية، فستحتاج إلى تثبيت @sveltejs/adapter-node وتعديل ملف svelte.config.js الخاص بك باستبدال @sveltejs/adapter-auto بـ @sveltejs/adapter-node. يمكن بعد ذلك بناء المشروع باستخدام الأمر التالي، وسيكون الناتج في مجلد output.
npm run build
يمكن بدء تشغيل خادم تطوير باستخدام الأمر التالي، مما سيسمح بتقديم التطبيق محليًا.
npm run dev
# أو ابدأ الخادم وافتح التطبيق في علامة تبويب متصفح جديدة
npm run dev -- --open
يمكن رؤية رسم بياني مثال في لقطة الشاشة التالية

من أجل دعم واجهة خلفية جديدة، تحتاج إلى إنشاء ملف TypeScript مخصص في مجلد backend_adapters. يمكنك استخدام ملف Elastic كقالب، ويجب أن تعرض الوحدة الجديدة دالة استعلام تأخذ كمدخلات نفس المعاملات الموجودة في ملف Elastic. يمكنك بعد ذلك الاستعلام عن الواجهة الخلفية المختارة بالطريقة المفضلة. يجب أن تُرجع دالة الاستعلام كائنًا يحتوي على البيانات المعينة وفقًا للتعيين المحدد في ملف schema.yaml. أخيرًا، لكي يتم تحديد الواجهة الخلفية بشكل صحيح، تحتاج أيضًا إلى إضافتها في الكائن التالي داخل draw_tree.ts، وستكون مفاتيح الكائن هنا أيضًا هي الطريقة التي يُشار بها إلى الواجهة الخلفية في schema.yml
const backendTypes = {
elastic: '../backend_adapters/elastic'
};