ביליתם שבועיים בניפוי תקלת ייצור — הזרקת SQL שסורק דינמי לא זיהה. נשמע מוכר? אנו משלבים SAST (בדיקת אבטחה סטטית של יישומים) ישירות לתוך צינור ה-CI/CD שלכם: ניתוח קוד מקור ללא ביצוע. הזרקות SQL, XSS, סודות מוטבעים, פונקציות לא בטוחות — אנו תופסים אותם לפני המיזוג. בפרויקט אחד עם 10 מפתחים המשתמשים ב-TypeScript ו-Python, פרסנו את Semgrep ו-CodeQL תוך 3 ימים. תוצאה: 12 נקודות תורפה קריטיות נחסמו בשלב ה-PR, וחוסכו 40% מזמן הבדיקה. אחת מנקודות התורפה שנמצאו הייתה הזרקת SQL דרך מחרוזות תבנית שמנתחים סטטיים לא זיהו עד שיישמנו כללים מותאמים אישית. לאחר הגדרת Semgrep עם כלל לשרשור SQL, שגיאות כאלה נחסמות אוטומטית. צרו קשר כדי שנעריך את הפרויקט שלכם.
אילו נקודות תורפה SAST מזהה?
SAST מכסה את כל OWASP Top Ten: הזרקות SQL, XSS, דה-סריאליזציה לא בטוחה, אימות שבור. לדוגמה, Semgrep תופס שרשור SQL ישיר במחרוזות, בעוד ש-CodeQL עוקב אחר זרימת נתונים עבור SSRF ו-RCE. Gitleaks מוצא מפתחות API, טוקנים וסיסמאות, גם אם הם נשלחו לפני שלוש שנים. בפרויקט אחד מצאנו מפתח AWS שהיה בהיסטוריית ה-git במשך שלוש שנים.
כלי SAST
Semgrep — מהיר, תומך ביותר מ-30 שפות, כללים מותאמים אישית. דוגמה לסריקה בסיסית ולכלל מותאם אישית לזיהוי שרשור SQL ישיר:
# Установка
pip install semgrep
# Сканирование с набором правил для безопасности
semgrep scan --config=p/security-audit \
--config=p/owasp-top-ten \
--config=p/typescript \
--json > semgrep-results.json
# Кастомное правило: поиск прямой конкатенации SQL
cat > rules/sql-injection.yml << 'EOF'
rules:
- id: raw-sql-concatenation
patterns:
- pattern: |
"SELECT ... " + $VAR
- pattern: |
`SELECT ... ${$VAR}`
message: "Potential SQL injection: use parameterized queries"
severity: ERROR
languages: [typescript, javascript]
EOF
semgrep scan --config=rules/sql-injection.yml src/
GitHub Advanced Security (CodeQL) — ניתוח זרימת נתונים לנקודות תורפה מורכבות:
# .github/workflows/codeql.yml
name: CodeQL
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: '0 0 * * 1' # Еженедельно
jobs:
analyze:
runs-on: ubuntu-latest
permissions:
security-events: write
actions: read
strategy:
matrix:
language: [javascript-typescript]
steps:
- uses: actions/checkout@v4
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
queries: security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v3
- name: Analyze
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{ matrix.language }}"
סריקת סודות
# Gitleaks: поиск секретов в коде и истории git
docker run --rm -v $(pwd):/path \
zricethezav/gitleaks:latest detect \
--source /path \
--report-format json \
--report-path /path/gitleaks-report.json
# truffleHog: анализ git истории
trufflehog git file://. --json > secrets-report.json
# GitHub Actions: pre-commit hook на секреты
- name: Check for secrets
uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITLEAKS_LICENSE: ${{ secrets.GITLEAKS_LICENSE }} תוספי אבטחה של ESLint
npm install --save-dev eslint-plugin-security eslint-plugin-no-unsanitized @microsoft/eslint-plugin-sdl
cat > .eslintrc.json << 'EOF'
{
"plugins": ["security", "no-unsanitized", "@microsoft/sdl"],
"extends": [
"plugin:security/recommended",
"plugin:@microsoft/sdl/required"
],
"rules": {
"security/detect-object-injection": "error",
"security/detect-non-literal-regexp": "warn",
"security/detect-possible-timing-attacks": "error",
"no-unsanitized/method": "error",
"no-unsanitized/property": "error"
}
}
EOF
שילוב CI/CD
שלבו את Semgrep ו-Gitleaks בצינור אחד (דוגמה ל-GitHub Actions):
---
# .github/workflows/sast.yml
name: SAST
on: [push, pull_request]
jobs:
combined:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Semgrep
uses: returntocorp/semgrep-action@v1
with:
config: >-
p/security-audit
p/owasp-top-ten
p/typescript
auditOn: push
env:
SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}
- name: Secrets scan (Gitleaks)
uses: gitleaks/gitleaks-action@v2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
השוואת כלי SAST
| כלי | היקף | שפות | מהירות | נקודות תורפה אופייניות |
|---|---|---|---|---|
| Semgrep | AST + התאמת תבניות | 30+ | <1 דקה/10k שורות | SQLi, XSS, סודות מוטבעים |
| CodeQL | ניתוח זרימת נתונים | <10 | 2–5 דקות/10k שורות | SSRF, RCE, מעבר נתיבים |
| Gitleaks | רגקס לסודות | כל | <30 שניות/מאגר | מפתחות API, טוקנים, סיסמאות |
שלבי יישום SAST
| שלב | משך | תוצאה |
|---|---|---|
| ניתוח דרישות | 0.5 ימים | רשימת כלים וכללים |
| הכנת תצורה | יום אחד | קבצי workflow וכללים מותאמים אישית |
| שילוב CI/CD | יום אחד | צינור עובד עם חסימה |
| בדיקה וכיוונון | 0.5 ימים | הסרת חיובי שווא, הגדרת ספים |
| הדרכת צוות | שעה אחת | סדנה לפירוש תוצאות |
כיצד לפרש תוצאות SAST?
כל אזהרה כוללת תיאור נקודת תורפה, שורת קוד ומחסנית קריאות. HIGH ו-CRITICAL חוסמים PRs — יש לתקן אותם מיד. WARNING ו-INFO נכנסים ל-backlog ומשויכים לבעל הקוד. אנו ממליצים על טריוז' שבועי של ממצאים חדשים. זה מפחית נקודות תורפה מתעלמות ושומר על קוד נקי.
כיצד להגדיר SAST ב-CI/CD תוך 1–2 ימים?
אנו מחברים את הכלים הנבחרים למאגר שלכם: יוצרים קובץ workflow, מגדירים כללים לסטack שלכם (React, Node, Python — מושכים ערכות מוכנות). לאחר מכן אנו מכווננים ספי חסימה: HIGH ו-CRITICAL מכשילים את הבנייה; כל השאר נכנס ל-backlog. הצוות שלכם מקבל דוח דרך לשונית האבטחה של GitHub או לוח המחוונים של Semgrep.
למה Semgrep על פני סקריפטים מותאמים אישית?
רגקסים מותאמים אישית נכשלים על קוד מוסתר וחסרי הקשר. Semgrep מנתח את ה-AST — הוא מבחין בין # Установка pip install semgrep # Сканирование с набором правил для безопасности semgrep scan --config=p/security-audit \ --config=p/owasp-top-ten \ --config=p/typescript \ --json > semgrep-results.json # Кастомное правило: поиск прямой конкатенации SQL cat > rules/sql-injection.yml << 'EOF' rules: - id: raw-sql-concatenation patterns: - pattern: | "SELECT ... " + $VAR - pattern: | `SELECT ... ${$VAR}` message: "Potential SQL injection: use parameterized queries" severity: ERROR languages: [typescript, javascript] EOF semgrep scan --config=rules/sql-injection.yml src/ ל-# .github/workflows/codeql.yml name: CodeQL on: push: branches: [main] pull_request: branches: [main] schedule: - cron: '0 0 * * 1' # Еженедельно jobs: analyze: runs-on: ubuntu-latest permissions: security-events: write actions: read strategy: matrix: language: [javascript-typescript] steps: - uses: actions/checkout@v4 - name: Initialize CodeQL uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} queries: security-and-quality - name: Autobuild uses: github/codeql-action/autobuild@v3 - name: Analyze uses: github/codeql-action/analyze@v3 with: category: "/language:${{ matrix.language }}" . בפרויקטים שלנו, זה מפחית חיובי שווא ב-40% בהשוואה לגישות מבוססות grep. בנוסף, כללים מותאמים אישית נכתבים תוך 15 דקות ומיושמים על מאות קבצים.
מה כלול בהגדרת SAST
- בחירה והתקנה של כלי אחד או יותר (Semgrep/CodeQL/Gitleaks)
- התאמת כללים לסטack הטכנולוגי שלכם
- שילוב ב-CI/CD (GitHub Actions, GitLab CI, Jenkins)
- תיעוד לפירוש תוצאות
- הדרכת צוות (סדנה של שעה)
- שבועיים של תמיכה לאחר הפריסה
עם ניסיון של 5+ שנים ו-50+ פרויקטים, הגדרת SAST מתבצעת ללא הפרעות. אנו מבטיחים שנקודות תורפה קריטיות נחסמות לפני המיזוג. צרו קשר כדי שנעריך את הפרויקט שלכם — נבצע הערכה תוך יום אחד.
כלל SAST: אנו לא חוסמים PRs על כל אזהרה, רק על HIGH ו-CRITICAL. השאר נכנסים ל-backlog של חוב אבטחה.







