- .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>
6.3 KiB
6.3 KiB
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 для примеров и тестов). - Локально:
или установить gitleaks и выполнитьdocker run --rm -v "$(pwd):/path" zricethezav/gitleaks:latest detect --source /pathgitleaks 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. Что делать при обнаружении уязвимости
- Критичная/высокая в зависимостях: обновить пакет до безопасной версии или найти обход (patch/workaround); при необходимости временно задокументировать риск.
- Секрет в репозитории: считать секрет скомпрометированным, сменить его, удалить из истории (git filter-branch / BFG) или использовать allowlist в gitleaks только для нечувствительных примеров.
- Уязвимость в коде (ZAP, SAST): исправить по рекомендациям инструмента и перепроверить.
- Не создавать публичные issue с детальным описанием уязвимости до её устранения; отчёт направлять ответственным за безопасность (см. SECURITY.md).
5. Чек-лист перед релизом
npm auditиpip-auditбез критичных/высоких рисков или риски приняты и задокументированы.- Gitleaks не находит новых секретов (с учётом allowlist).
- Базовое сканирование OWASP ZAP выполнено, критичные находки устранены.
- Образы Docker отсканированы (Trivy/Snyk), критичные уязвимости устранены или приняты.
© АО «REFLY» — Разработчик АСУ ТК КЛГ