
रीकॉन और भेद्यता स्कैनिंग कार्यभार वितरित करने के लिए 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 फ़ाइल में extra_docker_params वेरिएबल देखें (यह नीचे Administrator/maintainer अनुभाग में समझाया गया है)।
| 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 आइटम्स (पूर्ण किए गए कार्यों) की समाप्ति निर्धारित करें। |
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.pem