
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
يمكنك إما تمرير الخلفية الخاصة بك باستخدام الأعلام أو من خلال متغيرات البيئة. يمكنك استخدام -f أو --function-name لتحديد دالة Lambda الخاصة بك و -r أو --region لتحديد المنطقة. فيما يلي متغيرات البيئة التي يمكنك استخدامها.
AWS_LAMBDA_FUNCTION_NAME هو اسم دالة Lambda الخاصة بك لتنفيذ عمليات الفحص عليهاAWS_REGION هي المنطقة التي تم نشر مواردك فيهاNUCLEARPOND_API_KEY هو مفتاح API للمصادقة على APIAWS_DYNAMODB_TABLE هو جدول DynamoDB لتخزين حالات فحص APIفيما يلي بعض الأعلام التي يمكنك تحديدها عند تشغيل nuclearpond. الأعلام الأساسية التي تحتاجها هي -t أو -l للأهداف، -a لوسائط Nuclei، و -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 بالتوازي عن طريق استدعاء Lambda بشكل غير متزامن
الاستخدام:
nuclearpond run [flags]
الأعلام:
-a, --args string وسائط nuclei كسلسلة مشفرة بـ base64
-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 افتراضيًا بتنزيل القوالب عند التنفيذ كما تضيف القوالب كطبقة. تستخدم المتغيرات لتنزيل القوالب موفر github الخاص بـ terraform لتنزيل ملف zip للإصدار. سيكون اسم المجلد داخل الملف المضغوط موجودًا في /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 المرتبط به لأنه سيحتوي على بعض الملاحظات المهمة.