
एक प्रयोगात्मक एवं अनुसंधान मंच जो एक अमूर्त अनुकरणित नेटवर्क वातावरण में स्वचालित एजेंटों की परस्पर क्रिया का अध्ययन करने के लिए है।
8 अप्रैल, 2021: Microsoft Security Blog पर घोषणा देखें।
CyberBattleSim एक प्रयोगात्मक अनुसंधान मंच है जो एक अनुकरणीय अमूर्त उद्यम नेटवर्क वातावरण में काम करने वाले स्वचालित एजेंटों की अंतर्क्रिया की जांच करने के लिए है। यह सिमुलेशन कंप्यूटर नेटवर्क और साइबर सुरक्षा अवधारणाओं का एक उच्च-स्तरीय अमूर्त प्रदान करता है। इसका पायथन-आधारित Open AI Gym इंटरफ़ेस सुदृढीकरण अधिगम एल्गोरिदम का उपयोग करके स्वचालित एजेंटों के प्रशिक्षण की अनुमति देता है।
सिमुलेशन वातावरण एक निश्चित नेटवर्क टोपोलॉजी और कमजोरियों के एक सेट द्वारा पैरामीटराइज़ किया गया है जिसका उपयोग एजेंट नेटवर्क में पार्श्व रूप से स्थानांतरित होने के लिए कर सकते हैं। हमलावर का लक्ष्य कंप्यूटर नोड्स में लगाई गई कमजोरियों का शोषण करके नेटवर्क के एक हिस्से पर स्वामित्व प्राप्त करना है। जबकि हमलावर नेटवर्क में फैलने का प्रयास करता है, एक रक्षक एजेंट नेटवर्क गतिविधि पर नज़र रखता है और किसी भी हमले का पता लगाने और हमलावर को बाहर निकालकर सिस्टम पर प्रभाव को कम करने का प्रयास करता है। हम एक बुनियादी स्टोकेस्टिक रक्षक प्रदान करते हैं जो सफलता की पूर्वनिर्धारित संभावनाओं के आधार पर चल रहे हमलों का पता लगाता है और उन्हें कम करता है। हम संक्रमित नोड्स को फिर से इमेज करके शमन को लागू करते हैं, यह एक प्रक्रिया है जिसे कई सिमुलेशन चरणों में फैले एक ऑपरेशन के रूप में अमूर्त रूप से मॉडल किया गया है।
एजेंटों के प्रदर्शन की तुलना करने के लिए हम दो मैट्रिक्स देखते हैं: अपने लक्ष्य को प्राप्त करने के लिए उठाए गए सिमुलेशन चरणों की संख्या और प्रशिक्षण युगों में सिमुलेशन चरणों पर संचयी पुरस्कार।
हम इस परियोजना को एक प्रयोगात्मक मंच के रूप में देखते हैं जो अमूर्त अनुकरणीय नेटवर्क वातावरण में स्वचालित एजेंटों की अंतर्क्रिया पर अनुसंधान करने के लिए है। इसे ओपन-सोर्स करके, हमें उम्मीद है कि अनुसंधान समुदाय को प्रोत्साहित किया जाएगा कि वे जांच करें कि ऐसे नेटवर्क वातावरण में साइबर-एजेंट कैसे अंतःक्रिया करते हैं और विकसित होते हैं।
हम जो सिमुलेशन प्रदान करते हैं वह निस्संदेह सरल है, लेकिन इसके लाभ हैं। इसकी अत्यधिक अमूर्त प्रकृति वास्तविक दुनिया की प्रणालियों पर प्रत्यक्ष आवेदन को रोकती है, इस प्रकार इसके साथ प्रशिक्षित स्वचालित एजेंटों के संभावित दुरुपयोग के खिलाफ एक सुरक्षा प्रदान करती है। साथ ही, इसकी सरलता हमें उन विशिष्ट सुरक्षा पहलुओं पर ध्यान केंद्रित करने की अनुमति देती है जिनका हम अध्ययन करना चाहते हैं और हाल के मशीन लर्निंग और एआई एल्गोरिदम के साथ तेजी से प्रयोग करना चाहते हैं।
उदाहरण के लिए, वर्तमान कार्यान्वयन पार्श्व आंदोलन साइबर-हमले तकनीकों पर केंद्रित है, इस उम्मीद के साथ कि यह समझा जा सके कि नेटवर्क टोपोलॉजी और कॉन्फ़िगरेशन उन्हें कैसे प्रभावित करता है। इस लक्ष्य को ध्यान में रखते हुए, हमने महसूस किया कि वास्तविक नेटवर्क ट्रैफ़िक का मॉडलिंग करना आवश्यक नहीं था। यह हमारे सिस्टम में एक महत्वपूर्ण सीमा का सिर्फ एक उदाहरण है जिसे भविष्य के योगदान संबोधित कर सकते हैं।
एल्गोरिथमिक पक्ष पर, हम शुरुआती बिंदुओं के रूप में कुछ बुनियादी एजेंट प्रदान करते हैं, लेकिन हम यह जानने के लिए उत्सुक होंगे कि अत्याधुनिक सुदृढीकरण अधिगम एल्गोरिदम उनसे कैसे तुलना करते हैं। हमने पाया कि किसी भी कंप्यूटर सिस्टम में निहित बड़ी क्रिया स्थान सुदृढीकरण अधिगम के लिए एक विशेष चुनौती है, वीडियो गेम या रोबोट नियंत्रण जैसे अन्य अनुप्रयोगों के विपरीत। एजेंटों को प्रशिक्षित करना जो क्रेडेंशियल्स को स्टोर और पुनर्प्राप्त कर सकते हैं, आरएल तकनीकों को लागू करते समय एक और चुनौती है जहां एजेंटों में आमतौर पर आंतरिक मेमोरी नहीं होती है। ये अनुसंधान के अन्य क्षेत्र हैं जहां सिमुलेशन का उपयोग बेंचमार्किंग उद्देश्यों के लिए किया जा सकता है।
रुचि के अन्य क्षेत्रों में स्वायत्त साइबर-सुरक्षा प्रणालियों का जिम्मेदार और नैतिक उपयोग शामिल है: एक उद्यम नेटवर्क कैसे डिज़ाइन किया जाए जो रक्षक एजेंटों को एक आंतरिक लाभ देता है? स्वायत्त साइबर-हमलों के खिलाफ उद्यमों की रक्षा करने के उद्देश्य से सुरक्षित अनुसंधान कैसे किया जाए, साथ ही ऐसी तकनीक के दुरुपयोग को रोका जाए?
परियोजना का त्वरित परिचय पढ़ें।
| प्रकार | शाखा | स्थिति |
|---|---|---|
| CI | master | |
| Docker image | master |
बेंचमार्क दस्तावेज़ीकरण देखें। नवीनतम रनों वाली Jupyter नोटबुक एक समर्पित टैग के तहत /notebooks/benchmarks (latest_benchmark) पर चेक-इन की गई हैं।
लिनक्स वातावरण में काम करने की दृढ़ता से अनुशंसा की जाती है, या तो सीधे या विंडोज पर WSL के माध्यम से। विंडोज पर सीधे Python चलाना काम करना चाहिए लेकिन अब समर्थित नहीं है।
रिपॉजिटरी को चेकआउट करके शुरू करें:
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
निर्देश एक Linux Ubuntu वितरण (देशी और WSL दोनों) पर परीक्षण किए गए थे।
यदि conda पहले से स्थापित नहीं है, तो आपको install_conda.sh स्क्रिप्ट चलाकर इसे स्थापित करना होगा।
bash install-conda.sh
एक बार यह हो जाने के बाद, एक नया टर्मिनल खोलें और आरंभीकरण स्क्रिप्ट चलाएँ:
bash init.sh
यह सभी आवश्यक OS और पायथन निर्भरताओं के साथ cybersim नामक एक conda वातावरण बनाएगा।
वातावरण को सक्रिय करने के लिए चलाएँ:
conda activate cybersim
विंडोज पर समर्थित डेव वातावरण WSL के माध्यम से है। आपको पहले अपनी विंडोज मशीन पर एक Ubuntu WSL वितरण स्थापित करना होगा, और फिर लिनक्स निर्देशों (अगला खंड) के साथ आगे बढ़ना होगा।
Git के साथ प्रमाणीकरण करने के लिए, आप या तो SSH-आधारित प्रमाणीकरण का उपयोग कर सकते हैं या वैकल्पिक रूप से स्वचालित रूप से PAT टोकन उत्पन्न करने के लिए क्रेडेंशियल-हेल्पर ट्रिक का उपयोग कर सकते हैं। बाद वाला WSL के तहत निम्न कमांड चलाकर किया जा सकता है (यहाँ अधिक जानकारी):
git config --global credential.helper "/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"
अपने वातावरण को एक डॉकर कंटेनर के भीतर चलाने के लिए, हम निम्नलिखित निर्देशों का उपयोग करके लिनक्स (WSL) पर विंडोज सबसिस्टम के माध्यम से docker चलाने की अनुशंसा करते हैं:
WSL पर विंडोज के तहत डॉकर स्थापित करना।
यह विधि अब बनाए नहीं रखी गई है, कृपया इसके बजाय WSL सबसिस्टम लिनक्स वातावरण के तहत चलाना पसंद करें।
लेकिन यदि आप जोर देते हैं तो आप Python 3.10 स्थापित करके शुरू कर सकते हैं, फिर एक Powershell प्रॉम्प्ट में ./init.ps1 स्क्रिप्ट चलाएँ।
सबसे तेज़ तरीका Docker कंटेनर के माध्यम से है।
नोट: लाइसेंसिंग कारणों से, हम किसी भी बिल्ड आर्टिफैक्ट को सार्वजनिक रूप से पुनर्वितरित नहीं करते हैं। विशेष रूप से, नीचे दिए गए कमांड में संदर्भित डॉकर रजिस्ट्री
spinshot.azurecr.ioकेवल परियोजना अनुरक्षकों के लिए निजी रखा गया है।एक वर्कअराउंड के रूप में, आप प्रदान किए गए
Dockerfileका उपयोग करके स्वयं डॉकर इमेज को फिर से बना सकते हैं, परिणामी इमेज को अपनी स्वयं की डॉकर रजिस्ट्री पर प्रकाशित कर सकते हैं और नीचे दिए गए कमांड में रजिस्ट्री नाम बदल सकते हैं।
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 नोटबुक में से एक खोल सकते हैं।
.pyनोटबुक पर नोट्स:
- हमारी नोटबुक Git में
.pyफ़ाइलों के रूप में चेक-इन की गई हैं। उन्हें VSCode में या Jupytext एक्सटेंशन का उपयोग करके Jupyter में सीधे खोला और चलाया जा सकता है।- आउटपुट
.ipynbफ़ाइलों को bash स्क्रिप्ट run_benchmark.sh चलाकर papermill का उपयोग करके स्वचालित रूप से पुनर्जीवित किया जा सकता है।- हम एक अलग git टैग में संपूर्ण आउटपुट और प्लॉट के साथ संबंधित
.ipynb-नोटबुक का एक स्नैपशॉट भी प्रकाशित करते हैं। 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% नेटवर्क उपलब्धता SLA को तोड़ना (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 प्रदान करने की आवश्यकता है और PR को उचित रूप से सजाएगा (जैसे, स्थिति जांच, टिप्पणी)। बस बॉट द्वारा प्रदान किए गए निर्देशों का पालन करें। आपको हमारे CLA का उपयोग करने वाले सभी रिपॉजिटरी में केवल एक बार ऐसा करने की आवश्यकता होगी।
इस परियोजना ने माइक्रोसॉफ्ट ओपन सोर्स आचार संहिता को अपनाया है। अधिक जानकारी के लिए आचार संहिता FAQ देखें या किसी भी अतिरिक्त प्रश्न या टिप्पणी के लिए [email protected] से संपर्क करें।
यहाँ योगदान करने के कुछ विचार दिए गए हैं: सिमुलेशन को बढ़ाएँ (ईवेंट-आधारित, सिमुलेशन को परिष्कृत करें, …), मौजूदा सिमुलेशन पर एक RL एल्गोरिदम को प्रशिक्षित करें, एजेंटों की नवीनता का मूल्यांकन और तुलना करने के लिए बेंचमार्क लागू करें, RL-एजेंट को प्रशिक्षित करने के लिए और अधिक नेटवर्क जनरेटिव मोड जोड़ें, दस्तावेज़ में योगदान करें, बग ठीक करें।
अधिक विचारों के लिए wiki भी देखें।
@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}
}
इस परियोजना में कोई ग्राहक डेटा शामिल नहीं है। प्रदान किए गए मॉडल और नेटवर्क टोपोलॉजी पूरी तरह से काल्पनिक हैं। प्रदान किए गए कोड के उपयोगकर्ता सिमुलेशन के लिए सभी इनपुट प्रदान करते हैं और उनके पास किसी भी प्रदत्त डेटा का उपयोग करने के लिए आवश्यक अनुमतियाँ होनी चाहिए।
इस परियोजना में परियोजनाओं, उत्पादों या सेवाओं के लिए ट्रेडमार्क या लोगो हो सकते हैं। माइक्रोसॉफ्ट के ट्रेडमार्क या लोगो का अधिकृत उपयोग निम्नलिखित के अधीन है और इसका पालन करना चाहिए: माइक्रोसॉफ्ट के ट्रेडमार्क और ब्रांड दिशानिर्देश। इस परियोजना के संशोधित संस्करणों में माइक्रोसॉफ्ट के ट्रेडमार्क या लोगो के उपयोग से भ्रम पैदा नहीं होना चाहिए या माइक्रोसॉफ्ट के प्रायोजन का संकेत नहीं देना चाहिए। किसी भी तृतीय-पक्ष ट्रेडमार्क या लोगो का उपयोग उन तृतीय-पक्षों की नीतियों के अधीन है।