
مختبر كشف للفريق الأزرق تم إنشاؤه باستخدام Terraform و Ansible في Azure.
يحتوي هذا المشروع على مجموعة من نصوص Terraform و Ansible لإنشاء مختبر BlueTeam مُنسَّق. الهدف من هذا المشروع هو تزويد الفرق الحمراء والزرقاء بالقدرة على نشر مختبر كشف مؤقت لاختبار الهجمات المختلفة والأدلة الجنائية على أحدث بيئة Windows، ثم الحصول على عرض 'شبيه بـ SOC' للبيانات المُولَّدة.
ملاحظة: تم تصميم هذا المختبر ليكون غير آمن عمدًا. يُرجى عدم توصيل هذا النظام بأي شبكة تهتم بها.

يلزم تثبيت عدد من الميزات على نظامك لاستخدام هذا الإعداد.
# Step 1 - Install Azure CLI. More details on https://docs.microsoft.com/en-us/cli/azure/install-azure-cli-linux?pivots=apt
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
# Step 2 - Install Terraform. More details on https://learn.hashicorp.com/tutorials/terraform/install-cli
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform
# Step 3 - Install Ansible. More details on https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html
sudo apt update
sudo apt install software-properties-common
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt update
sudo apt install ansible
# Step 4 - Finally install python and various packages needed for remote connections and other activities
sudo apt install python3 python3-pip
pip3 install pywinrm requests msrest msrestazure azure-cli
pip3 install -r https://raw.githubusercontent.com/ansible-collections/azure/refs/heads/dev/requirements.txt
بمجرد تثبيت جميع المتطلبات الأساسية، قم بتنفيذ الخطوات التالية:
# Log in to Azure from command line to ensure that the access token is valid
az login
# Clone Repository and move to BlueTeam.Lab folder
git clone https://github.com/op7ic/BlueTeam.Lab.git && cd BlueTeam.Lab
# Initialize Terraform and begin planning
terraform init && terraform plan
# Create your lab using the following command.
terraform apply -auto-approve
# Verify the layout of your environment using Ansible
cd ansible && ANSIBLE_CONFIG=./ansible.cfg ansible-inventory --graph -i inventory.azure_rm.yml -vvv && cd ../
# To see IPs of individual hosts and other setup details use the following command:
cd ansible && ANSIBLE_CONFIG=./ansible.cfg ansible-inventory -i inventory.azure_rm.yml -vvv --list && cd ../
# Once done, destroy your lab using the following command:
terraform destroy -auto-approve
# If you would like to time the execution us following command:
start_time=`date +%s` && terraform apply -auto-approve && end_time=`date +%s` && echo execution time was `expr $end_time - $start_time` s
#NOTE: It will take about two hours to configure it all, depending on your selected hardware.
تحدد متغيرات Terraform أنواع أنظمة التشغيل المستخدمة في هذا النشر. يسمح تعديل بسيط لمتغيرات وقت التشغيل بتحديد نظام تشغيل مختلف لتشغيل Active Directory (AD) بأكمله. الخيار الافتراضي هو استخدام Windows 10 Enterprise لـ محطات العمل و Windows Server 2019 Datacenter لـ وحدة تحكم المجال. فيما يلي أمثلة لبعض خيارات التكوين الشائعة التي يمكن استخدامها لتعديل البيئة بأكملها لاستخدام إصدارات نظام تشغيل مختلفة:
# Use Windows 10 Enterprise for Workstations and Server 2019 Datacenter for DC (default option)
terraform apply -auto-approve
# Use Windows 11 Enterprise for Workstations and Server 2019 Datacenter for DC
terraform apply -auto-approve -var="workstation_os=Windows-11" -var="workstation_SKU=win11-21h2-ent" -var="workstations_vm_size=Standard_DC2s_v2"
# Use Windows 11 Enterprise for Workstations and Server 2012 Datacenter for DC
terraform apply -auto-approve -var="workstation_os=Windows-11" -var="workstation_SKU=win11-21h2-ent" -var="workstations_vm_size=Standard_DC2s_v2" -var="dc_os=WindowsServer" -var="dc_SKU=2012-Datacenter"
# Use Windows 11 Enterprise for Workstations and Server 2016 Datacenter for DC
terraform apply -auto-approve -var="workstation_os=Windows-11" -var="workstation_SKU=win11-21h2-ent" -var="workstations_vm_size=Standard_DC2s_v2" -var="dc_os=WindowsServer" -var="dc_SKU=2016-Datacenter"
# Use Windows 10 Pro N for Workstations and Server 2012 Datacenter for DC
terraform apply -auto-approve -var="workstation_os=Windows-10" -var="workstation_SKU=21h1-pron" -var="dc_os=WindowsServer" -var="dc_SKU=2012-Datacenter"
يمكن استخدام الأمر az vm image list لتحديد إصدارات نظام تشغيل مختلفة للنشر.
يصف القسم التالي المكونات المختلفة التي يتكون منها هذا المختبر بالإضافة إلى تفاصيل حول كيفية تغيير ملفات التكوين لتعديل الإعداد:
بمجرد بناء المختبر، سيقوم Terraform بطباعة الموقع الفعلي للأنظمة وبيانات الاعتماد المرتبطة بها. يمكن العثور أدناه على مثال للإخراج.
Network Setup:
Domain Controller = xx.xx.xx.xx
Workstation DETECTION1: xx.xx.xx.xx
Workstation DETECTION2: xx.xx.xx.xx
Wazuh Server IP = xx.xx.xx.xx
Wazuh Web Interface = https://xx.xx.xx.xx:443/
Velociraptor Web Inteface: = https://xx.xx.xx.xx:10000/
FleetDM Web Interface: = https://xx.xx.xx.xx:9999/
Credentials:
Domain Admin:
blueteam.lab\blueteam BlueTeamDetection0%%%
Local Admin on Workstations:
blueteam BlueTeamDetection0%%%
Wazuh Server SSH Login:
blueteam BlueTeamDetection0%%%
Wazuh Logins:
wazuh BlueTeamDetection0%%%
admin BlueTeamDetection0%%%
kibanaserver BlueTeamDetection0%%%
kibanaro BlueTeamDetection0%%%
logstash BlueTeamDetection0%%%
readall BlueTeamDetection0%%%
snapshotrestore BlueTeamDetection0%%%
wazuh_admin BlueTeamDetection0%%%
wazuh_user BlueTeamDetection0%%%
Velociraptor Web Inteface Login:
blueteam BlueTeamDetection0%%%
FleetDM Web Inteface Login:
[email protected] BlueTeamDetection0%%%
RDP to Domain Controller:
xfreerdp /v:xx.xx.xx.xx /u:blueteam.lab\\blueteam '/p:BlueTeamDetection0%%%' +clipboard /cert-ignore
RDP to Workstation DETECTION1: xx.xx.xx.xx
xfreerdp /v:xx.xx.xx.xx /u:blueteam '/p:BlueTeamDetection0%%%' +clipboard /cert-ignore
RDP to Workstation DETECTION2: xx.xx.xx.xx
xfreerdp /v:xx.xx.xx.xx /u:blueteam '/p:BlueTeamDetection0%%%' +clipboard /cert-ignore
يلخص الجدول التالي مجموعة قواعد جدار الحماية المطبقة عبر بيئة BlueTeamLab في التكوين الافتراضي. يُرجى تعديل ملف main.tf لإضافة قواعد جدار حماية جديدة حسب الحاجة في قسم إعداد قواعد جدار الحماية.
داخليًا، يتم استخدام عناوين IP الثابتة وأسماء المضيفين التالية في نطاق 10.0.0.0/16 لهذه البيئة في التكوين الافتراضي:
يتم إنشاء بيانات الاعتماد الافتراضية التالية أثناء التثبيت. سيتم عرض بيانات الاعتماد الفعلية التي تم تكوينها بعد اكتمال عملية النشر بالكامل.
لتعديل بيانات الاعتماد الافتراضية، قم بتغيير أسماء المستخدمين وكلمات المرور في ملف domain_setup.yml.







