
إنشاء أجهزة افتراضية غير آمنة عشوائياً
يقوم SecGen بإنشاء أجهزة افتراضية ضعيفة، وبيئات معملية، وتحديات اختراق، بحيث يمكن للطلاب تعلم تقنيات اختبار الاختراق الأمني.
أجهزة مثل Metasploitable2 هي دائمًا نفس الشيء، يستخدم هذا المشروع Vagrant وPuppet وRuby لإنشاء أجهزة افتراضية ضعيفة بشكل عشوائي يمكن استخدامها للتعلم أو لاستضافة أحداث CTF.
أحدث إصدار متاح على: http://github.com/cliffe/SecGen/
يرجى إكمال استبيان قصير لإخبارنا كيف تستخدم SecGen.
للحصول على حل مستضاف، قم بزيارة: https://hacktivity.co.uk/
يستفيد طلاب أمن الحاسوب من المشاركة في تحديات الاختراق. تعد الأعمال المعملية العملية وتحديات الاختراق المكوّنة مسبقًا ممارسة شائعة في تعليم الأمن وكذلك كهواية للأفراد المهتمين بالأمن. أصبحت تحديات الاختراق التنافسية، مثل مسابقات capture the flag (CTF)، عنصرًا أساسيًا في المؤتمرات الصناعية وتركيزًا لمجتمعات كبيرة عبر الإنترنت. توفر الأجهزة الافتراضية (VMs) وسيلة فعالة لمشاركة أهداف الاختراق، ويمكن تصميمها لاختبار مهارات المهاجم. تستضيف مواقع مثل Vulnhub أجهزة افتراضية لتحديات الاختراق المكوّنة مسبقًا وتعتبر مصدرًا قيمًا لمن يتعلمون ويطوّرون مهاراتهم في أمن الحاسوب. ومع ذلك، فإن تطوير تحديات الاختراق هذه يستغرق وقتًا طويلاً، وبمجرد إنشائها، تكون ثابتة بشكل أساسي. أي، بمجرد "حل" التحدي، لا يتبقى تحدٍ للطالب، وإذا تم إنشاء التحدي لمسابقة أو تقييم، لا يمكن إعادة استخدام التحدي دون خطر الانتحال والتواطؤ.
يقوم Security Scenario Generator (SecGen) بإنشاء أنظمة ضعيفة عشوائية. يتم إنشاء الأجهزة الافتراضية بناءً على مواصفات سيناريو، تصف القيود والخصائص للأجهزة الافتراضية المراد إنشاؤها. على سبيل المثال، يمكن أن يحدد سيناريو إنشاء نظام به ثغرة قابلة للاستغلال عن بعد تؤدي إلى اختراق على مستوى المستخدم، وعيب قابل للاستغلال محليًا يؤدي إلى اختراق على مستوى الجذر. سيتطلب ذلك من المهاجم اكتشاف واستغلال كلا الثغرتين المختارتين عشوائيًا للحصول على وصول الجذر إلى النظام. بدلاً من ذلك، يمكن أن يكون السيناريو المحدد أكثر تحديدًا، مع تحديد أنواع معينة من الخدمات (مثل FTP أو SMB) أو حتى ثغرات محددة (بواسطة CVE).
SecGen هو تطبيق Ruby، مع لغة تكوين XML. يقرأ SecGen تكوينه، بما في ذلك الثغرات المتاحة والخدمات والشبكات والمستخدمين والمحتوى، ويقرأ تعريف السيناريو المطلوب، ويطبق منطقًا لعشوائية السيناريو، ويستخدم Puppet وVagrant لتوفير الأجهزة الافتراضية المطلوبة.
SecGen هو برنامج مجاني: يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة GNU العامة كما نشرتها مؤسسة البرمجيات الحرة، إما الإصدار 3 من الرخصة، أو (حسب اختيارك) أي إصدار لاحق.
يحتوي SecGen على وحدات، تقوم بتثبيت حزم برمجية مختلفة. قد تحتوي كل وحدة SecGen على برامج أو مصدرها عن بُعد، وتحدد كل وحدة ترخيصها الخاص في ملف secgen_metadata.xml المرفق.
يتم تطوير واختبار SecGen على Ubuntu Linux. من الناحية النظرية، يجب أن يعمل SecGen على Mac أو Windows، إذا كان لديك جميع البرامج المطلوبة مثبتة.
ستحتاج إلى تثبيت ما يلي:
تم تكييف هذا المشروع للعمل مع إصدار Ubuntu (20.04) بسبب اقتراب نهاية عمر الإصدار (16.04) اعتبارًا من أبريل 2021، على الرغم من أنه سيظل يعمل على هذا الإصدار، إلا أنه ليس مضمونًا لدعم تحديثات الأمان اللازمة لبيئة التطوير الخاصة بك.
تأكد من تحديث Ubuntu باستخدام الأوامر التالية:```bash sudo apt update sudo apt upgrade
قم بتثبيت إصدار حديث من vagrant:```bash
wget https://releases.hashicorp.com/vagrant/2.2.9/vagrant_2.2.9_x86_64.deb
sudo apt install ./vagrant_2.2.9_x86_64.deb
تثبيت الحزم الإضافية المطلوبة:```bash sudo apt-get install ruby-dev zlib1g-dev liblzma-dev build-essential patch virtualbox ruby-bundler imagemagick libmagickwand-dev exiftool libpq-dev libcurl4-openssl-dev libxml2-dev graphviz graphviz-dev libpcap0.8-dev git
استنسخ مستودع SecGen باستخدام الأمر التالي.بشكل افتراضي سيكون هذا هو /home/username/SecGen، غيره حسب الحاجة:```bash
git clone https://github.com/cliffe/SecGen.git
قم بتثبيت gems باستخدام الأوامر التالية:```bash #Step In to the file directory
cd /home/username/SecGen
bundle update --bundler
تحديث gems:```bash
bundle update
قم بتثبيت جميع الحزم المطلوبة:```bash
wget https://releases.hashicorp.com/vagrant/1.9.8/vagrant_1.9.8_x86_64.deb sudo apt install ./vagrant_1.9.8_x86_64.deb
sudo apt-get install ruby-dev zlib1g-dev liblzma-dev build-essential patch virtualbox ruby-bundler imagemagick libmagickwand-dev exiftool libpq-dev libcurl4-openssl-dev libxml2-dev graphviz graphviz-dev libpcap0.8-dev git
انسخ SecGen إلى دليل من اختيارك، مثل */home/user/bin/SecGen*
ثم قم بتثبيت الجواهر (gems):```bash
cd /home/user/bin/SecGen
bundle install
لاستخدام Windows basesboxes، ستحتاج إلى تثبيت Packer. استخدم الأمر التالي:```bash curl -SL https://releases.hashicorp.com/packer/1.3.2/packer_1.3.2_linux_amd64.zip -o packer_1.3.2_linux_amd64.zip unzip packer_1.3.2_linux_amd64.zip sudo mv packer /usr/local/ sudo bash -c 'echo "export PATH="$PATH:/usr/local/"" >> /etc/environment' sudo vagrant plugin install winrm sudo vagrant plugin install winrm-fs
## الاستخدام
الاستخدام الأساسي:```bash
ruby secgen.rb run
سيستخدم هذا السيناريو الافتراضي لإنشاء جهاز (أجهزة) افتراضية بشكل عشوائي.

