first commit

This commit is contained in:
brusnitsyn
2026-06-24 17:20:43 +09:00
commit 43499acf1c
165 changed files with 25929 additions and 0 deletions

101
docs/security/checklist.md Normal file
View File

@@ -0,0 +1,101 @@
# Чек-лист соответствия ФСТЭК №21 — УЗ-1 (К1)
Статусы: ✅ реализовано в коде · 🔧 требует настройки при развёртывании ·
🏛 инфраструктурная/организационная мера · ☐ не реализовано
## 1. Идентификация и аутентификация (ИАФ)
- ✅ ИАФ.1 Идентификация и аутентификация пользователей
- ✅ ИАФ.2 Управление идентификаторами (уникальность, soft delete, блокировка)
- ✅ ИАФ.3 Пароль ≥ 12 символов, сложность
- ✅ ИАФ.3 Запрет повтора последних 5 паролей
- ✅ ИАФ.3 Смена пароля каждые 90 дней
- ✅ ИАФ.4 Многофакторная аутентификация (TOTP)
- ✅🔧 ИАФ.5 Защита аутентификации при передаче (HTTPS + HSTS)
- ✅ ИАФ.6 Блокировка после 5 неудачных попыток
## 2. Управление доступом (УПД)
- ✅ УПД.1 Управление учётными записями
- ✅ УПД.2 Управление доступом к объектам (Policies для ПДн)
- ✅ УПД.4 Разделение ролей (admin / operator / auditor / user)
- ✅ УПД.5 Принцип наименьших привилегий
- ✅ УПД.6 Ограничение неудачных попыток
- ✅🔧 УПД.13 Контроль доступа к функциям управления
## 3. Ограничение программной среды (ОПС)
- 🔧 ОПС.1 Управление установкой ПО (зафиксированный `composer.lock`)
- 🔧 ОПС.2 Запрет неавторизованных изменений (CI/CD контроль целостности)
- 🔧 ОДТ.3 Контроль средств отладки (`APP_DEBUG=false`)
## 4. Защита машинных носителей (ЗНИ)
- ✅ ЗНИ Шифрование полей ПДн на уровне приложения
- 🏛 ЗНИ.1 Полнодисковое шифрование (LUKS/VeraCrypt)
- 🏛 ЗНИ.3 Уничтожение данных при выводе из эксплуатации
## 5. Регистрация событий безопасности (РСБ)
- ✅ РСБ.1 Перечень регистрируемых событий определён
- ✅ РСБ.2 Регистрация входа/выхода
- ✅ РСБ.2 Регистрация действий с ПДн (CRUD)
- ✅ РСБ.2 Журнал содержит: время, пользователя, IP, объект, результат
- ✅🔧 РСБ.3 Журналы недоступны для изменения (отдельная БД, права INSERT)
- ✅ РСБ.3 Целостность журналов (HMAC-подпись + хеш-цепочка)
- ✅🔧 РСБ.4 Защита от переполнения (ротация `audit:purge` + мониторинг)
- 🔧 РСБ.7 Мониторинг событий в реальном времени (SIEM)
- 🔧 РСБ.8 Хранение журналов ≥ 3 лет
## 6. Антивирусная защита (ЗАВ)
- 🏛 ЗАВ.1 Антивирус на сервере (ClamAV/сертифицированное СЗИ)
- 🏛 ЗАВ.2 Проверка загружаемых файлов
## 7. Обнаружение вторжений (СОВ)
- 🏛 СОВ.1 Система обнаружения вторжений (Suricata/Snort/NGFW)
- 🏛 СОВ.2 Обновление баз СОВ
## 8. Обеспечение целостности (ОЦЛ)
- 🔧 ОЦЛ.1 Контроль целостности ПО (хеши/CI)
- ✅ ОЦЛ.2 Контроль целостности данных (`checksum` в таблицах ПДн)
- 🏛 ОЦЛ.6 Ограничение запуска программ (AppArmor/SELinux)
## 9. Защита среды виртуализации (ЗСВ) — при наличии
- 🏛 ЗСВ.1 Идентификация ВМ
- 🔧 ЗСВ.3 Изоляция БД (отдельные БД приложения и журнала)
## 10. Защита информационной системы (ЗИС)
- 🔧🏛 ЗИС.1 Сегментация (DMZ для веб, внутренний сегмент для БД)
- 🔧 ЗИС.2 Защита периметра (Nginx + firewall + fail2ban)
- 🔧 ЗИС.3 Исключение несанкционированного подключения (SSH по ключам)
- ✅🔧 ЗИС.9 Защита от НСД при передаче (TLS 1.2+)
- 🔧 ЗИС.16 Сертифицированные СКЗИ (КриптоПро для ГИС)
## 11. Реагирование на инциденты (ИНЦ)
- 🔧 ИНЦ.1 Обнаружение и регистрация инцидентов (алерты/SIEM)
- 🏛 ИНЦ.2 Регламент реагирования (документ)
- 🏛 ИНЦ.3 Уведомление Роскомнадзора в течение 24 ч
- 🏛 ИНЦ.5 Анализ инцидентов, устранение причин
## 12. Управление конфигурацией (УКФ)
- 🔧🏛 УКФ.1 Базовая конфигурация (hardening Linux/PHP, CIS)
- 🔧 УКФ.2 Контроль изменений конфигурации (Git + CI)
- ✅ УКФ.4 Анализ уязвимостей (`composer audit`, CI)
## Приоритеты внедрения
**Очередь 1 (критично):** `APP_DEBUG=false`, TLS+HSTS, MFA, шифрование ПДн,
базовое журналирование — **реализовано в шаблоне**.
**Очередь 2 (высокий):** RBAC, парольная политика, блокировка, HMAC-подпись
журнала — **реализовано в шаблоне**.
**Очередь 3 (инфраструктура):** антивирус, сегментация сети, SIEM, регламенты —
настраивается при развёртывании (см. [compliance.md](compliance.md), [../org/](../org/)).

