
وسّع عمليات الاستطلاع لديك بقوة السحابة

ReconSwarm هو إطار عمل نمطي لأتمتة الاستطلاع مصمم للاختبارات الأمنية الموزعة. يقوم بتوفير البنية التحتية السحابية، وتنفيذ خطوط استطلاع متوازية، وجمع النتائج بأقل عبء إعدادات.
يعد ReconSwarm مناسبًا لصيادي برامج مكافآت الثغرات، ومختبري الاختراق، ومهندسي DevSecOps، والباحثين الأمنيين الذين يحتاجون إلى سير عمل استطلاع قابلة للتوسع وآلية دون إدارة يدوية للبنية التحتية.

يتبع ReconSwarm بنية معمارية نمطية مع فصل واضح للمسؤوليات بين توفير موارد السحابة، والتحكم في الأنظمة البعيدة، وتنفيذ خط الأنابيب، وإدارة الإعدادات.
يستخدم ReconSwarm نمط الاتحاد المُتمايز لمزوّدي الموارد السحابية. يحدد حقل provisioner.type أي إعدادات المزود تكون نشطة:
provisioner:
type: yandex_cloud # Discriminator field
yandex_cloud: # Active when type: yandex_cloud
iam_token: "${YC_TOKEN}"
# key_path: "./sa_auth_key.json"
folder_id: "${YC_FOLDER_ID}"
# ... provider-specific settings
يمكن دمج مزودي سحابة إضافيين من خلال تنفيذ واجهة Provisioner وإضافة نوع جديد إلى المصنع (factory).
المراحل مكونات قابلة للتوسع تنفذ عمليات على الأجهزة الافتراضية للعمال:
جميع حقول المراحل تدعم عرض القوالب. يمكن إضافة أنواع مراحل جديدة لتوسيع الوظائف.
خادم ReconSwarm عديم الحالة تمامًا — كل الحالة محفوظة في etcd:
تتيح هذه البنية:
| الإمكانية | الوصف |
|---|---|
| التوسع الأفقي | تشغيل عدة نسخ من الخادم خلف موازن تحميل |
| إعادة تشغيل بدون توقف | إعادة تشغيل الخادم دون فقدان حالة خط الأنابيب |
| التعافي من الأعطال | تستأنف نسخة الخادم الجديدة من حيث توقفت النسخة السابقة |
| فحص الحالة | الاستعلام عن etcd مباشرة للتصحيح والمراقبة |
إعداد التوافر العالي:
┌─────────────┐
│ Client │
└──────┬──────┘
│
┌──────▼──────┐
│Load Balancer│
└──────┬──────┘
┌────────────┼────────────┐
│ │ │
┌──────▼──────┐ ┌───▼───┐ ┌──────▼──────┐
│ Server 1 │ │Server2│ │ Server 3 │
└──────┬──────┘ └───┬───┘ └──────┬──────┘
│ │ │
└────────────┼────────────┘
│
┌──────▼──────┐
│ etcd cluster│
└─────────────┘
تتشارك جميع الخوادم نفس مجموعة etcd ويمكنها التعامل مع أي طلب. إذا تعطل خادم أثناء تنفيذ خط الأنابيب، يمكن لخادم آخر مواصلة التنفيذ بعد قراءة الحالة من etcd.
ملاحظة: التنفيذ الحالي يشغّل خطوط الأنابيب في الذاكرة بعد التحميل من etcd. التعافي الكامل من الأعطال مع استئناف خط الأنابيب مخطط له في الإصدارات المستقبلية.
git clone <repository>
cd reconswarm
go mod download
task build
يفصل ReconSwarm بين إعدادات الخادم و إعدادات خط الأنابيب:
| نوع الإعداد | الملف | الوصف |
|---|---|---|
| الخادم | reconswarm.yaml | إعدادات مزود السحابة وetcd ومجموعة العمال |
| خط الأنابيب | ملف YAML منفصل | الأهداف والمراحل، يُمرَّر عبر الخيار -f |
يتم تخزين إعدادات الخادم في reconswarm.yaml (يمكن ضبطها عبر متغير البيئة CONFIG_PATH). جميع القيم النصية تدعم توسيع متغيرات البيئة باستخدام صيغة ${VAR} أو $VAR.
# Server settings
server:
port: 50051
# Etcd connection for state management
etcd:
endpoints:
- "localhost:2379"
dial_timeout: 5 # seconds
username: "" # optional, supports ${ETCD_USER}
password: "" # optional, supports ${ETCD_PASSWORD}
# Cloud provisioner (discriminated union)
provisioner:
type: yandex_cloud # Provider selector
# Yandex Cloud configuration (active when type: yandex_cloud)
yandex_cloud:
iam_token: "${YC_TOKEN}"
# key_path: "./sa_auth_key.json"
folder_id: "${YC_FOLDER_ID}"
default_zone: "ru-central1-b"
default_image: "fd8b1cmhmncn7lt4tqn4"
default_username: "root"
default_cores: 2
default_memory: 2 # GB
default_disk_size: 20 # GB
# Worker pool settings
workers:
max_workers: 5
setup_commands:
- "apt update"
- "apt install -y docker.io"
يتم تخزين إعدادات خط الأنابيب في ملف YAML منفصل ويُمرَّر عبر الخيار -f. كلا الصيغتين المغلّفة وغير المغلّفة مدعومتان:
الصيغة المغلّفة (موصى بها):
# pipeline.yaml
pipeline:
targets:
- value: "example.com"
type: crtsh
- value: ["sub1.example.com", "sub2.example.com"]
type: list
stages:
- name: "Run scanner"
type: exec
steps:
- "nmap -sC -sV -iL {{.Targets.filepath}} -oN /opt/recon/scan.txt"
- name: "Collect results"
type: sync
src: "/opt/recon/scan.txt"
dest: "./results/{{.Worker.Name}}.txt"
الصيغة غير المغلّفة (مدعومة أيضًا):
# pipeline.yaml
targets:
- value: "example.com"
type: crtsh
stages:
- name: "Run scanner"
type: exec
steps:
- "nmap -iL {{.Targets.filepath}} -oN /opt/recon/scan.txt"
تدعم قيم الإعدادات استبدال متغيرات البيئة بصيغتين:
${VAR} — اسم المتغير الكامل بين أقواس$VAR — اسم المتغير البسيطإذا لم يتم تعيين متغير بيئة، سيُستخدم النص الحرفي (بما في ذلك ${VAR} أو $VAR).
للتكامل مع Yandex Cloud، استخدم سكربت الإعداد المرفق:
تثبيت Yandex Cloud CLI (إذا لم يكن مثبتًا بالفعل):
# Follow official Yandex Cloud documentation for CLI installation
إعداد Yandex Cloud CLI:
yc config profile create <profile-name>
yc config set cloud-id <your-cloud-id>
yc config set folder-id <your-folder-id>
تصدير بيانات الاعتماد:
source ./secrets-setup.sh
يقوم هذا السكربت بتصدير:
YC_TOKEN — رمز IAM للمصادقةYC_FOLDER_ID — معرف المجلد لإدارة المواردYC_CLOUD_ID — معرف السحابة (إذا لزم الأمر)المرجع في الإعدادات:
provisioner:
type: yandex_cloud
yandex_cloud:
iam_token: "${YC_TOKEN}"
# key_path: "./sa_auth_key.json"
folder_id: "${YC_FOLDER_ID}"