
Nuclear Pond एक उपयोगिता है जो Nuclei का उपयोग करके एक कप कॉफी की कीमत पर इंटरनेट-व्यापी स्कैन करती है।
हमने इस प्रोजेक्ट को फोर्क किया है ताकि हम इस महान विचार को जारी रख सकें, मुझे उम्मीद है कि हम साथ मिलकर कोड को बेहतर कर सकते हैं और इसे सभी के लिए उपलब्ध करा सकते हैं - @OFJAAAH
Nuclear Pond को इंस्टॉल करने के लिए, आपको बैकएंड terraform module को कॉन्फ़िगर करना होगा। आप terraform apply चलाकर या terragrunt का उपयोग करके ऐसा कर सकते हैं।
यह बैकएंड के रूप में AWS Lambda का उपयोग करके समानांतर में Nuclei स्कैन चलाता है, json निष्कर्षों को s3 में संग्रहीत करने का विकल्प देता है ताकि AWS Athena से क्वेरी किया जा सके, और क्लाउड में स्कैन चलाने के सबसे सस्ते तरीकों में से एक है।
Nuclear Pond को क्लाउड में Nuclei चलाने के एक तरीके के रूप में सोचें। आप इसका उपयोग ठीक वैसे ही कर सकते हैं जैसे आप अपनी स्थानीय मशीन पर करते हैं, लेकिन उन्हें समानांतर में और जितने चाहें उतने होस्ट के साथ चला सकते हैं। आपको बस उन nuclei कमांड लाइन फ़्लैग्स के बारे में सोचना है जिन्हें आप पास करना चाहते हैं।
Nuclear Pond को इंस्टॉल करने के लिए, आपको बैकएंड terraform module को कॉन्फ़िगर करना होगा। आप 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 स्कैन स्थितियों को संग्रहीत करने के लिए dynamodb तालिका हैनीचे कुछ फ़्लैग्स दिए गए हैं जिन्हें आप nuclearpond चलाते समय निर्दिष्ट कर सकते हैं। प्राथमिक फ़्लैग्स जिनकी आपको आवश्यकता है वे हैं आपके लक्ष्य(लक्ष्यों) के लिए -t या -l, nuclei आर्ग्स के लिए -a, और अपने आउटपुट को निर्दिष्ट करने के लिए -o। Nuclei आर्ग्स निर्दिष्ट करते समय आपको उन्हें base64 एन्कोडेड स्ट्रिंग के रूप में पास करना होगा, -a $(echo -ne "-t dns" | base64) करके।
नीचे वे उपकमांड्स हैं जिन्हें आप nuclearpond के भीतर निष्पादित कर सकते हैं।
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
लैम्ब्डा को अतुल्यकालिक रूप से आह्वान करके समानांतर में nuclei कार्यों को निष्पादित करता है
उपयोग:
nuclearpond run [फ़्लैग्स]
फ़्लैग्स:
-a, --args string base64 एन्कोडेड स्ट्रिंग के रूप में nuclei आर्गुमेंट्स
-b, --batch-size int प्रति निष्पादन लक्ष्यों की संख्या के लिए बैच आकार (डिफ़ॉल्ट 1)
-f, --function-name string AWS Lambda फ़ंक्शन का नाम
-h, --help run के लिए सहायता
-o, --output string nuclei परिणामों को सहेजने के लिए आउटपुट प्रकार (s3, cmd, या json) (डिफ़ॉल्ट "cmd")
-r, --region string AWS क्षेत्र जहां nuclei चलाना है
-s, --silent मौन कमांड लाइन आउटपुट
-t, --target string निर्दिष्ट करने के लिए व्यक्तिगत लक्ष्य
-l, --targets string फ़ाइल में लक्ष्यों की सूची
-c, --threads int lambda फ़ंक्शन चलाने के लिए थ्रेड्स की संख्या, डिफ़ॉल्ट 1 है जो धीमा होगा (डिफ़ॉल्ट 1)
terraform मॉड्यूल डिफ़ॉल्ट रूप से निष्पादन पर टेम्पलेट्स डाउनलोड करता है और साथ ही टेम्पलेट्स को एक लेयर के रूप में जोड़ता है। टेम्पलेट्स डाउनलोड करने के लिए चर रिलीज़ ज़िप डाउनलोड करने के लिए terraform github प्रदाता का उपयोग करते हैं। ज़िप के भीतर फ़ोल्डर का नाम /opt के अंदर स्थित होगा। चूंकि Nuclei उन्हें चलाने पर डाउनलोड करता है, हमें ऐसा करने की आवश्यकता नहीं है लेकिन प्रदर्शन में सुधार के लिए आप डाउनलोड किए गए ज़िप से टेम्पलेट्स निष्पादित करने के लिए -t /opt/nuclei-templates-9.3.4/dns निर्दिष्ट कर सकते हैं। अपने स्वयं के टेम्पलेट्स निर्दिष्ट करने के लिए आपको एक रिलीज़ का संदर्भ देना होगा। अपने स्वयं के रिपॉजिटरी पर ऐसा करते समय आपको terraform मॉड्यूल में इन चरों को निर्दिष्ट करना होगा, यदि आपका रिपॉजिटरी सार्वजनिक है तो github_token आवश्यक नहीं है।
यदि आपने आउटपुट के रूप में s3 निर्दिष्ट किया है, तो आपके निष्कर्ष S3 में स्थित होंगे। उन्हें प्राप्त करने का सबसे तेज़ तरीका Athena के माध्यम से है। मान लें कि आपने terraform-module को अपने बैकएंड के रूप में सेट किया है, तो आपको बस उन्हें सीधे 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 module के भीतर है। मैं दृढ़ता से अनुशंसा करूंगा कि इससे जुड़े readme को पढ़ें क्योंकि इसमें कुछ महत्वपूर्ण नोट्स होंगे।