
بيانات من تمرين محاكاة الخصم الآلي لـ BRAWL
من المشكلات الصعبة التي تواجه باحثي الأمن السيبراني عند تطوير قدرات الكشف والاستجابة، إيجاد بيئة واقعية لاختبار فرضياتهم وقدراتهم.
أرخص طريقة هي اختبار القدرات على شبكة مختبر صغيرة. لكن هذه البيئة تفتقر إلى حجم شبكة المؤسسات الحقيقية والضوضاء البيئية الحقيقية التي تجعل الكشف أصعب بكثير. من نواحٍ عديدة، أفضل بيئة هي الاختبار على شبكات متعددة على نطاق مؤسسي مع مهاجم مسيطر عليه ولكن واقعي وضوضاء حقيقية من المستخدمين، ومسؤولي النظام، والبرامج/الأجهزة التابعة لجهات خارجية. التحدي في الاختبار في هذه البيئة هو أنها مكلفة وفي بعض السيناريوهات عالية المخاطر.
يسعى BRAWL إلى إنشاء حل وسط من خلال إنشاء نظام يقوم تلقائياً بإنشاء شبكة مؤسسية داخل بيئة سحابية. OpenStack هي البيئة الوحيدة المدعومة حالياً، ولكنها تُصمم بطريقة تتيح دعم بيئات سحابية أخرى بسهولة في المستقبل. يقوم BRAWL أيضاً ببناء شبكة تحليل تحتوي على خط أنابيب استيعاب ومعالجة بيانات باستخدام LogStash و Kafka. وكجزء من شبكة التحليل، يقوم بإنشاء نظام تخزين وبحث للأحداث باستخدام Elasticsearch و Kibana. يقوم BRAWL بتشغيل شبكة مؤسسية "Game Board" تحتوي على صور Windows. هذه الصور تحتوي على Microsoft Sysmon وأجهزة استشعار أخرى مثبتة ومكونة مسبقاً لإعادة توجيه السجلات إلى إطار استيعاب البيانات.
لدى BRAWL أيضاً مفهوم الروبوتات (bots)، والتي يمكن أن تكون حمراء أو زرقاء أو رمادية. الروبوتات الحمراء هجومية، والروبوتات الزرقاء دفاعية، والروبوتات الرمادية تحاكي سلوك المستخدم الشرعي لتوفير ضوضاء تجعل الكشف أكثر صعوبة. عندما يريد المستخدم اختبار فرضيات بحثية، يقوم بتنفيذ روبوت BRAWL. يقوم روبوت BRAWL بتسجيل نفسه مع وحدة التحكم BRAWL Controller، والتي تقوم بعد ذلك بتنسيق ألعاب بين روبوتات BRAWL على Game Board.
ملاحظة: نظراً لمشاكل في أحجام الملفات وحصص GitHub، نقوم بوضع جميع الملفات في ملف zip بدلاً من تركها كنص عادي في مستودع git. جميع البيانات موجودة في الملف
يتكون هذا الإصدار من بعض البيانات من نموذج BRAWL الأولي. قمنا بإنشاء شبكة مؤسسية صغيرة، موصوفة أدناه. ثم قمنا بتشغيل لعبة واحدة باستخدام مشروع أبحاث MITRE CALDERA كروبوت أحمر.
CALDERA هو مشروع أبحاث تابع لـ MITRE يقوم بأتمتة نشاط محاكاة الخصم بناءً على المعلومات الواردة في نموذج التكتيكات الخصمية والتقنيات والمعرفة المشتركة (ATT&CK). يقوم بتنفيذ مجموعة من تكتيكات وتقنيات ATT&CK ويستخدم نظام تخطيط (https://dl.acm.org/citation.cfm?id=2991111) لأتمتة تفعيل هذه التقنيات وتوليد سلوك خصم بعد الاختراق داخل شبكة مؤسسية.
تم إصدار هذه البيانات بموجب ترخيص Creative Commons BY
شبكتنا المؤسسية الصغيرة هي شبكة مسطحة تتكون من وحدة تحكم بالمجال (dc.brawlco.com) و 16 محطة عمل. كل جهاز كمبيوتر يحمل اسم المستخدم الأساسي في اسم الجهاز (مثل المستخدم beane عادة ما يسجل الدخول إلى beane-pc). هذا المستخدم لديه صلاحيات مسؤول محلي على الكمبيوتر.
جميع أجهزة الكمبيوتر تعمل بنظام Windows 8.1. وحدة تحكم المجال تعمل بنظام Windows Server 2012 R2.
على أجهزة Windows 8، قمنا بإجراء تغييرات لتفعيل WDigest للاحتفاظ بكلمات المرور النصية العادية في ذاكرة LSASS باستخدام الأمر التالي في السجل: reg ADD HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest\ /v UseLogonCredential /t REG_DWORD /d 1 /F
لهذا التمرين، كان CALDERA هو روبوت BRAWL الوحيد المشارك. بينما من الناحية المفاهيمية يمكن استخدام BRAWL لاختبار مجموعة متنوعة من سلوكيات المهاجم والكشف، فإن العديد من جهود MITR البحثية تتبع فلسفة "افتراض الاختراق". لذلك نعطي CALDERA نقطة بداية كمسؤول محلي على جهاز على الشبكة في بداية التمرين.
أيضاً، بدون وجود روبوت رمادي يقوم بتسجيل الدخول عبر مضيفين مختلفين، فإن Game Board الخاصة بـ BRAWL تكون عقيمة من منظور بيانات الاعتماد التي يمكن سرقتها واستخدامها من قبل الروبوتات الحمراء. لتمكين الحركة الجانبية، تستخدم وحدة التحكم BRAWL Controller psexec لإنشاء أحداث تسجيل دخول على المضيفين باستخدام بيانات اعتماد مستخدمين آخرين من الشبكة.
قام CALDERA بأداء تقنيات ATT&CK التالية أثناء التمرين:
هناك خمسة أنواع من البيانات في هذا المستودع. كل نوع موجود في ملفه الخاص داخل مجلد data/.
يتم تشجيع الروبوتات الحمراء والزرقاء على تسجيل معلومات حول أنشطتهم أو اكتشافاتهم بتنسيق BRAWL المشترك (BSF). الهدف من ذلك هو تسهيل مقارنة اكتشافات/إجراءات الروبوت الأزرق مع إجراءات الروبوت الأحمر.
التنسيق قيد التطوير حالياً وقد يتغير في مجموعات البيانات المستقبلية.
يتم وصف حقول BSF أدناه في قسم تفاصيل مصادر البيانات.
مصادر الأحداث المختلفة في BRAWL تتعامل مع الوقت بشكل مختلف. الوقت إما هو الوقت الذي وصل فيه الحدث إلى إطار استيعاب السجلات لدينا، أو الوقت الذي تم إنشاء الحدث فيه على المضيف/نقطة النهاية، أو الوقت المسجل بواسطة روبوت على الشبكة. بشكل عام، يجب أن تكون هذه الأوقات ضمن بضعة أجزاء من الألف من الثانية عن بعضها البعض. عندما يكون ذلك ممكناً، يستخدم إطار استيعاب السجلات وقت الحدث المخزن في الحدث بدلاً من وقت وصول الحدث إلى عقد الاستيعاب. يوضح الجدول أدناه الطريقة المستخدمة لكل نوع بيانات.
نحن نستخدم Sysmon v3.11. يحتوي sysmon_config.txt على مخرجات الأمر sysmon -c الذي يوضح تكويننا.
يقوم Sysmon بإنشاء العديد من أنواع الأحداث المختلفة، والتي تتطابق مع أزواج كائن/إجراء مختلفة في CAR. يتم شرح الحقول لكل نوع بمزيد من التفاصيل على موقع CAR: https://car.mitre.org/wiki/Data_Model
أزواج الكائن/الإجراء التي يتم إنشاؤها بواسطة Sysmon في تكويننا هي:
driver/loadfile/attr_modifyflow/startmodule/loadprocess/createprocess/terminatethread/createthreat/remote_createاستخدم نموذج بيانات CAR لتحديد أسماء الحقول ودلالاتها للحقول الموجودة في data_model.fields.* لكل زوج كائن/إجراء أعلاه.
تم جمع هذه البيانات بشكل دوري باستخدام وحدة unified_json.ps1 من PowerShell Utilities for Security Situational Awareness التابعة لـ MITRE. يمكن أن يكون حقل userinfo مفيداً في تحديد بيانات الاعتماد التي قد تكون تم اختراقها إذا تم تشغيل أداة تفريغ بيانات الاعتماد مثل Mimikatz على النظام.
الكائنات داخل حقل المصفوفة bsf هي من نوع operation أو step أو event. جميع الكائنات تحتوي على حقل nodetype يمكن استخدامه لتحديد نوع الكائن.
eventيمكنك قراءة المزيد عن دلالات الحقول المطلوبة والاختيارية من خلال العثور على الكائن المرتبط في نموذج بيانات CAR
stepكائنات الخطوة تربط حدثاً واحداً أو أكثر معاً في مجموعة ذات مستوى أعلى من النشاط. توفر كائنات الخطوة أيضاً مكاناً لمصدرات BSF لتسمية النشاط بعلامات ATT&CK.
operationكائنات العملية تربط كائنات خطوة متعددة معاً. ومع ذلك، لا توجد كائنات Operation في مجموعة البيانات هذه.
أوصاف وملاحظات لحقول الحدث (خاصة "واحد على الأقل من"):
(Chunk 1 ends here. Translation of the next chunk will follow.)1. حقول الوقت.
happened_after و happened_before كقوسين زمنيين أيسر وأيمن على التوالي، يحددان حدودًا لفاصل عدم اليقين للحدث الفعلي. يجب الإبلاغ عن واحد على الأقل من هذه الحقول الثلاثة (أي time و happened_after و happened_before) مع كل كائن event. الحقول الأخرى اختيارية، ولكن يجب الإبلاغ عنها إذا كانت معروفة. على وجه الخصوص، تُشجع البوتات على الإبلاغ عن قيمة لـ "time" تمثل أفضل تقدير لديها، حتى لو لم يكن لديها وقت دقيق.command_line الذي أنشأ العملية، أو exe / الذي تم تنفيذه.المضيفون على شبكة BRAWL الخاصة بنا لهذه اللعبة:
| نوع البيانات | الوصف |
|---|
| game_metadata | بيانات تصف سيناريو BRAWL |
| sysmon | بيانات تم جمعها من Sysmon الذي يعمل على كل محطة عمل |
| win_event | سجلات أحداث Windows |
| computer_properties | بيانات تم جمعها من نصوص برمجية مخصصة توفر بعض المعلومات عن أجهزة الكمبيوتر في الشبكة |
| bsf | إجراءات الروبوت الأحمر بتنسيق BRAWL المشترك (BSF) |
| مصدر البيانات | ملاحظات الوقت |
|---|
| computer_properties | من حقل time |
| game_metadata | وقت وصوله إلى إطار الاستيعاب |
| sysmon | من حقل utc_time |
| win_event | مسحوب من وقت حدث Windows |
| bsf | حقل @timestamp هو وقت وصوله إلى إطار الاستيعاب. لكن حقول BSF المتعلقة بالوقت (مثل happened_after، happened_before، إلخ) هي أوقات بداية أو نهاية الأحداث بناءً على الوقت على خادم التحكم والقيادة الخاص بـ CALDERA. |
| اسم الحقل | الوصف |
|---|
| @timestamp | الوقت المتعلق بالحدث. راجع الملاحظة أعلاه حول الوقت. |
| @uuid | معرف الحدث الفريد |
| game_id | معرف اللعبة الفريد لهذا التمرين. |
| type | نوع الحدث. دائماً game_metadata لهذه السجلات |
| hosts | قائمة بالمضيفين الذين كانوا جزءاً من التمرين و"داخل الحدود" للروبوت الأحمر |
| randomization_seed | بذرة يمكن استخدامها من قبل المشاركين في روبوت BRAWL لتنفيذ سلوك "عشوائي" يكون هو نفسه عبر عمليات تنفيذ BRAWL المختلفة |
| starting_host | المضيف الذي يبدأ منه الروبوت الأحمر. |
| اسم الحقل | الوصف |
|---|
| @timestamp | الوقت المتعلق بالحدث. راجع الملاحظة أعلاه حول الوقت. |
| @uuid | معرف الحدث الفريد |
| type | نوع الحدث. دائماً sysmon لهذه السجلات |
| game_id | معرف اللعبة الفريد لهذا التمرين. |
| data_model.object | CAR الكائن الذي يتم التعامل معه. |
| data_model.action | CAR الإجراء الذي يتم تنفيذه على الكائن. هذا الحقل عبارة عن مصفوفة لأن بعض الأحداث يمكن أن تتوافق مع أكثر من إجراء في نموذج بيانات CAR. مثال على ذلك أحداث إنشاء الخيوط عن بعد. |
| data_model.fields.* | الحقول ذات الصلة بزوج الكائن/الإجراء المحدد. |
| game_id | معرف اللعبة الفريد لهذا التمرين. |
| host | اسم المضيف الذي تم تسجيل الحدث منه. |
| اسم الحقل | الوصف |
|---|
| @timestamp | الوقت المتعلق بالحدث. راجع كل حدث أدناه للحصول على تفاصيل حول كيفية حسابه |
| @uuid | معرف الحدث الفريد |
| type | نوع الحدث. دائماً win_event لهذه السجلات |
| game_id | معرف اللعبة الفريد لهذا التمرين. |
| host | المضيف الذي سجل الحدث |
| raw | إدخال سجل أحداث Windows بتنسيق XML الخام |
| data_model.fields.log_name | اسم سجل Windows (Application، System، أو Security) |
| data_model.fields.log_type | نوع السجل لـ log_name معين |
| اسم الحقل | الوصف |
|---|
| @timestamp | الوقت المتعلق بالحدث. راجع الملاحظة أعلاه حول الوقت. |
| @uuid | معرف الحدث الفريد |
| type | نوع الحدث. دائماً computer_properties لهذه السجلات |
| game_id | معرف اللعبة الفريد لهذا التمرين. |
| host | اسم الكمبيوتر الذي تم تشغيل النص البرمجي عليه |
| netinfo | مجموعة من كائنات netinfo |
| netinfo.DNSServers | مجموعة من محللات DNS المكونة لهذا المضيف |
| netinfo.Gateway | البوابة لهذه الواجهة |
| netinfo.IPAddress | عناوين IP لهذه الواجهة |
| netinfo.IsDHCPEnabled | هل DHCP مفعل؟ |
| netinfo.MACAddress | عنوان MAC لهذه الواجهة |
| netinfo.SubnetMask | قناع الشبكة الفرعية لعناوين IP المقابلة |
| pcinfo | كائن يصف معلومات عن جهاز الكمبيوتر |
| pcinfo.AssetTag | علامة الأصول إذا كانت متاحة |
| pcinfo.CPU | معلومات عن المعالج (المعالجات) |
| pcinfo.ChassisType | غير مستخدم في BRAWL. "Unknown" |
| pcinfo.Disks | معلومات عن القرص (الأقراص) المتصلة |
| pcinfo.DomainName | المجال الذي ينتمي إليه النظام |
| pcinfo.LastBootUpTime | وقت بدء تشغيل النظام |
| pcinfo.Memory | معلومات عن الذاكرة على النظام |
| pcinfo.OS | معلومات عن نظام التشغيل قيد التشغيل |
| pcinfo.SerialNumber | الرقم التسلسلي للعتاد |
| time | وقت تشغيل النص البرمجي |
| userinfo | مصفوفة تحتوي على كائنات userinfo تصف المستخدمين الذين سجلوا الدخول إلى النظام منذ آخر إقلاع |
| userinfo.AuthenticationPackage | حزمة المصادقة المستخدمة للمصادقة |
| userinfo.Domain | المجال (أو الكمبيوتر المحلي) الذي ينتمي إليه الحساب |
| userinfo.LogonId | معرف تسجيل الدخول |
| userinfo.LogonTime | وقت تسجيل الدخول |
| userinfo.LogonType | ثوابت نوع تسجيل الدخول في Windows |
| userinfo.LogonTypeName | وصف نوع تسجيل الدخول |
| userinfo.UserName | اسم المستخدم للجهة التي سجلت الدخول |
| اسم الحقل | الوصف |
|---|
| @timestamp | الوقت المتعلق بالحدث. راجع الملاحظة أعلاه حول الوقت. |
| @uuid | معرف الحدث الفريد |
| type | نوع الحدث. دائماً bsf_events لهذه السجلات |
| game_id | معرف اللعبة الفريد لهذا التمرين. |
| bsf | مصفوفة من أحداث BSF تصف نشاط الروبوت. يتم وصف حقول هذه المصفوفة بمزيد من التفصيل أدناه. |
| bsf_version | إصدار مخطط BSF المستخدم لمصفوفة أحداث bsf |
| producer_id | الروبوت الذي أنتج بيانات BSF هذه. |
| الحقل | الوصف |
|---|
| id | معرف فريد لكل حدث. |
| nodetype | نوع هذه العقدة. أحد: {"operation", "step", "event"}. |
| host | اسم المضيف أو عنوان IP الذي تم فيه تنفيذ / اكتشاف هذا الحدث. |
| time | ملاحظة: يجب الإبلاغ عن حقل وقت واحد على الأقل من الحقول الثلاثة التالية (أي "time"، أو "happened_after"، أو "happened_before"). "time" مرغوب فيه بشكل خاص؛ يُشجع على الثلاثة. يرجى الاطلاع على الملاحظة 1 في الملاحظات العامة أدناه. ملاحظة حول تنسيق الوقت: يجب أن تكون جميع معلومات الوقت بتنسيق ISO 8601. وبشكل أكثر تحديداً: 'yyyy-mm-ddThh:nn:ss.llll00'. حيث y هي السنة، m الشهر، d اليوم، h الساعة، n الدقيقة، s الثانية، l المللي ثانية (مع صفرين في النهاية). مثال: 2017-02-22T18:38:14.060000 اختياري: تقدير للوقت الذي وقع فيه هذا الحدث. |
| happened_after | اختياري: حد مبكر ("قوس زمني أيسر") لعدم اليقين في "الوقت". |
| happened_before | اختياري: حد متأخر ("قوس زمني أيمن") لعدم اليقين في "الوقت". |
| confidence | اختياري: يمكّن الروبوتات الزرقاء من إيصال درجة الثقة (رقم حقيقي بين 0.0 و 1.0) في ارتباط هذا الحدث بهجوم. |
| object | الكائن الذي تم التعامل معه؛ راجع الجدول أدناه للقيم المسموح بها. مبني بشكل فضفاض على نموذج بيانات CAR |
| action | الإجراءات لكائن معين. مبني بشكل فضفاض على نموذج بيانات CAR |
| specific_field_1 .. N | 1-N سمات وصفية (انظر أدناه). مبني بشكل فضفاض على نموذج بيانات CAR |
| الكائن | الإجراء | الحقل(الحقول) المطلوبة | الحقل(الحقول) الاختيارية |
|---|
| عملية (process) | إنشاء إنهاء مسح | واحد على الأقل من: {pid, command_line, exe, image_path} | fqdn hostname md5_hash parent_exe parent_image_path ppid sha1_hash sha256_hash sid signer user |
| تدفق (flow) | بداية نهاية رسالة | واحد على الأقل من: {src_hostname,src_ip} واحد على الأقل من: {dest_hostname, dest_ip} واحد على الأقل من: {src_port, dest_port, protocol} | content dest_fqdn exe flags fqdn hostname image_path packet_count pid ppid proto_info src_fqdn user |
| ملف (file) | إنشاء حذف تعديل قراءة تغيير الطابع الزمني كتابة | file_path | company file_name fqdn hostname image_path md5_hash pid ppid sha1_hash sha256_hash signer user |
| اسم الحقل | الوصف |
|---|
| id | معرف فريد لخطوات العملية. |
| nodetype | نوع هذه العقدة. أحد: {"operation", "step", "event"}. |
| attack_info | مصفوفة من كائنات التقنية (المعرفة في الجدول أدناه مباشرة)، تصف كيفية ارتباط هذه الخطوة بتصنيف ATT&CK. لماذا مصفوفة؟ على الرغم من أن تقنية واحدة غالباً ما تصف خطوة وجميع أحداثها، إلا أنه في بعض الحالات، يمكن تنفيذ تقنيات متعددة. |
| attack_info.technique_id | معرف تقنية ATT&CK (مثل "T1059") يصف آلية الهجوم التي استخدمها الأحمر في هذه الخطوة والأحداث المشار إليها. |
| attack_info.technique_name | سلسلة نصية قابلة للقراءة البشرية تصف هذه التقنية (مثل "Command-Line Interface"). |
| attack_info.tactic | مصفوفة من تسميات تكتيك ATT&CK واحدة أو أكثر تصف الهدف/الاستراتيجية لهذه التقنية. (لاحظ أن تقنية واحدة يمكنها ممارسة تكتيكات متعددة.) مثال: ["Lateral Movement", "Execution"] |
| description | اختياري: الملاحظات أو الشروح لهذه الخطوة توضع هنا. |
| events | مصفوفة من معرفات كائنات event التي تشكل هذه الخطوة. |
image_path