first commit
This commit is contained in:
101
docs/security/checklist.md
Normal file
101
docs/security/checklist.md
Normal 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/)).
|
||||
74
docs/security/compliance.md
Normal file
74
docs/security/compliance.md
Normal 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/).
|
||||
50
docs/security/crypto-gost.md
Normal file
50
docs/security/crypto-gost.md
Normal 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` —
|
||||
методы выбрасывают исключение, что прервёт работу с ПДн. Это сделано намеренно,
|
||||
чтобы исключить ложное ощущение сертифицированной защиты.
|
||||
Reference in New Issue
Block a user