
Nuclear Pond एक उपयोगिता है जो Nuclei का उपयोग करके एक कप कॉफी की कीमत पर इंटरनेट-व्यापी स्कैन करती है।
Nuclear Pond का उपयोग क्लाउड में Nuclei का लाभ उठाने के लिए उल्लेखनीय गति, लचीलापन और एक कप कॉफी से भी कम में इंटरनेट-व्यापी स्कैन करने के लिए किया जाता है।
यह न्यूक्लियर स्कैन को समानांतर में चलाने के लिए बैकएंड के रूप में AWS Lambda का उपयोग करता है, JSON परिणामों को S3 में संग्रहीत करने का विकल्प देता है ताकि AWS Athena से क्वेरी की जा सके, और क्लाउड में स्कैन करने के सबसे सस्ते तरीकों में से एक है।
Nuclear Pond को क्लाउड में Nuclei चलाने के एक तरीके के रूप में सोचें। आप इसका उपयोग ठीक वैसे ही कर सकते हैं जैसे आप अपनी स्थानीय मशीन पर करते हैं, लेकिन उन्हें समानांतर में और जितने चाहें उतने होस्ट के साथ चलाएं। आपको बस Nuclei कमांड लाइन फ़्लैग्स के बारे में सोचना है जिन्हें आप पास करना चाहते हैं।
Nuclear Pond को स्थापित करने के लिए, आपको बैकएंड terraform मॉड्यूल को कॉन्फ़िगर करना होगा। आप terraform apply चलाकर या terragrunt का उपयोग करके ऐसा कर सकते हैं।
$ go install github.com/DevSecOpsDocs/nuclearpond@latest
आप अपने बैकएंड को फ़्लैग्स या पर्यावरण चर के माध्यम से पास कर सकते हैं। आप अपने Lambda फ़ंक्शन को निर्दिष्ट करने के लिए -f या --function-name और निर्दिष्ट क्षेत्र के लिए -r या --region का उपयोग कर सकते हैं। नीचे पर्यावरण चर दिए गए हैं जिनका आप उपयोग कर सकते हैं।
AWS_LAMBDA_FUNCTION_NAME आपके lambda फ़ंक्शन का नाम है जिस पर स्कैन चलाने हैंAWS_REGION वह क्षेत्र है जहाँ आपके संसाधन तैनात हैंNUCLEARPOND_API_KEY API में प्रमाणीकरण के लिए API कुंजी हैAWS_DYNAMODB_TABLE API स्कैन स्थितियों को संग्रहीत करने के लिए डायनेमोडीबी तालिका हैनीचे कुछ फ़्लैग्स दिए गए हैं जिन्हें आप nuclearpond चलाते समय निर्दिष्ट कर सकते हैं। आपको मुख्य रूप से अपने लक्ष्य(ों) के लिए -t या -l, Nuclei आर्ग्स के लिए -a, और अपना आउटपुट निर्दिष्ट करने के लिए -o की आवश्यकता है। Nuclei आर्ग्स निर्दिष्ट करते समय, आपको उन्हें base64 एन्कोडेड स्ट्रिंग के रूप में पास करना होगा, जैसे: -a $(echo -ne "-t dns" | base64)।
Nuclearpond उपकमांड चलाने के लिए: nuclearpond run -t devsecopsdocs.com -r us-east-1 -f jwalker-nuclei-runner-function -a $(echo -ne "-t dns" | base64) -o cmd -b 1 जिसमें लक्ष्य devsecopsdocs.com है, क्षेत्र us-east-1 है, lambda फ़ंक्शन नाम jwalker-nuclei-runner-function है, Nuclei आर्गुमेंट -t dns हैं, आउटपुट cmd है, और -b 1 के माध्यम से एक होस्ट के बैच में एक फ़ंक्शन निष्पादित होता है।
$ nuclearpond run -h
Executes nuclei tasks in parallel by invoking lambda asynchronously
Usage:
nuclearpond run [flags]
Flags:
-a, --args string nuclei arguments as base64 encoded string
-b, --batch-size int batch size for number of targets per execution (default 1)
-f, --function-name string AWS Lambda function name
-h, --help help for run
-o, --output string output type to save nuclei results(s3, cmd, or json) (default "cmd")
-r, --region string AWS region to run nuclei
-s, --silent silent command line output
-t, --target string individual target to specify
-l, --targets string list of targets in a file
-c, --threads int number of threads to run lambda functions, default is 1 which will be slow (default 1)
terraform मॉड्यूल डिफ़ॉल्ट रूप से निष्पादन पर टेम्पलेट्स डाउनलोड करता है और साथ ही टेम्पलेट्स को एक लेयर के रूप में जोड़ता है। टेम्पलेट्स डाउनलोड करने के लिए चर रिलीज़ ज़िप डाउनलोड करने के लिए terraform github प्रदाता का उपयोग करते हैं। ज़िप के अंदर फ़ोल्डर का नाम /opt के अंतर्गत होगा। चूंकि Nuclei उन्हें चलने पर डाउनलोड करता है, हमें ऐसा करने की आवश्यकता नहीं है, लेकिन प्रदर्शन में सुधार के लिए आप डाउनलोड किए गए ज़िप से टेम्पलेट निष्पादित करने के लिए -t /opt/nuclei-templates-9.3.4/dns निर्दिष्ट कर सकते हैं। अपने स्वयं के टेम्पलेट निर्दिष्ट करने के लिए आपको एक रिलीज़ का संदर्भ देना होगा। अपने स्वयं के रिपॉजिटरी पर ऐसा करते समय, आपको terraform मॉड्यूल में इन चरों को निर्दिष्ट करना होगा, यदि आपका रिपॉजिटरी सार्वजनिक है तो github_token की आवश्यकता नहीं है।
यदि आपने आउटपुट के रूप में s3 निर्दिष्ट किया है, तो आपके परिणाम S3 में स्थित होंगे। उन तक पहुंचने का सबसे तेज़ तरीका Athena का उपयोग करना है। यह मानते हुए कि आपने terraform-मॉड्यूल को अपने बैकएंड के रूप में सेट किया है, आपको बस Athena के माध्यम से सीधे क्वेरी करने की आवश्यकता है। यदि आपने पहले से ऐसा नहीं किया है तो आपको क्वेरी परिणाम कॉन्फ़िगर करने पड़ सकते हैं।
select
*
from
nuclei_db.findings_db
limit 10;
क्वेरी में थोड़ा गहराई से जाने के लिए, मैं आपको एक त्वरित उदाहरण देता हूँ। select स्टेटमेंट में हम info कॉलम में ड्रिल डाउन करते हैं, "matched-at" कॉलम को - वर्ण के कारण डबल कोट्स में होना चाहिए, और आप केवल Nuclei द्वारा उत्पन्न उच्च और गंभीर परिणामों की खोज कर रहे हैं।
SELECT
info.name,
host,
type,
info.severity,
"matched-at",
info.description,
template,
dt
FROM
"nuclei_db"."findings_db"
where
host like '%devsecopsdocs.com'
and info.severity in ('high','critical')
बैकएंड बुनियादी ढांचा, सब terraform मॉड्यूल के भीतर है। मैं दृढ़ता से इससे जुड़े README को पढ़ने की सलाह देता हूँ क्योंकि इसमें कुछ महत्वपूर्ण नोट्स होंगे।