يمكن تقديم المساهمات والإصلاحات والتحسينات مباشرة لهذا المشروع كمشكلة GitHub أو طلب سحب.
| - ansible
| | - ansible.cfg
| | - domain-controller.yml
| | - domain-member.yml
| | - domain_setup.yml
| | - group_vars
| | | - all
| | | - wazuh
| | - inventory.azure_rm.yml
| | - roles
| | | - domain-controller
| | | | - tasks
| | | | | - main.yml
| | | - domain-member
| | | | - tasks
| | | | | - main.yml
| | | - fleetserver
| | | | - tasks
| | | | | - main.yml
| | | | - templates
| | | | | - config.yml.j2
| | | | | - ssl.crt
| | | | | - ssl.key
| | | | | - systemd-fleetm.service.j2
| | | - monitor
| | | | - tasks
| | | | | - main.yml
| | | - osqueryagent
| | | | - tasks
| | | | | - main.yml
| | | | - templates
| | | | | - osquery.conf
| | | | | - osquery.flags.j2
| | | | | - osquery.key.j2
| | | | | - ssl.crt
| | | | | - ssl.key
| | | | - vars
| | | | | - main.yml
| | | - sysmon
| | | | - handlers
| | | | | - main.yml
| | | | - tasks
| | | | | - main.yml
| | | | - vars
| | | | | - main.yml
| | | - velociraptorclient
| | | | - tasks
| | | | | - main.yaml
| | | | - templates
| | | | | - clientconfig.yml.j2
| | | | - vars
| | | | | - main.yml
| | | - velociraptorserver
| | | | - tasks
| | | | | - main.yaml
| | | | - templates
| | | | | - serverconfig.yml.j2
| | | | | - systemd-velociraptor.service.j2
| | | | - vars
| | | | | - main.yml
| | | - wazuhagent
| | | | - tasks
| | | | | - main.yml
| | | | - templates
| | | | | - ossec.conf.j2
| | | | - vars
| | | | | - main.yml
| | | - wazuhserver
| | | | - tasks
| | | | | - main.yaml
| | | | - templates
| | | | | - sysmon_rules.xml
| | | | | - unattended-installation.sh
| | | | | - wazuh-passwords-tool.sh.j2
| | | - winlogbeat
| | | | - tasks
| | | | | - main.yml
| | | | - templates
| | | | | - config.yml.j2
| | | | - vars
| | | | | - main.yml
| | - wazuh-server.yml
| - documentation
| | - osquery.md
| | - pic
| | | - map.png
| | | - wazuh-logs.PNG
| | | - wazuh-pdc.PNG
| | | - winlogbeat.PNG
| | - sysmon.md
| | - velociraptor.md
| | - wazuh.md
| | - winlogbeat.md
| | - winmember.md
| - main.tf
| - README.md
| - terraform.tfstate
| - terraform.tfstate.backup
| - variables.tf
أحصل على Disk wks-1-os-disk already exists in resource group BLUETEAM-LAB. Only CreateOption.Attach is supported. أو شيء مشابه لهذا الخطأ.
terraform destroy -auto-approve && terraform apply -auto-approve لتدمير المختبر وإعادة إنشائه. يبدو أن هذا الخطأ يظهر عندما لا تقوم Azure بتنظيف جميع الأقراص بشكل صحيح، لذا توجد موارد متبقية بنفس الاسم.أحصل على Operation 'startTenantUpdate' is not allowed on VM 'domain-controller' since the VM is marked for deletion. You can only retry the Delete operation (or wait for an ongoing one to complete). أو شيء مشابه لهذا الخطأ.
terraform destroy -auto-approve && terraform apply -auto-approve لتدمير المختبر وإعادة إنشائه. يبدو أن هذا الخطأ يظهر عندما لا تقوم Azure بتنظيف جميع الموارد بشكل صحيح، لذا توجد موارد متبقية يجب تدميرها قبل إنشاء المختبر بسبب تعارض في الأسماء و/أو المواقع.أحصل على Network security group windows-nsg cannot be deleted because old references for the following Nics أو شيء مشابه لهذا الخطأ.
terraform destroy -auto-approve && terraform apply -auto-approve لتدمير المختبر وإعادة إنشائه. يبدو أن هذا الخطأ يظهر عندما لا تقوم Azure بتنظيف جميع الموارد بشكل صحيح، لذا توجد موارد متبقية يجب تدميرها قبل إنشاء المختبر بسبب تعارض في الأسماء و/أو المواقع.تم استعارة وتكييف نسبة جيدة من هذا الكود من Christophe Tafani-Dereeper's Adaz. شكر كبير لبناء الأساس الذي سمح لي بتصميم بيئة المختبر هذه.
| اسم القاعدة | مجموعة أمان الشبكة | المضيف المصدر | المنفذ المصدر | المضيف الهدف | المنفذ الهدف |
|---|
| Allow-RDP | windows-nsg | عنوان IP العام الخاص بك | * | PDC-1, DETECTION1, DETECTION2 | 3389 |
| Allow-WinRM | windows-nsg | عنوان IP العام الخاص بك | * | PDC-1, DETECTION1, DETECTION2 | 5985 |
| Allow-WinRM-secure | windows-nsg | عنوان IP العام الخاص بك | * | PDC-1, DETECTION1, DETECTION2 | 5986 |
| Allow-SMB | windows-nsg | عنوان IP العام الخاص بك | * | PDC-1, DETECTION1, DETECTION2 | 445 |
| Allow-SSH | wazuh-nsg | عنوان IP العام الخاص بك | * | Wazuh | 22 |
| Allow-Wazuh-Manager | wazuh-nsg | عنوان IP العام الخاص بك | * | Wazuh | 1514-1516 |
| Allow-Wazuh-Elasticsearch | wazuh-nsg | عنوان IP العام الخاص بك | * | Wazuh | 9200 |
| Allow-Wazuh-API | wazuh-nsg | عنوان IP العام الخاص بك | * | Wazuh | 55000 |
| Allow-Elasticsearch-Cluster | wazuh-nsg | عنوان IP العام الخاص بك | * | Wazuh | 9300-9400 |
| Allow-Wazuh-GUI | wazuh-nsg | عنوان IP العام الخاص بك | * | Wazuh | 443 |
| Allow-Velociraptor-Client-Connections | wazuh-nsg | عنوان IP العام الخاص بك | * | Wazuh | 8000 |
| Allow-Velociraptor-GUI | wazuh-nsg | عنوان IP العام الخاص بك | * | Wazuh | 10000 |
| Allow-Fleet-GUI | wazuh-nsg | عنوان IP العام الخاص بك | * | Wazuh | 9999 |
| المضيف | الدور | IP الداخلي |
|---|
| PDC-1 | وحدة تحكم المجال الأساسية | 10.0.10.10 |
| Wazuh | خادم Wazuh، يستضيف أيضًا تثبيت Velocidex Velociraptor و FleetDM | 10.0.10.100 |
| DETECTION1 | محطة عمل Windows 10 الأولى | 10.0.11.11 |
| DETECTION2 | محطة عمل Windows 10 الثانية | 10.0.11.12 |
| المضيف | اسم المستخدم | كلمة المرور | الدور |
|---|
| PDC-1 | blueteam.lab\blueteam | BlueTeamDetection0%%% | مسؤول المجال لمجال blueteam.lab |
| DETECTION1 | localadministrator | BlueTeamDetection0%%% | المسؤول المحلي لمحطة عمل DETECTION1 |
| DETECTION2 | localadministrator | BlueTeamDetection0%%% | المسؤول المحلي لمحطة عمل DETECTION2 |
| Wazuh | blueteam | BlueTeamDetection0%%% | بيانات اعتماد SSH لخادم Wazuh |
| Wazuh | wazuh | BlueTeamDetection0%%% | مسؤول Wazuh |
| Wazuh | admin | BlueTeamDetection0%%% | مسؤول Wazuh |
| Wazuh | kibanaserver | BlueTeamDetection0%%% | حساب خدمة Wazuh |
| Wazuh | kibanaro | BlueTeamDetection0%%% | حساب خدمة Wazuh |
| Wazuh | logstash | BlueTeamDetection0%%% | حساب خدمة Wazuh |
| Wazuh | readall | BlueTeamDetection0%%% | حساب خدمة Wazuh |
| Wazuh | snapshotrestore | BlueTeamDetection0%%% | حساب خدمة Wazuh |
| Wazuh | wazuh_admin | BlueTeamDetection0%%% | حساب خدمة Wazuh |
| Wazuh | wazuh_user | BlueTeamDetection0%%% | حساب خدمة Wazuh |
| Wazuh | blueteam | BlueTeamDetection0%%% | تسجيل الدخول إلى بوابة Velociraptor |
| Wazuh | [email protected] | BlueTeamDetection0%%% | تسجيل الدخول إلى بوابة FleetDM |
لماذا Azure؟
كيف يمكنني تعديل قطاعات الشبكة أو حجم النشر أو المتغيرات الأخرى؟
-var إلى terraform apply. على سبيل المثال، terraform apply --auto-approve -var="region=East US 2" سيغير المنطقة لتكون مختلفة عن الافتراضي المحدد في ملف المتغيرات. يمكن تغيير الإعداد بأكمله، بما في ذلك نطاقات الشبكة وأنظمة التشغيل وحجم VM، باستخدام سلسلة من معاملات -var.كيف يمكن العثور على SKUs لنشر معين؟
az vm list-skus --location westeurope --all --output table للعثور على SKUs المتاحة للنشر الخاص بك.أحصل على Max retries exceeded with url: /wsman ثم يتم رفض الاتصال عند بناء النظام.
terraform apply -auto-approve لإصلاح المضيف التالف.