klg-asutk-app/docs/SECURITY_AUDIT.md
Yuriy 1ec7f62a03 CI/CD security, architecture doc, monitoring, security audit
- .github/workflows/security.yml: npm audit, pip-audit, gitleaks, dependency-review
- .github/workflows/ci.yml: lint required, ENABLE_DEV_AUTH/DEV_TOKEN for tests
- .gitleaks.toml: secret scan config and allowlist
- docs/ARCHITECTURE.md: high-level design, layers, auth, deployment
- docs/ops/MONITORING.md: Prometheus, health, alerting, Grafana
- docs/SECURITY_AUDIT.md: audit tools and procedures (ZAP, Bandit, Trivy)
- config/prometheus.yml: example scrape config
- README: CI/CD and docs links

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-14 21:56:02 +03:00

6.3 KiB
Raw Permalink Blame History

Security-аудит: инструменты и процедуры

Рекомендации по проведению проверок безопасности с помощью внешних и встроенных инструментов.


1. Инструменты, встроенные в CI

В репозитории настроен workflow .github/workflows/security.yml, который запускается при push в main, при pull request в main и по расписанию (еженедельно).

1.1 npm audit (Frontend)

  • Что проверяет: известные уязвимости в зависимостях npm.
  • В CI: job npm-audit, уровень --audit-level=high.
  • Локально:
    npm audit
    npm audit --audit-level=high   # только high/critical
    npm audit fix                 # автоматическое обновление, с осторожностью
    

1.2 pip-audit (Backend)

  • Что проверяет: уязвимости в Python-пакетах (аналог safety).
  • В CI: job pip-audit, зависимости из backend/requirements.txt.
  • Локально:
    pip install pip-audit
    cd backend && pip-audit -r requirements.txt
    

1.3 Gitleaks (сканирование секретов)

  • Что проверяет: утечка секретов и ключей в коде и истории коммитов.
  • В CI: job secret-scan, конфиг .gitleaks.toml (allowlist для примеров и тестов).
  • Локально:
    docker run --rm -v "$(pwd):/path" zricethezav/gitleaks:latest detect --source /path
    
    или установить gitleaks и выполнить gitleaks detect.

1.4 Dependency Review (Pull Request)

  • При открытии PR запускается actions/dependency-review-action: проверка добавленных зависимостей на известные уязвимости.

2. Дополнительные проверки (вручную или отдельным job)

2.1 OWASP ZAP (базовое сканирование веб-приложения)

Подходит для проверки фронтенда и API на типовые уязвимости (XSS, инъекции, небезопасные заголовки).

Базовый запуск (Docker):

# Запустить приложение (frontend + backend), затем:
docker run -t --rm -v $(pwd):/zap/wrk:rw \
  -u $(id -u):$(id -g) \
  ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \
  -t http://host.docker.internal:3000 \
  -r zap_report.html

Для API:

docker run -t --rm -v $(pwd):/zap/wrk:rw \
  ghcr.io/zaproxy/zaproxy:stable zap-baseline.py \
  -t http://host.docker.internal:8000/docs \
  -r zap_api_report.html

Результаты в zap_report.html / zap_api_report.html. Критичные и высокие риски нужно разбирать и устранять.

2.2 SAST (статический анализ кода)

  • Frontend: в CI уже используется ESLint (в т.ч. правила безопасности); при необходимости можно добавить eslint-plugin-security или SonarQube/SonarCloud.
  • Backend: можно подключить Bandit (pip install bandit, bandit -r backend/app) или Semgrep; при необходимости — отдельный job в CI.

Пример Bandit (локально):

pip install bandit
cd backend && bandit -r app -ll

2.3 Контейнеры (образы Docker)

  • Сканирование образов на уязвимости: Trivy, Snyk, docker scout.
  • Пример Trivy:
    docker build -t klg-backend:latest ./backend
    trivy image klg-backend:latest
    

3. Регулярность проверок

Проверка Частота Где
npm audit, pip-audit, gitleaks При каждом push/PR в main + еженедельно GitHub Actions
Dependency Review Каждый PR в main GitHub Actions
OWASP ZAP Перед релизом или ежеквартально Вручную / отдельный job
SAST (Bandit/Semgrep) По желанию в CI или перед релизом Вручную / job
Сканирование образов (Trivy) При сборке образов или перед деплоем Вручную / job

4. Что делать при обнаружении уязвимости

  1. Критичная/высокая в зависимостях: обновить пакет до безопасной версии или найти обход (patch/workaround); при необходимости временно задокументировать риск.
  2. Секрет в репозитории: считать секрет скомпрометированным, сменить его, удалить из истории (git filter-branch / BFG) или использовать allowlist в gitleaks только для нечувствительных примеров.
  3. Уязвимость в коде (ZAP, SAST): исправить по рекомендациям инструмента и перепроверить.
  4. Не создавать публичные issue с детальным описанием уязвимости до её устранения; отчёт направлять ответственным за безопасность (см. SECURITY.md).

5. Чек-лист перед релизом

  • npm audit и pip-audit без критичных/высоких рисков или риски приняты и задокументированы.
  • Gitleaks не находит новых секретов (с учётом allowlist).
  • Базовое сканирование OWASP ZAP выполнено, критичные находки устранены.
  • Образы Docker отсканированы (Trivy/Snyk), критичные уязвимости устранены или приняты.

© АО «REFLY» — Разработчик АСУ ТК КЛГ