
रीकॉन और भेद्यता स्कैनिंग कार्यभार वितरित करने के लिए Serverless AWS समाधान। वेब UI के माध्यम से कार्य सबमिट करें; EC2 वर्कर Nmap जैसे टूल्स के साथ कस्टम Python स्क्रिप्ट निष्पादित करते हैं।
CowCloud मूल रूप से recon टूल्स और भेद्यता स्कैन को वितरित तरीके से चलाने के लिए बनाया गया था; उदाहरण के लिए, एक उपयोग-मामला बग बाउंटी शिकारियों द्वारा हो सकता है। यह समाधान अंतिम उपयोगकर्ताओं को AWS में वर्कलोड वितरित करने के लिए आवश्यक अंतर्निहित कार्य से अलग करने के लिए है। CowCloud उपयोगकर्ताओं को एक अनुकूल वेब इंटरफ़ेस प्रदान करता है जिससे वे नए कार्य देख और बना सकते हैं, जिन्हें बाद में worker nodes (EC2 instances) पर चल रहे Python कोड द्वारा उपभोग किया जाता है। यह इरादा है कि Python कोड के साथ-साथ EC2 AMIs को भी अनुकूलित किया जाएगा।
उदाहरण के तौर पर, मान लीजिए आप Nmap स्कैन चलाना चाहते हैं। उस स्थिति में, आप AMI कैटलॉग से एक AMI चुन सकते हैं और Terraform/ec2_module/ec2_module.tf में image_id फ़ील्ड को अपडेट कर सकते हैं। फिर, Nmap स्कैन के तर्कों (-Pn, -p 443, आदि) को अनुकूलित करने के लिए ec2py/template.py फ़ाइल को अपडेट करना होगा। अंत में, Terraform/ec2_module/ec2_module.tf कॉन्फ़िगरेशन फ़ाइल में user_data फ़ील्ड को Nmap और उसकी निर्भरताओं को स्थापित करने के लिए अपडेट करना होगा।
एक अन्य विकल्प कई व्यावसायिक टूल्स को स्थापित करना और चलाना है; उस स्थिति में, आप अपना स्वयं का EC2 instance या snapshot बनाना चाह सकते हैं। इस मामले में आप सभी निर्भरताएँ स्थापित करेंगे और लाइसेंस सक्रिय करेंगे ताकि आप इस AMI को अपने workers के लिए gold image के रूप में उपयोग कर सकें।

