
अपनी जांच को क्लाउड की शक्ति से बढ़ाएं

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 इंटरफ़ेस को लागू करके और फ़ैक्टरी में एक नया प्रकार जोड़कर एकीकृत किया जा सकता है।
चरण एक्स्टेंसिबल घटक हैं जो कार्यकर्ता VMs पर संचालन निष्पादित करते हैं:
सभी चरण फ़ील्ड टेम्पलेट रेंडरिंग का समर्थन करते हैं। कार्यक्षमता बढ़ाने के लिए नए चरण प्रकार जोड़े जा सकते हैं।
ReconSwarm सर्वर पूरी तरह से स्टेटलेस है — सभी स्थिति 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 स्थापित करें (यदि पहले से स्थापित नहीं है):
# CLI स्थापना के लिए आधिकारिक Yandex Cloud दस्तावेज़ का पालन करें
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 — संसाधन प्रबंधन के लिए फ़ोल्डर IDYC_CLOUD_ID — क्लाउड ID (यदि आवश्यक हो)कॉन्फ़िगरेशन में संदर्भ:
provisioner:
type: yandex_cloud
yandex_cloud:
iam_token: "${YC_TOKEN}"
# key_path: "./sa_auth_key.json"
folder_id: "${YC_FOLDER_ID}"
secrets-setup.sh स्क्रिप्ट हर बार निष्पादित होने पर स्वचालित रूप से एक ताज़ा IAM टोकन उत्पन्न करती है, जो क्रेडेंशियल को हार्डकोड किए बिना सुरक्षित प्रमाणीकरण सुनिश्चित करती है।
सेवा खाता बनाएँ:
पर्यावरण कॉन्फ़िगर करें:
export GCP_PROJECT_ID="your-project-id"
export GCP_CREDENTIALS_PATH="/path/to/key.json"
कॉन्फ़िगरेशन में संदर्भ:
provisioner:
type: gcp
gcp:
project_id: "${GCP_PROJECT_ID}"
credentials_path: "${GCP_CREDENTIALS_PATH}"
default_zone: "us-central1-a"
IAM उपयोगकर्ता बनाएँ:
पर्यावरण कॉन्फ़िगर करें:
export AWS_ACCESS_KEY_ID="your-access-key"
export AWS_SECRET_ACCESS_KEY="your-secret-key"
कॉन्फ़िगरेशन में संदर्भ:
provisioner:
type: aws
aws:
region: "us-east-1"
access_key_id: "${AWS_ACCESS_KEY_ID}"
secret_access_key: "${AWS_SECRET_ACCESS_KEY}"
default_zone: "us-east-1a"
टोकन उत्पन्न करें:
पर्यावरण कॉन्फ़िगर करें:
export DO_TOKEN="your-token"
कॉन्फ़िगरेशन में संदर्भ:
provisioner:
type: digitalocean
digitalocean:
token: "${DO_TOKEN}"
default_region: "nyc1"
crt.sh गणना:
targets:
- value: "example.com"
type: crtsh
मैन्युअल सूची:
targets:
- value: ["sub1.example.com", "sub2.example.com"]
type: list
सभी चरण कॉन्फ़िगरेशन फ़ील्ड गतिशील मान उत्पादन के लिए Go टेम्पलेट सिंटैक्स का समर्थन करते हैं। टेम्पलेट चर निष्पादन समय पर स्वचालित रूप से प्रदान किए गए संदर्भ डेटा के साथ प्रस्तुत किए जाते हैं।
टेम्पलेट संदर्भ
निम्नलिखित डेटा सभी चरण टेम्पलेट्स में उपलब्ध है:
| चर | विवरण |
|---|---|
{{.Targets.filepath}} | रिमोट VM पर लक्ष्य फ़ाइल का पूर्ण पथ |
{{.Targets.list}} | प्रोग्रामेटिक एक्सेस के लिए लक्ष्य स्ट्रिंग्स की सरणी |
{{.Worker.Name}} | कार्यकर्ता VM इंस्टेंस का अद्वितीय पहचानकर्ता |
exec चरण — टेम्पलेट समर्थन के साथ शेल कमांड निष्पादित करता है:
stages:
- name: "Run tool"
type: exec
steps:
- "docker run --rm -v /opt/recon:/data scanner:latest {{.Targets.filepath}}"
- "cat /opt/recon/results.json"
steps सरणी में सभी कमांड निष्पादन से पहले टेम्पलेट-रेंडर किए जाते हैं।
sync चरण — SFTP का उपयोग करके फ़ाइलों या निर्देशिकाओं को रिमोट से स्थानीय में कॉपी करता है। स्वचालित रूप से यह पता लगाता है कि पथ फ़ाइल है या निर्देशिका:
stages:
- name: "Collect results"
type: sync
src: "/opt/recon/results.json"
dest: "./results/{{.Worker.Name}}.json"
# Sync entire directory recursively
- name: "Collect all results"
type: sync
src: "/opt/recon"
dest: "./results/{{.Worker.Name}}"
src (रिमोट पथ) और dest (स्थानीय पथ) दोनों गतिशील फ़ाइल पथों के लिए टेम्पलेट रेंडरिंग का समर्थन करते हैं। sync चरण स्वचालित रूप से पता लगाता है कि स्रोत पथ फ़ाइल है या निर्देशिका और तदनुसार इसे संभालता है।
पाइपलाइन सबमिशन स्वीकार करने के लिए gRPC सर्वर प्रारंभ करें:
reconswarm server
सर्वर reconswarm.yaml से कॉन्फ़िगरेशन पढ़ता है और कॉन्फ़िगर किए गए पोर्ट (डिफ़ॉल्ट: 50051) पर सुनता है।
चल रहे सर्वर पर एक पाइपलाइन सबमिट करें:
reconswarm run -f examples/pipelines/nuclei.yaml
विकल्प:
-f, --pipeline — पाइपलाइन YAML फ़ाइल का पथ (आवश्यक)-s, --server — सर्वर पता (डिफ़ॉल्ट: localhost:50051)reconswarm status <pipeline-id>
gRPC सर्वर के बिना सीधे पाइपलाइन निष्पादित करें (परीक्षण के लिए उपयोगी):
reconswarm manual -f examples/pipelines/nuclei.yaml
यह कमांड:
reconswarm.yaml से सर्वर कॉन्फ़िगरेशन पढ़ता हैworkers.max_workers कॉन्फ़िगरेशन के आधार पर कार्यकर्ता VM बनाता हैस्वचालित बुनियादी ढाँचा डीलोकेशन पूर्ण स्वायत्तता सुनिश्चित करता है — सभी क्लाउड संसाधन बिना मैन्युअल हस्तक्षेप के प्रावधानित, उपयोग और नष्ट किए जाते हैं, जिससे पूरी तरह से स्वचालित टोही वर्कफ़्लो सक्षम होता है।
पूर्ण पाइपलाइन उदाहरणों के लिए, examples/pipelines निर्देशिका देखें।
बुनियादी सबडोमेन गणना और स्कैनिंग:
# pipeline.yaml
pipeline:
targets:
- value: "example.com"
type: crtsh
stages:
- name: "Scan targets"
type: exec
steps:
- "nmap -sC -sV -iL {{.Targets.filepath}} -oN /opt/recon/nmap-{{.Worker.Name}}.txt"
- name: "Collect results"
type: sync
src: "/opt/recon/nmap-{{.Worker.Name}}.txt"
dest: "./results/nmap-{{.Worker.Name}}.txt"
इसके साथ चलाएँ:
reconswarm manual -f pipeline.yaml
# या सर्वर पर सबमिट करें:
reconswarm run -f pipeline.yaml
Docker-आधारित स्कैनिंग के साथ एकाधिक लक्ष्य:
pipeline:
targets:
- value: "example.com"
type: crtsh
- value: ["api.example.com", "www.example.com"]
type: list
stages:
- name: "Run nuclei scan"
type: exec
steps:
- "docker run --rm -v /opt/recon:/data projectdiscovery/nuclei:latest -l {{.Targets.filepath}} -json -o /opt/recon/nuclei-{{.Worker.Name}}.json"
- name: "Copy nuclei results"
type: sync
src: "/opt/recon/nuclei-{{.Worker.Name}}.json"
dest: "./results/nuclei-{{.Worker.Name}}.json"
एकाधिक चरणों के साथ कस्टम टूलचेन:
सर्वर कॉन्फ़िग (reconswarm.yaml):
workers:
max_workers: 5
setup_commands:
- "apt update"
- "apt install -y git golang"
- "git clone https://github.com/projectdiscovery/subfinder.git"
- "cd subfinder && go build"
पाइपलाइन कॉन्फ़िग (pipeline.yaml):
pipeline:
targets:
- value: "example.com"
type: crtsh
stages:
- name: "Additional enumeration"
type: exec
steps:
- "cd subfinder && ./subfinder -dL {{.Targets.filepath}} -o /opt/recon/subfinder-{{.Worker.Name}}.txt"
- name: "Merge targets"
type: exec
steps:
- "cat {{.Targets.filepath}} /opt/recon/subfinder-{{.Worker.Name}}.txt | sort -u > /opt/recon/all-targets-{{.Worker.Name}}.txt"
- name: "Scan merged targets"
type: exec
steps:
- "nmap -sC -sV -iL /opt/recon/all-targets-{{.Worker.Name}}.txt -oN /opt/recon/scan-{{.Worker.Name}}.txt"
- name: "Collect all results"
type: sync
src: "/opt/recon"
dest: "./results/{{.Worker.Name}}"
नोट: sync चरण स्वचालित रूप से पता लगाता है कि /opt/recon एक निर्देशिका है और सभी फ़ाइलों और उपनिर्देशिकाओं को स्थानीय गंतव्य पर पुनरावर्ती रूप से कॉपी करता है।
सबडोमेन गणना:
reconswarm crtsh-dump example.com
किसी दिए गए डोमेन के लिए crt.sh से हल करने योग्य सबडोमेन लाता है और फ़िल्टर करता है।
डीबग कमांड (VM प्रावधान के परीक्षण के लिए):
reconswarm debug
Task का उपयोग करके बिल्ड और परीक्षण करें:
task build # Build binary
task test # Run tests
task lint # Run linter
task vet # Run go vet
task ci # Run all CI checks
notify चरण जोड़ें — सूचनाएँ या अलर्ट भेजें (वेबहुक, ईमेल, Slack)conditional चरण जोड़ें — पिछले चरण के परिणामों के आधार पर चरण निष्पादित करेंparallel चरण जोड़ें — एक ही कार्यकर्ता पर एक साथ कई संचालन निष्पादित करेंretry चरण जोड़ें — कॉन्फ़िगर करने योग्य बैकऑफ़ के साथ स्वचालित रूप से विफल संचालन का पुनः प्रयास करेंtimeout चरण जोड़ें — प्रति चरण निष्पादन टाइमआउट सेट करेंvalidate चरण जोड़ें — आगे बढ़ने से पहले परिणामों या शर्तों को मान्य करेंMIT लाइसेंस। विवरण के लिए LICENSE फ़ाइल देखें।
| शून्य-डाउनटाइम पुनरारंभ |
| पाइपलाइन स्थिति खोए बिना सर्वर को पुनरारंभ करें |
| क्रैश पुनर्प्राप्ति | नया सर्वर इंस्टेंस वहाँ से शुरू होता है जहाँ पिछला छूट गया था |
| स्थिति निरीक्षण | डिबगिंग और निगरानी के लिए सीधे etcd से क्वेरी करें |