
Nuclear Pond هي أداة تستخدم Nuclei لإجراء مسح شامل للإنترنت بتكلفة كوب قهوة.
يُستخدم Nuclear Pond للاستفادة من Nuclei في السحابة بسرعة ومرونة غير مسبوقة،وإجراء مسح على نطاق الإنترنت بكلفة أقل بكثير من فنجان قهوة.
يستفيد من AWS Lambda كخلفية لاستدعاء عمليات مسح Nuclei بالتوازي، مع إمكانية تخزين نتائج JSON في S3 للاستعلام باستخدام AWS Athena، وهو بسهولة أحد أرخص الطرق لتنفيذ عمليات المسح في السحابة.
اعتبر Nuclear Pond مجرد وسيلة لتشغيل Nuclei في السحابة. يمكنك استخدامه تمامًا كما تفعل على جهازك المحلي ولكن بتشغيلها بالتوازي وبأي عدد من المضيفات التي ترغب في تحديدها. كل ما عليك التفكير فيه هو أعلام سطر أوامر Nuclei التي ترغب في تمريرها إليه.
لتثبيت Nuclear Pond، تحتاج إلى تكوين وحدة terraform الخلفية 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
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 افتراضيًا بتنزيل القوالب عند التنفيذ وكذلك إضافتها كطبقة. تستخدم المتغيرات لتنزيل القوالب مزود github الخاص بـ terraform لتنزيل الملف المضغوط للإصدار. سيكون اسم المجلد داخل الملف المضغوط موجودًا داخل /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 المرتبط بها لأنه سيحتوي على بعض الملاحظات المهمة.