
منصة للتجارب والبحث لدراسة تفاعل الوكلاء الآليين في بيئات شبكية محاكاة مجردة.
8 أبريل 2021: انظر الإعلان على مدونة أمن مايكروسوفت.
CyberBattleSim هي منصة بحث تجريبية للتحقيق في تفاعل العوامل الآلية التي تعمل في بيئة شبكة مؤسسية محاكاة مجردة. توفر المحاكاة تجريدًا عالي المستوى لشبكات الحاسوب ومفاهيم الأمن السيبراني. تسمح واجهة OpenAI Gym المبنية على بايثون بتدريب العوامل الآلية باستخدام خوارزميات التعلم بالتعزيز.
يتم تحديد بيئة المحاكاة بواسطة طوبولوجيا شبكة ثابتة ومجموعة من الثغرات التي يمكن للعوامل استخدامها للتحرك جانبيًا في الشبكة. هدف المهاجم هو الاستيلاء على جزء من الشبكة عن طريق استغلال الثغرات المزروعة في عقد الحاسوب. بينما يحاول المهاجم الانتشار عبر الشبكة، يراقب عامل مدافع نشاط الشبكة ويحاول اكتشاف أي هجوم يحدث والتخفيف من تأثيره على النظام عن طريق طرد المهاجم. نقدم مدافعًا عشوائيًا أساسيًا يكتشف ويخفف من الهجمات الجارية بناءً على احتمالات نجاح محددة مسبقًا. نقوم بتنفيذ التخفيف عن طريق إعادة تصوير العقد المخترقة، وهي عملية تُجرَّد نموذجيًا كعملية تمتد على عدة خطوات محاكاة.
لمقارنة أداء العوامل، ننظر إلى مقياسين: عدد خطوات المحاكاة التي تستغرقها لتحقيق هدفها، والمكافآت التراكمية عبر خطوات المحاكاة عبر عصور التدريب.
ننظر إلى هذا المشروع كمنصة تجريبية لإجراء أبحاث حول تفاعل العوامل الآلية في بيئات الشبكات المحاكاة المجردة. من خلال فتح المصدر، نأمل في تشجيع المجتمع البحثي على التحقيق في كيفية تفاعل العوامل السيبرانية وتطورها في مثل هذه البيئات الشبكية.
المحاكاة التي نقدمها بسيطة بصراحة، لكن هذا له مزايا. تمنع طبيعتها المجردة للغاية التطبيق المباشر على الأنظمة الواقعية، مما يوفر حماية ضد الاستخدام الخبيث المحتمل للعوامل الآلية المدربة عليها. في الوقت نفسه، تسمح لنا بساطتها بالتركيز على جوانب أمنية محددة نهدف إلى دراستها وتجربة خوارزميات التعلم الآلي والذكاء الاصطناعي الحديثة بسرعة.
على سبيل المثال، يركز التنفيذ الحالي على تقنيات الهجوم بالتحرك الجانبي، على أمل فهم كيف تؤثر طوبولوجيا الشبكة وتكوينها عليها. مع هذا الهدف، شعرنا أن نمذجة حركة مرور الشبكة الفعلية ليست ضرورية. هذا مجرد مثال واحد على قيود كبيرة في نظامنا قد ترغب المساهمات المستقبلية في معالجتها.
على الجانب الخوارزمي، نقدم بعض العوامل الأساسية كنقاط انطلاق، لكننا سنكون فضوليين لمعرفة كيف تقارن خوارزميات التعلم بالتعزيز الحديثة بها. وجدنا أن مساحة العمل الواسعة المتأصلة في أي نظام حاسوبي تمثل تحديًا خاصًا للتعلم بالتعزيز، على عكس تطبيقات أخرى مثل ألعاب الفيديو أو التحكم في الروبوتات. تدريب العوامل التي يمكنها تخزين واسترجاع بيانات الاعتماد هو تحدٍ آخر يواجه عند تطبيق تقنيات التعلم بالتعزيز حيث لا تتميز العوامل عادةً بذاكرة داخلية. هذه مجالات بحث أخرى يمكن استخدام المحاكاة فيها لأغراض القياس المرجعي.
تشمل المجالات الأخرى ذات الاهتمام الاستخدام المسؤول والأخلاقي لأنظمة الأمن السيبراني المستقلة: كيف تصمم شبكة مؤسسية تمنح ميزة جوهرية للعوامل المدافعة؟ كيف تجري بحثًا آمنًا يهدف إلى الدفاع عن المؤسسات ضد الهجمات السيبرانية المستقلة مع منع الاستخدام الخبيث لهذه التكنولوجيا؟
اقرأ المقدمة السريعة للمشروع.
| النوع | الفرع | الحالة |
|---|---|---|
| CI | master | |
| صورة Docker | master |
انظر توثيق القياس المرجعي. دفاتر Jupyter مع أحدث التشغيلات مدخلة تحت علامة مخصصة في /notebooks/benchmarks (latest_benchmark).
يوصى بشدة بالعمل تحت بيئة لينكس، إما مباشرة أو عبر WSL على ويندوز. تشغيل بايثون على ويندوز مباشرة قد يعمل لكنه لم يعد مدعومًا.
ابدأ باستنساخ المستودع:
git clone https://github.com/microsoft/CyberBattleSim.git
إذا حصلت على الخطأ التالي عند تشغيل papermill على الدفاتر (أو بدلاً من ذلك عند تشغيل orca --help)
/home/wiblum/miniconda3/envs/cybersim/lib/orca_app/orca: error while loading shared libraries: libXss.so.1: cannot open shared object file: No such file or directory
أو مكتبات أخرى مشتركة مثل libgdk_pixbuf-2.0.so.0،
فقم بتشغيل الأمر التالي:
sudo apt install libnss3-dev libgtk-3-0 libxss1 libasound2-dev libgtk2.0-0 libgconf-2-4
تم اختبار التعليمات على توزيعة لينكس أوبونتو (سواء أصليًا أو عبر WSL).
إذا لم يكن conda مثبتًا بالفعل، فستحتاج إلى تثبيته عن طريق تشغيل البرنامج النصي install_conda.sh.
bash install-conda.sh
بمجرد الانتهاء، افتح نافذة طرفية جديدة وقم بتشغيل البرنامج النصي للتهيئة:
bash init.sh
سيؤدي هذا إلى إنشاء بيئة conda باسم cybersim تحتوي على جميع تبعيات نظام التشغيل والبايثون المطلوبة.
لتفعيل البيئة، قم بتشغيل:
conda activate cybersim
بيئة التطوير المدعومة على ويندوز هي عبر WSL. تحتاج أولاً إلى تثبيت توزيعة أوبونتو WSL على جهاز ويندوز الخاص بك، ثم تابع مع تعليمات لينكس (القسم التالي).
للمصادقة مع Git، يمكنك إما استخدام المصادقة المستندة إلى SSH أو باستخدام خدعة credential-helper لإنشاء رمز PAT تلقائيًا. يمكن القيام بالأخير عن طريق تشغيل الأمر التالي تحت WSL (مزيد من المعلومات هنا):
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"
لتشغيل بيئتك داخل حاوية Docker، نوصي بتشغيل docker عبر نظام ويندوز الفرعي للينكس (WSL) باستخدام الإرشادات التالية:
تثبيت Docker على ويندوز تحت WSL).
لم يعد يتم صيانة هذه الطريقة، يفضل بدلاً من ذلك التشغيل تحت
بيئة لينكس في نظام WSL الفرعي.
لكن إذا أصررت، فابدأ بتثبيت Python 3.10 ثم في موجه Powershell قم بتشغيل البرنامج النصي ./init.ps1.
الطريقة الأسرع للبدء هي عبر حاوية Docker.
ملاحظة: لأسباب ترخيصية، لا نوزع علنًا أي منتج بناء. على وجه الخصوص، سجل Docker
spinshot.azurecr.ioالمشار إليه في الأوامر أدناه يبقى خاصًا بمشرفي المشروع فقط.كحل بديل، يمكنك إعادة إنشاء صورة Docker بنفسك باستخدام
Dockerfileالمقدم، ونشر الصورة الناتجة إلى سجل Docker الخاص بك واستبدال اسم السجل في الأوامر أدناه.
commit=7c1f8c80bc53353937e3c69b0f5f799ebb2b03ee
docker login spinshot.azurecr.io
docker pull spinshot.azurecr.io/cyberbattle:$commit
docker run -it spinshot.azurecr.io/cyberbattle:$commit python -m cyberbattle.agents.baseline.run
docker build -t cyberbattle:1.1 .
docker run -it -v "$(pwd)":/source --rm cyberbattle:1.1 python -m cyberbattle.agents.baseline.run
قم بتشغيل الأوامر التالية لتشغيل محاكاة باستخدام عامل RL أساسي:
python -m cyberbattle.agents.baseline.run --training_episode_count 5 --eval_episode_count 3 --iteration_count 100 --rewardplot_width 80 --chain_size=4 --ownership_goal 0.2
python -m cyberbattle.agents.baseline.run --training_episode_count 5 --eval_episode_count 3 --iteration_count 100 --rewardplot_width 80 --chain_size=4 --reward_goal 50 --ownership_goal 0
إذا تم إعداد كل شيء بشكل صحيح، يجب أن تحصل على مخرجات تبدو هكذا:
torch cuda available=True
###### DQL
Learning with: episode_count=1,iteration_count=10,ϵ=0.9,ϵ_min=0.1, ϵ_expdecay=5000,γ=0.015, lr=0.01, replaymemory=10000,
batch=512, target_update=10
## Episode: 1/1 'DQL' ϵ=0.9000, γ=0.015, lr=0.01, replaymemory=10000,
batch=512, target_update=10
Episode 1|Iteration 10|reward: 139.0|Elapsed Time: 0:00:00|###################################################################|
###### Random search
Learning with: episode_count=1,iteration_count=10,ϵ=1.0,ϵ_min=0.0,
## Episode: 1/1 'Random search' ϵ=1.0000,
Episode 1|Iteration 10|reward: 194.0|Elapsed Time: 0:00:00|###################################################################|
simulation ended
Episode duration -- DQN=Red, Random=Green
10.00 ┼
Cumulative rewards -- DQN=Red, Random=Green
194.00 ┼ ╭──╴
174.60 ┤ │
155.20 ┤╭─────╯
135.80 ┤│ ╭──╴
116.40 ┤│ │
97.00 ┤│ ╭╯
77.60 ┤│ │
58.20 ┤╯ ╭──╯
38.80 ┤ │
19.40 ┤ │
0.00 ┼──╯
للتعرف بسرعة على المشروع، يمكنك فتح أحد دفاتر Jupyter المتوفرة للعب التفاعلي مع بيئات gymnasium.
ملاحظات حول دفاتر
.py:
- يتم إيداع دفاترنا في Git كملفات
.py. يمكن فتحها وتشغيلها مباشرة في VSCode أو في Jupyter باستخدام إضافة Jupytext.- يمكن أيضًا إعادة إنشاء ملفات
.ipynbالناتجة تلقائيًا باستخدام papermill عن طريق تشغيل برنامج bash النصي run_benchmark.sh.- ننشر أيضًا لقطة من دفاتر
.ipynbالمقابلة مع المخرجات والرسوم البيانية الكاملة في علامة git منفصلة. أحدث لقطة لمخرجات دفاتر Jupyter، بما في ذلك القياسات المرجعية، متاحة من علامة git التالية: /notebooks/benchmarks (latest_benchmark).
بعض الدفاتر للبدء:
دفاتر بيئة لعبة 'Capture The Flag':
دفاتر بيئة السلسلة:
بيئات أخرى:
القياسات المرجعية: توضح الدفاتر التالية تقييم القياس المرجعي للعوامل الأساسية على بيئات مختلفة.
أحدث لقطة لمخرجات دفاتر Jupyter، بما في ذلك القياسات المرجعية، متاحة من علامة git التالية: /notebooks/benchmarks (latest_benchmark).
يوضح الكود التالي كيفية إنشاء مثيل لبيئة OpenAI Gym CyberBattleChain-v0، وهي بيئة مبنية على بنية شبكة تشبه السلسلة، مع 10 عقد (size=10) حيث يكون هدف العامل إما الحصول على ملكية كاملة للشبكة (own_atleast_percent=1.0) أو
كسر اتفاقية مستوى خدمة الشبكة بنسبة 80٪ (maintain_sla=0.80)، بينما تتم مراقبة الشبكة وحمايتها بواسطة المدافع الأساسي النموذجي الاحتمالي (defender_agent=ScanAndReimageCompromisedMachines):
import cyberbattle._env.cyberbattle_env
cyberbattlechain_defender =
gym.make('CyberBattleChain-v0',
size=10,
attacker_goal=AttackerGoal(
own_atleast=0,
own_atleast_percent=1.0
),
defender_constraint=DefenderConstraint(
maintain_sla=0.80
),
defender_agent=ScanAndReimageCompromisedMachines(
probability=0.6,
scan_capacity=2,
scan_frequency=5))
لتجربة طوبولوجيات شبكة أخرى، استخدم chainpattern.py كمثال لتعريف مجموعتك الخاصة من الآلات والثغرات، ثم أضف إدخالاً في مُهيئ الوحدة للإعلان عن بيئة Gym وتسجيلها.
يرحب هذا المشروع بالمساهمات والاقتراحات. تتطلب معظم المساهمات موافقتك على اتفاقية ترخيص المساهم (CLA) التي تعلن أن لديك الحق في، وأنك تمنحنا بالفعل، الحقوق لاستخدام مساهمتك. للحصول على التفاصيل، قم بزيارة https://cla.opensource.microsoft.com.
عند تقديم طلب سحب، سيقوم روبوت CLA تلقائيًا بتحديد ما إذا كنت بحاجة إلى تقديم CLA وتزيين الطلب بشكل مناسب (على سبيل المثال، فحص الحالة، تعليق). ما عليك سوى اتباع التعليمات المقدمة من الروبوت. ستحتاج فقط إلى القيام بذلك مرة واحدة عبر جميع المستودعات التي تستخدم CLA الخاص بنا.
اعتمد هذا المشروع مدونة قواعد السلوك مفتوحة المصدر من مايكروسوفت. لمزيد من المعلومات، انظر الأسئلة الشائعة حول مدونة قواعد السلوك أو اتصل [email protected] مع أي أسئلة أو تعليقات إضافية.
إليك بعض الأفكار حول كيفية المساهمة: تحسين المحاكاة (على أساس الأحداث، تحسين المحاكاة، ...)، تدريب خوارزمية RL على المحاكاة الحالية، تنفيذ قياس مرجعي لتقييم ومقارنة حداثة العوامل، إضافة المزيد من أوضاع توليد الشبكات لتدريب عامل RL عليها، المساهمة في التوثيق، إصلاح الأخطاء.
انظر أيضًا الويكي لمزيد من الأفكار.
@misc{msft:cyberbattlesim,
Author = {Microsoft Defender Research Team.}
Note = {Created by Christian Seifert, Michael Betser, William Blum, James Bono, Kate Farris, Emily Goren, Justin Grana, Kristian Holsheimer, Brandon Marken, Joshua Neil, Nicole Nichols, Jugal Parikh, Haoran Wei.},
Publisher = {GitHub},
Howpublished = {\url{https://github.com/microsoft/cyberbattlesim}},
Title = {CyberBattleSim},
Year = {2021}
}
لا يتضمن هذا المشروع أي بيانات عملاء. النماذج وطوبولوجيات الشبكة المقدمة هي خيالية بحتة. يقدم مستخدمو الكود المقدم جميع المدخلات للمحاكاة ويجب أن يكون لديهم الأذونات اللازمة لاستخدام أي بيانات مقدمة.
قد يحتوي هذا المشروع على علامات تجارية أو شعارات للمشاريع أو المنتجات أو الخدمات. الاستخدام المصرح به للعلامات التجارية أو الشعارات الخاصة بشركة مايكروسوفت يخضع ويجب أن يتبع إرشادات العلامات التجارية والعلامات الخاصة بشركة مايكروسوفت. يجب ألا يتسبب استخدام العلامات التجارية أو الشعارات الخاصة بشركة مايكروسوفت في إصدارات معدلة من هذا المشروع في حدوث ارتباك أو يوحي برعاية مايكروسوفت. أي استخدام للعلامات التجارية أو الشعارات الخاصة بأطراف ثالثة يخضع لسياسات تلك الأطراف.