View File

@@ -0,0 +1,74 @@
# Сопоставление мер ФСТЭК №21 с реализацией
Таблица связывает меры защиты приказа ФСТЭК России №21 (УЗ-1 / К1) с конкретными
артефактами шаблона. Статусы: ✅ реализовано в коде · 🔧 требует настройки при
развёртывании · 🏛 инфраструктурная/организационная мера (вне кода).
## ИАФ — Идентификация и аутентификация
| Мера | Где реализовано | Статус |
|---|---|---|
| ИАФ.1 Идентификация/аутентификация | `AuthenticatedSessionController`, `LoginRequest` | ✅ |
| ИАФ.2 Управление идентификаторами | уникальный `users.email`, `SoftDeletes`, `is_blocked` | ✅ |
| ИАФ.3 Парольная политика | `config/security.php`, `PasswordPolicy`, `PasswordNotReused`, `PasswordManager`, `EnsurePasswordIsNotExpired` | ✅ |
| ИАФ.4 Многофакторная аутентификация | `TwoFactorService`, `TwoFactorController`, `EnsureMfaIsVerified` | ✅ |
| ИАФ.5 Защита аутентификации при передаче | `ForceHttps`, HSTS, secure-cookie | ✅ / 🔧 |
| ИАФ.6 Блокировка после неудачных попыток | `LoginRequest` (lockout + событие `auth.locked`) | ✅ |
## УПД — Управление доступом
| Мера | Где реализовано | Статус |
|---|---|---|
| УПД.1 Управление учётными записями | `is_blocked`, `user:create-admin`, soft delete | ✅ |
| УПД.2 Доступ к объектам (ПДн) | `PersonalDataPolicy` | ✅ |
| УПД.4 Разделение ролей | `RolesAndPermissionsSeeder` (admin/operator/auditor/user) | ✅ |
| УПД.5 Наименьшие привилегии | права по ролям, явный `$fillable` | ✅ |
| УПД.6 Ограничение попыток | lockout, `RateLimiter` | ✅ |
| УПД.13 Контроль функций управления | права `users.manage`/`roles.manage`, `IpWhitelist` | ✅ / 🔧 |
## ЗНИ / ОЦЛ — Защита носителей и контроль целостности
| Мера | Где реализовано | Статус |
|---|---|---|
| ЗНИ Шифрование ПДн | `HasPdnEncryption`, `PdnCipher` (AES/ГОСТ) | ✅ |
| ЗНИ.1 Шифрование носителей | полнодисковое шифрование сервера (LUKS) | 🏛 |
| ОЦЛ.1 Контроль целостности ПО | `composer.lock`, `composer validate`, CI | ✅ / 🔧 |
| ОЦЛ.2 Контроль целостности данных | `checksum` в `PersonalData`, `integrityValid()` | ✅ |
| ОЦЛ.6 Ограничение запуска ПО | AppArmor/SELinux профиль для PHP-FPM | 🏛 |
## РСБ — Регистрация событий безопасности
| Мера | Где реализовано | Статус |
|---|---|---|
| РСБ.1 Перечень событий | `config/audit.php` (`events`) | ✅ |
| РСБ.2 Регистрация событий | `AuditService`, `AuthEventSubscriber`, `AuditLog` middleware, Policy | ✅ |
| РСБ.3 Защита журналов | отдельное соединение `audit`, HMAC + хеш-цепочка, `audit_grants.sql` | ✅ / 🔧 |
| РСБ.4 Защита от переполнения | `audit:purge`, мониторинг диска | ✅ / 🔧 |
| РСБ.7 Мониторинг в реальном времени | канал SIEM (`AUDIT_SIEM_ENABLED`) | 🔧 |
| РСБ.8 Срок хранения ≥ 3 лет | `AUDIT_RETENTION_DAYS=1095` | 🔧 |
## ЗИС — Защита информационной системы
| Мера | Где реализовано | Статус |
|---|---|---|
| ЗИС.1 Сегментация | `deploy/docker-compose.yml` (internal-сеть), DMZ | 🔧 / 🏛 |
| ЗИС.2 Защита периметра | Nginx, firewall, `IpWhitelist`, fail2ban | 🔧 |
| ЗИС.9 Защита при передаче (TLS) | `ForceHttps`, `deploy/nginx/app.conf` (TLS 1.2/1.3) | ✅ / 🔧 |
| ЗИС.16 Сертифицированные СКЗИ | драйвер ГОСТ (`GostCipher`), КриптоПро | 🔧 |
| Заголовки безопасности, CSP, XSS, CSRF | `SecurityHeaders`, Blade-экранирование, VerifyCsrfToken | ✅ |
## ОДТ / УКФ — Обеспечение доступности, конфигурация
| Мера | Где реализовано | Статус |
|---|---|---|
| ОДТ.3 Контроль средств отладки | `APP_DEBUG=false` в prod | 🔧 |
| УКФ.1 Базовая конфигурация (hardening) | `deploy/Dockerfile` (php ini), CIS Benchmark | 🔧 / 🏛 |
| УКФ.2 Контроль изменений конфигурации | Git + CI, запрет ручных изменений | 🔧 |
| УКФ.4 Анализ уязвимостей | `security:audit-deps`, `.github/workflows/security.yml` | ✅ |
## Меры вне кода (инфраструктура/организация)
ЗАВ (антивирус, ClamAV), СОВ (Suricata/Snort), ЗИС.1 (физическая сегментация),
ЗСВ (защита виртуализации), ИНЦ (реагирование на инциденты), УКФ.1 (hardening ОС)
— реализуются на уровне инфраструктуры и регламентов. Шаблоны организационных
документов: [../org/](../org/).

