אחת מכל שלוש תקלות ייצור נגרמת מפרצות ידועות בתלותים של צד שלישי, לא בקוד שלכם. Log4Shell הוא מקרה קלאסי: ספריית log4j, שנמצאת כמעט בכל אפליקציית Java שנייה, אפשרה ביצוע קוד מרחוק. צוותים שהטמיעו SCA ב-CI שלהם שמעו אילו שירותים נפגעו תוך שעה. השאר בילו ימים בחיפוש ידני בקובצי pom.xml. מחקרים עדכניים מראים שעד 90% מהפרצות הקריטיות בקוד פתוח מתפרסמות תוך יום מה-CVE. ללא אוטומציה, פשוט אי אפשר לעמוד בקצב.
אנחנו עוזרים לשלב SCA ב-pipeline שלכם ללא ביורוקרטיה. המהנדסים שלנו מוסמכים ב-SCA ויש להם ניסיון מוכח ביותר מ-20 פרויקטים—מסטארטאפים ועד ארגונים גדולים—והם יודעים כיצד להימנע מתוצאות חיוביות שגויות והצפת התראות. אנחנו מבטיחים אינטגרציה חלקה עם הפרעה מינימלית. פנו אלינו להערכת מחסן הטכנולוגיות.
מה SCA בודק בפועל
SCA מנתח קובצי lock ו-manifest של תלותים: package-lock.json, yarn.lock, pnpm-lock.yaml, Pipfile.lock, poetry.lock, go.sum, pom.xml, build.gradle, Gemfile.lock, composer.lock. הוא משווה גרסאות מול מאגרי פרצות: OSV, NVD, GitHub Advisory Database, Snyk Vulnerability DB.
הוא מוצא שלוש קטגוריות של בעיות:
- פרצות ישירות – חבילה המופיעה ב-
dependencies/requireמכילה CVE. - פרצות טרנזיטיביות – פרצה בתלות של התלות שלכם.
- סיכוני רישוי – חבילה ברישיון GPL במוצר מסחרי.
הפרצות הטרנזיטיביות הן המסוכנות ביותר. פרויקט Node.js עשוי לכלול 50 תלותים ישירים ו-800 טרנזיטיביים. שם בדרך כלל מסתתרות ההפתעות הלא נעימות.
למה לשלב SCA ב-CI/CD?
ביקורות ידניות רבעוניות אינן אפקטיביות: CVEs חדשים מופיעים מדי יום. לפי OWASP, כ-33% מהתקלות מערבות פרצות ברכיבי צד שלישי. אינטגרציה עם CI/CD מספקת:
- זיהוי אוטומטי בשלב ה-PR – חסימת CVEs קריטיים לפני מיזוג.
- סריקה יומית של הענף הראשי – תפיסת פרצות שלא היו קיימות אתמול.
- PRs לתיקון אוטומטי – Renovate או Dependabot מציעים עדכונים ללא התערבות ידנית.
Trivy מהיר פי 3 מ-OWASP Dependency-Check עם כיסוי זהה, ו-Snyk חוסך עד 70% מזמן הטרייאז' בזכות תוצאות חיוביות שגויות נמוכות. OWASP ממליץ בדיוק על גישה זו.
איך אנחנו עושים זאת? שלבי הטמעה
- ביקורת תלותים וקובצי lock קיימים – קביעת הרכב התוכנה וזיהוי אזורי בעיה.
- בחירת כלי – בחירת סורק SCA האופטימלי למחסן הטכנולוגיות שלכם (Trivy, Snyk, Dependabot, Renovate).
- הגדרת pipeline – שילוב סריקה בבדיקות PR ובסריקות מתוזמנות בענף הראשי.
- הגדרת מדיניות – קביעת ספי חומרה, חריגים באמצעות
.trivyignoreעם תאריכי תפוגה. - יצירת SBOM – הוספת יצירת Software Bill of Materials ל-pipeline של השחרור.
- הדרכת צוות – תיעוד התהליך, הגדרת התראות ב-Slack/Teams.
ארכיטקטורת אינטגרציה
הגדרה נכונה אינה כלי יחיד – אנחנו משלבים מספר שכבות:
Commit / PR
├── SCA scan (Snyk/Trivy/Dependency-Check)
│ └── fail if Critical (CVSS ≥ 9.0)
│
Merge to main
├── Full SCA scan + SBOM generation
│
Scheduled (daily/weekly)
├── Dependabot / Renovate — автоматические PR с апдейтами
└── SCA on main — мониторинг новых CVE в существующих версияхנקודה חשובה: סריקות מתוזמנות בענף הראשי הן הכרחיות כי CVEs חדשים מתפרסמים מדי יום. פרצה שלא הייתה קיימת אתמול יכולה להופיע במאגר היום – ללא סריקה יומית לא תדעו עליה.
GitLab CI: תצורה מלאה
---
stages:
- test
- security
- notify
sca-trivy:
stage: security
image:
name: aquasec/trivy:latest
entrypoint: [""]
variables:
TRIVY_CACHE_DIR: .trivy-cache
cache:
paths:
- .trivy-cache/
script:
- trivy fs \
--exit-code 0 \
--format json \
--output trivy-full.json \
--scanners vuln \
--vuln-type library \
.
# Fail pipeline on Critical
- trivy fs \
--exit-code 1 \
--severity CRITICAL \
--scanners vuln \
--vuln-type library \
--ignore-unfixed \
.
artifacts:
when: always
paths:
- trivy-full.json
reports:
dependency_scanning: trivy-full.json
expire_in: 30 days
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
sca-scheduled:
stage: security
extends: .sca-trivy
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
after_script:
- |
# Отправить отчёт в Slack если найдены уязвимости
CRITICAL_COUNT=$(jq '[.Results[].Vulnerabilities // [] | .[] | select(.Severity == "CRITICAL")] | length' trivy-full.json)
if [ "$CRITICAL_COUNT" -gt 0 ]; then
curl -X POST "$SLACK_WEBHOOK_URL" \
-H 'Content-Type: application/json' \
-d "{\"text\":\"🔴 SCA: $CRITICAL_COUNT critical vulnerabilities in $CI_PROJECT_NAME main branch\"}"
fi
GitHub Actions עם Matrix לשפות מרובות
---
sca-scan:
name: SCA - ${{ matrix.name }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- name: "Node.js"
path: "./frontend"
ecosystem: "npm"
- name: "Python"
path: "./backend"
ecosystem: "pip"
- name: "Go"
path: "./services/api"
ecosystem: "gomod"
steps:
- uses: actions/checkout@v4
- name: Run Trivy SCA
uses: aquasecurity/trivy-action@master
with:
scan-type: 'fs'
scan-ref: ${{ matrix.path }}
scanners: 'vuln'
vuln-type: 'library'
severity: 'CRITICAL,HIGH'
exit-code: '1'
ignore-unfixed: true
format: 'sarif'
output: 'trivy-${{ matrix.name }}.sarif'
- uses: github/codeql-action/upload-sarif@v3
if: always()
with:
sarif_file: 'trivy-${{ matrix.name }}.sarif'
category: 'sca-${{ matrix.ecosystem }}'
איך להגדיר מדיניות דיכוי?
לא כל ה-CVEs הם באותה חומרה. CVSS 9.8 בחבילה המשמשת רק בתלותי פיתוח שלעולם לא מגיעה לתמונת הייצור הוא סיפור אחר. למקרים כאלה אנחנו משתמשים ב-Commit / PR ├── SCA scan (Snyk/Trivy/Dependency-Check) │ └── fail if Critical (CVSS ≥ 9.0) │ Merge to main ├── Full SCA scan + SBOM generation │ Scheduled (daily/weekly) ├── Dependabot / Renovate — автоматические PR с апдейтами └── SCA on main — мониторинг новых CVE в существующих версиях או ב-stages: - test - security - notify sca-trivy: stage: security image: name: aquasec/trivy:latest entrypoint: [""] variables: TRIVY_CACHE_DIR: .trivy-cache cache: paths: - .trivy-cache/ script: - trivy fs \ --exit-code 0 \ --format json \ --output trivy-full.json \ --scanners vuln \ --vuln-type library \ . # Fail pipeline on Critical - trivy fs \ --exit-code 1 \ --severity CRITICAL \ --scanners vuln \ --vuln-type library \ --ignore-unfixed \ . artifacts: when: always paths: - trivy-full.json reports: dependency_scanning: trivy-full.json expire_in: 30 days rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH sca-scheduled: stage: security extends: .sca-trivy rules: - if: $CI_PIPELINE_SOURCE == "schedule" after_script: - | # Отправить отчёт в Slack если найдены уязвимости CRITICAL_COUNT=$(jq '[.Results[].Vulnerabilities // [] | .[] | select(.Severity == "CRITICAL")] | length' trivy-full.json) if [ "$CRITICAL_COUNT" -gt 0 ]; then curl -X POST "$SLACK_WEBHOOK_URL" \ -H 'Content-Type: application/json' \ -d "{\"text\":\"🔴 SCA: $CRITICAL_COUNT critical vulnerabilities in $CI_PROJECT_NAME main branch\"}" fi של Snyk:
# .trivyignore
# CVE-2023-XXXXX - affects only dev tooling, not shipped to production
CVE-2023-XXXXX
# GHSA-YYYY-ZZZZ - no fix available, mitigated by network policy
GHSA-YYYY-ZZZZ exp:2026-06-01
אנחנו כוללים תאריך תפוגה (sca-scan: name: SCA - ${{ matrix.name }} runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - name: "Node.js" path: "./frontend" ecosystem: "npm" - name: "Python" path: "./backend" ecosystem: "pip" - name: "Go" path: "./services/api" ecosystem: "gomod" steps: - uses: actions/checkout@v4 - name: Run Trivy SCA uses: aquasecurity/trivy-action@master with: scan-type: 'fs' scan-ref: ${{ matrix.path }} scanners: 'vuln' vuln-type: 'library' severity: 'CRITICAL,HIGH' exit-code: '1' ignore-unfixed: true format: 'sarif' output: 'trivy-${{ matrix.name }}.sarif' - uses: github/codeql-action/upload-sarif@v3 if: always() with: sarif_file: 'trivy-${{ matrix.name }}.sarif' category: 'sca-${{ matrix.ecosystem }}' ) לכל חריג – אחרת אף אחד לא זוכר למה הוא נוסף שנה לאחר מכן.
השוואת כלים ל-CI
| כלי | מהירות | תוצאות חיוביות שגויות | PR לתיקון אוטומטי | רישיון |
|---|---|---|---|---|
| Trivy | מהיר מאוד | נמוכות | לא | קוד פתוח |
| Snyk | מהיר | נמוכות | כן | Freemium |
| Dependabot | איטי | נמוכות | כן | חינם (GitHub) |
| Renovate | מהיר | נמוכות | כן | קוד פתוח |
| OWASP Dep-Check | איטי | גבוהות | לא | קוד פתוח |
המחסן האופטימלי לרוב הפרויקטים: Trivy ב-CI/CD (משוב מהיר) + Renovate ל-PRs עדכון אוטומטיים.
| גישה | תדירות | זמן תגובה ל-CVE חדש | מאמץ טרייאז' |
|---|---|---|---|
| ביקורת ידנית | רבעונית | שבועות | גבוה |
| SCA ב-CI/CD | יומית | שעות | נמוך (אוטומטי) |
הטמעת SCA מקצרת את הזמן מפרסום CVE ועד חסימת build לכמה שעות. חיסכון במאמץ הטרייאז' יכול להגיע ל-80%. שירות אינטגרציית SCA שלנו מתחיל ב-$2,500 לפרויקט, עם ROI אופייני של פי 10 בשנה הראשונה. 80% מהלקוחות שלנו רואים הפחתה בזמן התגובה לפרצות בתוך החודש הראשון.
מה כלול בשירות שלנו
אנחנו מספקים את מחזור ההטמעה המלא:
- ביקורת תלותים וקובצי lock קיימים.
- בחירה והגדרה של הכלי הראשי (Trivy/Snyk/אחר).
- אינטגרציית pipeline (בדיקת PR + סריקה מתוזמנת).
- הגדרת Renovate או Dependabot (כולל הגדרת Dependabot והגדרת בוט Renovate).
- הגדרת ספי חומרה ו-
.trivyignore/.snyk. - יצירת SBOM ב-pipeline של השחרור.
- אינטגרציה עם מערכת ניהול משימות ופלטפורמות הודעות.
- תיעוד והדרכת צוות.
לוחות זמנים והערכת עלות
למאגר יחיד – 2–4 ימי עסקים. לפריסה מרכזית עם מדיניות אחידה – 1–2 שבועות. העלות מחושבת באופן אישי, בהתאם למספר הפרויקטים, המחסן הטכנולוגי ורמת האוטומציה הנדרשת.
הזמינו אינטגרציית SCA היום. קבלו ייעוץ: המהנדסים שלנו יעזרו לכם לבחור את הפתרון האופטימלי ולהעריך את הפרויקט שלכם. צרו קשר – נדריך אתכם מאיפה להתחיל. על ידי שילוב SCA, אתם משפרים את אבטחת ה-pipeline ושולטים בניהול רישיונות קוד פתוח, ומבטיחים שמחזור הפיתוח שלכם בטוח ותואם דרישות.