يقبل SecGen وسائط (arguments) لتغيير طريقة عمله، والوسائط المنفذة حالياً هي:```bash ruby secgen.rb [--options] OPTIONS: --scenario [xml file], -s [xml file]: Set the scenario to use (defaults to /home/secgen/SecGen/scenarios/default_scenario.xml) --project [output dir], -p [output dir]: Directory for the generated project (output will default to /home/secgen/SecGen/projects/SecGen20200313_094915) --shutdown: Shutdown VMs after provisioning (vagrant halt) --network-ranges: Override network ranges within the scenario, use a comma-separated list --forensic-image-type [image type]: Forensic image format of generated image (raw, ewf) --read-options [conf path]: Reads options stored in file as arguments (see example.conf) --memory-per-vm: Allocate generated VMs memory in MB (e.g. --memory-per-vm 1024) --total-memory: Allocate total VM memory for the scenario, split evenly across all VMs. --cpu-cores: Number of virtual CPUs for generated VMs --help, -h: Shows this usage information --system, -y [system_name]: Only build this system_name from the scenario --snapshot: Creates a snapshot of VMs once built --no-tests: Prevent post-provisioning tests from running.
VIRTUALBOX OPTIONS:
--gui-output, -g: Show the running VM (not headless)
--nopae: Disable PAE support
--hwvirtex: Enable HW virtex support
--vtxvpid: Enable VTX support
--max-cpu-usage [1-100]: Controls how much cpu time a virtual CPU can use
(e.g. 50 implies a single virtual CPU can use up to 50% of a single host CPU)
OVIRT OPTIONS:
--ovirtuser [ovirt_username]
--ovirtpass [ovirt_password]
--ovirt-url [ovirt_api_url]
--ovirtauthz [ovirt authz]
--ovirt-cluster [ovirt_cluster]
--ovirt-network [ovirt_network_name]
--ovirt-affinity-group [ovirt_affinity_group_name]