View File

@@ -0,0 +1,50 @@
# Криптографическая защита ПДн по ГОСТ (ФСБ №378)
## Зачем
Встроенный в Laravel шифратор использует **AES-256-GCM** — это надёжный
международный алгоритм, но он **не является сертифицированным в России СКЗИ**.
Для государственных ИСПДн и при выполнении требований приказа ФСБ России №378
криптографическая защита ПДн должна выполняться сертифицированными СКЗИ,
реализующими **ГОСТ Р 34.12-2015 («Кузнечик»/«Магма»)** и ГОСТ Р 34.13-2015.
## Архитектура шаблона
Шифрование изолировано за интерфейсом `App\Services\Crypto\PdnCipher`:
- `LaravelAesCipher` — реализация по умолчанию (AES-256-GCM);
- `GostCipher`**заглушка** с точкой интеграции сертифицированного СКЗИ.
Драйвер выбирается параметром `SECURITY_PDN_CIPHER_DRIVER` (`laravel` | `gost`)
в `config/security.php`. Модели не зависят от конкретного алгоритма — они
используют трейт `HasPdnEncryption`, который обращается к `PdnCipher`.
## Как подключить КриптоПро CSP / VipNet
1. Установите СКЗИ на сервер (КриптоПро CSP с действующей лицензией, или ПАК).
2. Создайте ключевой контейнер и задайте параметры в `.env`:
```dotenv
SECURITY_PDN_CIPHER_DRIVER=gost
SECURITY_GOST_BINARY=/opt/cprocsp/bin/amd64/csptest
SECURITY_GOST_CONTAINER="\\\\.\\HDIMAGE\\pdn-key"
```
3. Реализуйте методы `encrypt()` / `decrypt()` в `App\Services\Crypto\GostCipher`.
Возможные способы интеграции:
- вызов CLI КриптоПро (`csptest`, `cryptcp`) через `Symfony\Component\Process`;
- PHP-расширение с поддержкой ГОСТ (engine `gost` для OpenSSL, при наличии);
- gRPC/REST-шлюз к выделенному криптосервису (HSM/КриптоПро DSS).
## Обязательные требования к реализации
- Ключи СКЗИ хранятся в защищённом носителе/контейнере, **не** в `.env` и не в БД.
- Разделение ключей: ключ ПДн ≠ `APP_KEY``AUDIT_HMAC_KEY``SECURITY_PSEUDONYM_KEY`.
- Перешифрование при компрометации/смене ключа — предусмотрите миграционную
команду (artisan) для перешифровки полей.
- Используйте `GostCipher::isAvailable()` в health-check перед включением драйвера.
- Применение конкретного СКЗИ должно соответствовать его формуляру и классу КС.
## Важное предупреждение
Не оставляйте `SECURITY_PDN_CIPHER_DRIVER=gost` с нереализованным `GostCipher`
методы выбрасывают исключение, что прервёт работу с ПДн. Это сделано намеренно,
чтобы исключить ложное ощущение сертифицированной защиты.