- .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>
130 lines
6.3 KiB
Markdown
130 lines
6.3 KiB
Markdown
# 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`.
|
||
- **Локально:**
|
||
```bash
|
||
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`.
|
||
- **Локально:**
|
||
```bash
|
||
pip install pip-audit
|
||
cd backend && pip-audit -r requirements.txt
|
||
```
|
||
|
||
### 1.3 Gitleaks (сканирование секретов)
|
||
|
||
- **Что проверяет:** утечка секретов и ключей в коде и истории коммитов.
|
||
- **В CI:** job `secret-scan`, конфиг `.gitleaks.toml` (allowlist для примеров и тестов).
|
||
- **Локально:**
|
||
```bash
|
||
docker run --rm -v "$(pwd):/path" zricethezav/gitleaks:latest detect --source /path
|
||
```
|
||
или установить [gitleaks](https://github.com/gitleaks/gitleaks) и выполнить `gitleaks detect`.
|
||
|
||
### 1.4 Dependency Review (Pull Request)
|
||
|
||
- При открытии PR запускается **actions/dependency-review-action**: проверка добавленных зависимостей на известные уязвимости.
|
||
|
||
---
|
||
|
||
## 2. Дополнительные проверки (вручную или отдельным job)
|
||
|
||
### 2.1 OWASP ZAP (базовое сканирование веб-приложения)
|
||
|
||
Подходит для проверки фронтенда и API на типовые уязвимости (XSS, инъекции, небезопасные заголовки).
|
||
|
||
**Базовый запуск (Docker):**
|
||
|
||
```bash
|
||
# Запустить приложение (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:
|
||
|
||
```bash
|
||
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 (локально):
|
||
|
||
```bash
|
||
pip install bandit
|
||
cd backend && bandit -r app -ll
|
||
```
|
||
|
||
### 2.3 Контейнеры (образы Docker)
|
||
|
||
- Сканирование образов на уязвимости: **Trivy**, **Snyk**, **docker scout**.
|
||
- Пример Trivy:
|
||
```bash
|
||
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](SECURITY.md)).
|
||
|
||
---
|
||
|
||
## 5. Чек-лист перед релизом
|
||
|
||
- [ ] `npm audit` и `pip-audit` без критичных/высоких рисков или риски приняты и задокументированы.
|
||
- [ ] Gitleaks не находит новых секретов (с учётом allowlist).
|
||
- [ ] Базовое сканирование OWASP ZAP выполнено, критичные находки устранены.
|
||
- [ ] Образы Docker отсканированы (Trivy/Snyk), критичные уязвимости устранены или приняты.
|
||
|
||
---
|
||
|
||
© АО «REFLY» — Разработчик АСУ ТК КЛГ
|