שילוב SCA ב-CI/CD: אבטח את התלויות שלך

פגיעויות בתלות צד-שלישי גורמות לעיתים קרובות לתקלות חמורות, גם כאשר הקוד שלכם כתוב בצורה מאובטחת. אנו משלבים SCA ב-CI/CD שלכם, ומבצעים אוטומציה של ניתוח הרכב התוכנה ובקרת הפגיעויות בכל שלב בפיתוח. הצוות שלנו מספק פרויקט סוהר—מהגדרת הכלים ועד לתמיכה שוטפת—ומבטיח הגנה אמינה מבלי לפספס מועדים.

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

אחת מכל שלוש תקלות ייצור נגרמת מפרצות ידועות בתלותים של צד שלישי, לא בקוד שלכם. 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 ממליץ בדיוק על גישה זו.

איך אנחנו עושים זאת? שלבי הטמעה

  1. ביקורת תלותים וקובצי lock קיימים – קביעת הרכב התוכנה וזיהוי אזורי בעיה.
  2. בחירת כלי – בחירת סורק SCA האופטימלי למחסן הטכנולוגיות שלכם (Trivy, Snyk, Dependabot, Renovate).
  3. הגדרת pipeline – שילוב סריקה בבדיקות PR ובסריקות מתוזמנות בענף הראשי.
  4. הגדרת מדיניות – קביעת ספי חומרה, חריגים באמצעות .trivyignore עם תאריכי תפוגה.
  5. יצירת SBOM – הוספת יצירת Software Bill of Materials ל-pipeline של השחרור.
  6. הדרכת צוות – תיעוד התהליך, הגדרת התראות ב-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 ושולטים בניהול רישיונות קוד פתוח, ומבטיחים שמחזור הפיתוח שלכם בטוח ותואם דרישות.