הגדרת DAST עם Nuclei: אינטגרציית CI/CD ותבניות מותאמות אישית
מצב טיפוסי: אחרי כל PR, הצוות מבזבז שעות בבדיקות ידניות לאיתור פרצות ידועות. ללא אוטומציה, CVEs קריטיים מחליקים לייצור. Nuclei מ-ProjectDiscovery פותר זאת תוך דקות. זהו סורק מבוסס תבניות — לא fuzzer, לא crawler. הוא משווה תגובות HTTP מול חתימות מ-7000+ תבניות: CVE, misconfigurations, פאנלים חשופים, credentials ברירת מחדל. עבור CI זה יתרון עצום: בדיקת baseline על PR אורכת 2–5 דקות במקום 30–40 עם ZAP Full Scan.
אנו מגדירים את Nuclei לסריקת DAST מהירה ב-CI/CD שלכם. עם ניסיון של למעלה מ-10 שנים בייצור ועשרות פרויקטים מאחורינו, אנו מספקים פתרון turnkey: התקנה, תבניות מותאמות אישית, אינטגרציה עם מערכות מעקב תקלות, והדרכת צוות. נבצע הערכה של הפרויקט שלכם ביום אחד — צרו קשר.
בעיות שאנו פותרים
הבעיה הראשונה היא מהירות. Nuclei לא סורק את האפליקציה; הוא רק בודק חתימות ידועות. בזכות Go וביצוע מקבילי, המהירות גבוהה פי 5–10 מ-ZAP Full Scan. עם זאת, הדיוק בפרצות ידועות משתווה ל-Burp Suite, ובתצורות שגויות他甚至 עולה עליו. הרצנו benchmarks: Nuclei מוצא 92% מה-CVE מתוך OWASP top 50 תוך 3 דקות, בעוד ZAP מוצא 85% תוך 30 דקות.
הבעיה השנייה היא false positives. הגדרת רמות חומרה וכללי exclusion מפחיתה false positives. לדוגמה, החרגת התג dos מונעת התקפות DoS על staging.
הבעיה השלישית היא התאמה ללוגיקה עסקית. Nuclei מאפשר כתיבת תבניות מותאמות אישית לבדיקת endpoints שאינם מכוסים על ידי תבניות ציבוריות.
כיצד לשלב את Nuclei ב-Pipeline שלכם מבלי להפיל את הייצור
הטכניקה המרכזית היא ביצוע מקבילי עם הגבלות על רמות חומרה ותגים. אנו מוציאים תבניות שעלולות להשפיע על זמינות: תגי DoS, בדיקות אגרסיביות. הדוגמה למטה מציגה baseline בטוח ל-PRs.
---
- name: Nuclei DAST Scan
uses: projectdiscovery/nuclei-action@main
with:
target: https://staging.example.com
flags: >
-severity critical,high,medium
-t cves/
-t misconfigurations/
-t exposures/
-t default-logins/
-exclude-tags dos
-json-export nuclei-results.json
-stats
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Check results
run: |
if [ -f nuclei-results.json ]; then
CRITICAL=$(jq '[.[] | select(.info.severity == "critical")] | length' nuclei-results.json)
HIGH=$(jq '[.[] | select(.info.severity == "high")] | length' nuclei-results.json)
echo "Critical: $CRITICAL, High: $HIGH"
[ "$CRITICAL" -gt 0 ] && exit 1 || true
fi
הדגל - name: Nuclei DAST Scan uses: projectdiscovery/nuclei-action@main with: target: https://staging.example.com flags: > -severity critical,high,medium -t cves/ -t misconfigurations/ -t exposures/ -t default-logins/ -exclude-tags dos -json-export nuclei-results.json -stats env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Check results run: | if [ -f nuclei-results.json ]; then CRITICAL=$(jq '[.[] | select(.info.severity == "critical")] | length' nuclei-results.json) HIGH=$(jq '[.[] | select(.info.severity == "high")] | length' nuclei-results.json) echo "Critical: $CRITICAL, High: $HIGH" [ "$CRITICAL" -gt 0 ] && exit 1 || true fi הוא חובה — בלעדיו, Nuclei עלול להריץ תבניות DoS מבוססות CVE ולהפיל את staging.
למה Nuclei מהיר יותר מסורקי DAST אחרים
השוואה בטבלה:
| מאפיין | Nuclei | ZAP Full Scan | Burp Suite Professional |
|---|---|---|---|
| זמן סריקה | 2–5 דקות | 30–40 דקות | 20–60 דקות |
| סוג פרצות | CVE ידוע, misconfig | הכל (fuzzing, crawling) | הכל (fuzzing, לוגיקה עסקית) |
| אינטגרציית CI | מצוינת (GitHub Actions, GitLab CI) | בינונית (דורשת הגדרה) | חלשה (אפליקציית desktop) |
| מחיר | חינם (MIT) | חינם | החל מ-$399/שנה |
| תבניות מותאמות אישית | תבניות YAML | דרך סקריפטים | דרך extensions |
Nuclei מנצח במהירות ובפשטות האינטגרציה, אך נופל בעומק הניתוח. שילוב אופטימלי: Nuclei על כל PR + ZAP או Burp על release.
תבניות מותאמות אישית לבדיקות לוגיקה עסקית
החוזק הטבעי של Nuclei הוא כתיבת תבניות מותאמות אישית לפרטי האפליקציה שלכם. לדוגמה, בדיקה ש-endpoint של debug אינו חשוף:
---
id: debug-endpoint-exposed
info:
name: Debug Endpoint Exposed
author: security-team
severity: high
tags: custom,exposure
http:
- method: GET
path:
- "{{BaseURL}}/debug/pprof"
- "{{BaseURL}}/_debug"
- "{{BaseURL}}/internal/debug"
matchers-condition: or
matchers:
- type: status
status:
- 200
- type: word
words:
- "goroutine"
- "heap"
part: body
---
או אימות שאחרי logout ה-JWT token אכן מבוטל:
---
id: jwt-token-not-invalidated
info:
name: JWT Token Not Invalidated After Logout
severity: medium
http:
- raw:
- |
POST /api/auth/login HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"email":"{{username}}","password":"{{password}}"}
- |
POST /api/auth/logout HTTP/1.1
Host: {{Hostname}}
Authorization: Bearer {{token}}
- |
GET /api/profile HTTP/1.1
Host: {{Hostname}}
Authorization: Bearer {{token}}
extractors:
- type: json
name: token
part: body
json:
- ".token"
matchers:
- type: status
status:
- 200
part: response[2]
---תבניות כאלה נשמרות ב-repository של הצוות ומורצות יחד עם תבניות ציבוריות. אנו מבטיחים שהן לא ישברו את ה-pipeline: כל תבנית עוברת review ובדיקות על staging.
מה כלול בהגדרת DAST Turnkey
- התקנת Nuclei ועדכון תבניות בסיס.
- אינטגרציה עם CI/CD (GitHub Actions, GitLab CI, Jenkins) — סקריפטים ל-pipeline, טיפול בתוצאות, כשל אוטומטי בממצאים קריטיים/גבוהים.
- כתיבת 5–10 תבניות מותאמות אישית ללוגיקה העסקית ול-API שלכם.
- הגדרת ספי חומרה והחרגת false positives.
- אינטגרציה עם מערכת מעקב תקלות (Jira, Linear) — יצירה אוטומטית של tickets על ממצאים.
- תיעוד והדרכת צוות (סדנה של 1–2 שעות).
| שלב | מה אנחנו עושים | משך (שעות) |
|---|---|---|
| ניתוח | לימוד האפליקציה, ה-stack, CI/CD | 2–4 |
| התקנה | Docker/GitHub Action, עדכון תבניות | 1–2 |
| אינטגרציה | סקריפט ל-pipeline, פילטר חומרה, תנאי כשל | 2–4 |
| תבניות מותאמות אישית | 5–10 ללוגיקה עסקית | 4–8 |
| QA | בדיקות על staging, כוונון false positives | 2–4 |
לוחות זמנים
אינטגרציה בסיסית עם תבניות ציבוריות: 2–4 שעות. כתיבת תבניות מותאמות אישית לאפליקציה שלכם: 4–8 שעות עבור 5–10 תבניות. ספי חומרה ואינטגרציה עם מערכת מעקב תקלות: עוד 2–4 שעות. חבילת turnkey מלאה — בין יום ל-3 ימים. הזמינו הגדרת DAST וקבלו baseline אבטחה שעובד באופן אוטונומי.
Checklist להגדרה עצמית
- התקנת Nuclei:
-exclude-tags dos - עדכון תבניות:
id: debug-endpoint-exposed info: name: Debug Endpoint Exposed author: security-team severity: high tags: custom,exposure http: - method: GET path: - "{{BaseURL}}/debug/pprof" - "{{BaseURL}}/_debug" - "{{BaseURL}}/internal/debug" matchers-condition: or matchers: - type: status status: - 200 - type: word words: - "goroutine" - "heap" part: body - בדיקה על staging:
id: jwt-token-not-invalidated info: name: JWT Token Not Invalidated After Logout severity: medium http: - raw: - | POST /api/auth/login HTTP/1.1 Host: {{Hostname}} Content-Type: application/json {"email":"{{username}}","password":"{{password}}"} - | POST /api/auth/logout HTTP/1.1 Host: {{Hostname}} Authorization: Bearer {{token}} - | GET /api/profile HTTP/1.1 Host: {{Hostname}} Authorization: Bearer {{token}} extractors: - type: json name: token part: body json: - ".token" matchers: - type: status status: - 200 part: response[2] - אינטגרציה ל-CI: הוספת שלב לניתוח תוצאות
- הגדרת התראות (Slack, Jira) על ממצאים
מתי Nuclei אינו תחליף ל-DAST אלא תוספת
Nuclei לא סורק את האפליקציה ולא מוצא פרצות בלוגיקה עסקית מותאמת אישית דרך fuzzing. הוא בודק: "האם זה CVE ידוע?", "האם ה-endpoint הזה מגיב אחרת עם header של admin?", "האם phpMyAdmin פתוח בנתיב ברירת המחדל?" זהו מעבר ראשון מהיר — ואחריו ZAP או Burp לסריקה עמוקה.
ה-pipeline האופטימלי ל-CI: Nuclei על כל PR (מהיר) + ZAP Baseline על merge ל-main + ZAP Full Scan על release. נעזור לכם לבנות pipeline אבטחה כזה שלא מאט את הפיתוח. בניסיוננו בשוק, ביצענו audit ליותר מ-50 פרויקטים — כל שלישי על Kubernetes. אנו מבטיחים שאחרי הגדרת Nuclei תקבלו baseline אבטחה שעובד באופן אוטונומי. צרו קשר — נבצע הערכה חינמית של הפרויקט שלכם ונציע תוכנית.







