Ви витратили два тижні на відладку інциденту в продакшені — SQL-ін'єкція, яку не зловив динамічний сканер. Знайома ситуація. Ми впроваджуємо SAST (Static Application Security Testing) прямо в CI/CD: аналіз вихідного коду без виконання. SQL injection, XSS, hardcoded secrets, небезпечні функції — знаходимо до мержу. На одному проєкті з 10 розробниками на TypeScript і Python ми впровадили Semgrep і CodeQL за 3 дні. Результат — 12 критичних уразливостей заблоковано на етапі PR, економія часу на рев'ю — 40%. Одна зі знайдених уразливостей — SQL-ін'єкція через шаблонні рядки, яку не ловили статичні аналізатори до впровадження кастомних правил. Після налаштування Semgrep з правилом на конкатенацію SQL, такі помилки блокуються автоматично. Зв'яжіться з нами для оцінки вашого проєкту.
Які уразливості знаходить SAST?
SAST покриває весь OWASP Top Ten: SQL-ін'єкції, XSS, insecure deserialization, broken authentication. Наприклад, Semgrep ловить пряму конкатенацію SQL у рядках, а CodeQL відстежує потоки даних для SSRF і RCE. Gitleaks знаходить API-ключі, токени та паролі, навіть якщо вони змержені в git-історію. В одному проєкті знайшли AWS-ключ, який був закомічений 3 роки тому.
Інструменти 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 Security плагіни
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 + pattern matching | 30+ | <1 хв/10k LOC | SQLi, XSS, hardcoded secrets |
| CodeQL | Data flow analysis | <10 | 2–5 хв/10k LOC | SSRF, RCE, path traversal |
| Gitleaks | Secrets regex | Будь-які | <30 сек/репо | API keys, tokens, passwords |
Етапи впровадження SAST
| Фаза | Тривалість | Результат |
|---|---|---|
| Аналіз вимог | 0.5 дня | Список інструментів і правил |
| Підготовка конфігів | 1 день | Workflow файли та кастомні правила |
| Інтеграція в CI/CD | 1 день | Працюючий пайплайн з блокуванням |
| Тестування та доналаштування | 0.5 дня | Усунення false positive, порогові значення |
| Навчання команди | 1 година | Воркшоп з інтерпретації результатів |
Як інтерпретувати результати SAST?
Кожне попередження містить опис уразливості, рядок коду та стек викликів. HIGH і CRITICAL блокують PR — їх потрібно виправити негайно. WARNING і INFO потрапляють у backlog і призначаються власнику коду. Ми рекомендуємо проводити щотижневий triage нових знахідок. Це знижує кількість ігнорованих уразливостей і підтримує чистоту кодової бази.
Як налаштувати SAST у CI/CD за 1–2 дні?
Ми підключаємо вибрані інструменти до вашого репозиторію: створюємо workflow файл, налаштовуємо правила під стек (React, Node, Python — підтягуємо готові набори). Потім адаптуємо пороги блокування: HIGH і CRITICAL — фейл білда, все інше — у backlog. Команда отримує звіт у вигляді Security Tab на GitHub або дашборда Semgrep.
Чому Semgrep краще за самописні скрипти?
Самописні регулярки падають на обфускованому коді та не розуміють контекст. Semgrep аналізує AST — розрізняє eval(user_input) і eval(sanitized). У наших проєктах це знижує кількість false positive на 40% порівняно з grep-підходами. Плюс кастомні правила пишуться за 15 хвилин і застосовуються до сотень файлів.
Що входить у налаштування SAST
- Вибір та встановлення одного або кількох інструментів (Semgrep/CodeQL/Gitleaks)
- Адаптація правил під ваш стек технологій
- Інтеграція в CI/CD (GitHub Actions, GitLab CI, Jenkins)
- Документація з інтерпретації результатів
- Навчання команди (1 година воркшоп)
- Підтримка 2 тижні після впровадження
З нашим досвідом 10+ років і 40+ проєктів налаштування SAST виконується без збоїв. Гарантуємо, що критичні уразливості блокуються до мержу. Замовте налаштування SAST сьогодні — оцінимо ваш проєкт за один день.
Правило SAST: не блокуємо PR при кожному попередженні — тільки при HIGH і CRITICAL. Інші — у backlog security debt.