CowCloud को तीन मुख्य घटकों में विभाजित किया जा सकता है:
ये हैं मुख्य विशेषताएँ:
autoscalingStrategy.py में पाई जा सकती है)।retention_time समाप्त होने के बाद countdown बनाने और CloudWatch logging groups को हटाने के लिए Step functions सेवा का उपयोग किया जाता है।template.py फ़ाइल में वेरिएबल देखें (यह नीचे Administrator/maintainer अनुभाग में समझाया गया है)।
Terraform निष्पादित करने के परिणामस्वरूप, एक नई फ़ाइल (config.js) बनती है; इसमें React JS ऐप के लिए Cognito user pool directory के विरुद्ध प्रमाणीकरण हेतु आवश्यक कॉन्फ़िगरेशन होता है। इन्फ्रास्ट्रक्चर परिनियोजित होने के बाद, आपको React ऐप बनाना होगा और build फ़ोल्डर को अपलोड करना होगा। इसके अलावा, आपको Python कोड को एक S3 bucket में अपलोड करना होगा जो code repository के रूप में कार्य करता है। यह प्रक्रिया दो स्क्रिप्ट्स setup.bat और setup.sh में स्वचालित है, इसलिए आपको इसके बारे में चिंता करने की आवश्यकता नहीं है; यह केवल इस चरण को सारांशित करने के लिए है।
इन्फ्रास्ट्रक्चर डिफ़ॉल्ट रूप से us-east-1 क्षेत्र में परिनियोजित होता है, हालाँकि इसे Terraform फ़ोल्डर के भीतर locals.tf फ़ाइल में बदला जा सकता है।
चरण:
variables.tf अपडेट करें; ami वेरिएबल को एक मौजूदा EC2 AMI की ओर इंगित करना होता है, जो आपका golden AMI या EC2 कैटलॉग में से एक हो सकता है।aws configure में अपने AWS खाते का उपयोग करने के लिए aws-cli कॉन्फ़िगर करें। यह कमांड चलाकर जाँचें कि आपने इसे सही ढंग से कॉन्फ़िगर किया है: aws sts get-caller-identity; सही ढंग से कॉन्फ़िगर होने पर इसे कोई त्रुटि नहीं लौटानी चाहिए।aws ec2 create-key-pair –key-name cowCloud –query “cowCloud” –output text > ec2_module/cowCloud.pemgit clone [email protected]:nccgroup/cowcloud.git
# Deploy the infra
cd cowcloud
cd Terraform
terraform init
terraform plan
terraform apply --auto-approve
अब आप शुरू करने के लिए तैयार हैं! साइन अप करें, साइन इन करें और एक नया कार्य बनाएँ!
एक बार सब कुछ परिनियोजित हो जाने और फ्रंट-एंड सुलभ हो जाने पर, आपको इन चरणों का पालन करना चाहिए:
CowCloud\ec2py> python .\decypt_file.py 2e8cf87c-5389-11ec-abec-d6d1f378b18d
इन्फ्रास्ट्रक्चर को परिनियोजित करने और उसका रखरखाव करने वाले व्यक्ति को वेब ऐप के माध्यम से प्रदान किए गए अंतिम-उपयोगकर्ता इनपुट को उचित रूप से sanitise और validate करना होता है। दूसरे शब्दों में, सुनिश्चित करें कि ec2py/template.py में कोड OS command injection के प्रति संवेदनशील नहीं है।
यह बिंदु इसलिए उजागर किया गया है क्योंकि यह सिस्टम का सबसे महत्वपूर्ण पहलू है। worker की अनुमतियों और एक्सपोज़र के दायरे को सीमित करने तथा संबंधित जोखिमों को कम करने के लिए विशेष ध्यान रखा गया है। फिर भी, सिस्टम सुरक्षा के इस पहलू का ध्यान रखना व्यवस्थापक की ज़िम्मेदारी है।
EC2 instances प्रोफ़ाइल से जुड़ी role policies Terraform फ़ोल्डर के अंदर readme.md फ़ाइल में सूचीबद्ध हैं
workers_manager.py नामक एक Lambda फ़ंक्शन है जिसे अधिक विशेषाधिकार प्राप्त क्रियाएँ करने के लिए ec2py टूल द्वारा कॉल किया जाता है। इन क्रियाओं को Lambda फ़ंक्शन में स्थानांतरित किया गया था ताकि यदि कोई EC2 प्रोफ़ाइल से जुड़ी भूमिका की access key से समझौता कर ले तो जोखिम सीमित रहे। फिर भी यह IMDSv2 के साथ काम करता है।
Lambda फ़ंक्शन workers_manager.py से जुड़ी role policies Terraform फ़ोल्डर के अंदर readme.md फ़ाइल में सूचीबद्ध हैंयदि आप कार्य निष्पादित होने के दौरान stdout को कैप्चर करना चाहते हैं और उसे वेब इंटरफ़ेस के माध्यम से दिखाना चाहते हैं, तो ec2py/template.py पर जाएँ और इन चरणों का पालन करें::
extra_docker_params वेरिएबल में आपके Docker कंटेनरों द्वारा stdout को CloudWatch log groups में भेजने के लिए आवश्यक जानकारी शामिल होती है। जब आप फ्रंट-एंड के माध्यम से stdout देखना चाहते हैं, तो आपको इस वेरिएबल को कमांड लाइन में शामिल करना होगा।cmd = f"docker run {extra_docker_params} --rm -v {tmp_folder}target.txt:/root/Tools/reconftw/target.txt -v {tmp_folder}reconftw.cfg:/root/Tools/reconftw/reconftw.cfg -v {tmp_folder}Recon/:/root/Tools/reconftw/Recon/ six2dez/reconftw:main -l target.txt -w".split(' ')
आप इस सरल कमांड को चलाकर इन्फ्रास्ट्रक्चर को नष्ट कर सकते हैं: terraform destroy --auto-approve यह सभी मौजूदा संसाधनों को हटा देगा।
नोट: इस प्रक्रिया को बीच में न रोकें, क्योंकि इससे कुछ तत्व क्लाउड में बचे रह सकते हैं, जिन्हें आपको बाद में मैन्युअल रूप से पहचानकर हटाना होगा।


terraform destroy --auto-approve -target module.gateway_module.aws_api_gateway_deployment.lambdaterraform apply --auto-approve -target module.gateway_moduleextra_docker_params| variable | default value | description |
|---|
eipenable | false | यदि true है, तो समाधान worker nodes के स्पिन अप होने पर उनसे जुड़े elastic IP addresses का एक pool आवंटित करता है। आरक्षित करने के लिए EIP की संख्या इस सूत्र से निकाली जाती हैsum([var.max_workers, var.maximum_number_of_terminating_machines]) |
cidr_whitelist | [] | फ़ायरवॉल में केवल कुछ IP रेंज की अनुमति देने के लिए CIDR whitelist। उदा. ["195.95.131.0/24"] |
max_workers and max_queued_tasks_per_worker | max_workers: 3, max_queued_tasks_per_worker: 10 | ये दो सेटिंग्स यह निर्धारित करती हैं कि कब scale in या scale out करना है, उदा. max_workers 3, max_queued_tasks_per_worker 10। इसका मतलब है कि यदि कार्यों की संख्या दस से अधिक हो जाती है, तो एक नया EC2 instance बनाया जाएगा। यदि बीस से अधिक कार्य हैं, तो वर्कलोड वितरित करने के लिए अधिकतम तीन EC2 instances उपलब्ध होंगे (इस स्क्रिप्ट में मौजूद एल्गोरिदम देखें Terraform/dynamodb_module/autoscalingTool/autoscalingStrategy.py)। |
maximum_number_of_terminating_machines | 2 | यह उन instances की संख्या परिभाषित करता है जिन्हें समाप्त करने के लिए निर्धारित किया गया है लेकिन process/scan द्वारा कार्य पूरा होने तक रोके रखा जाता है। |
heartbeat_timeout | 900 | यह उस समय को परिभाषित करता है जब तक वे workers रोके रहते हैं। इस समय की समाप्ति के बाद, worker को जबरन समाप्त कर दिया जाएगा। |
instance_type | t2.micro | https://aws.amazon.com/ec2/instance-types/ |
ami | null | https://aws.amazon.com/es/amazon-linux-ami/ |
retention_time | 7 | लॉग्स के लिए retention time (दिन) और archive table आइटम्स (पूर्ण किए गए कार्यों) की समाप्ति निर्धारित करें। |