Карта потенциальных утечек — это структурированное представление всех путей, по которым конфиденциальные данные могут покинуть систему до того, как начнётся активное тестирование. Она не заменяет пентест или сканирование уязвимостей, но определяет, где искать проблемы в первую очередь и какие сценарии проверять приоритетнее. Без такой карты тестирование часто превращается в хаотичный поиск «иголки в стоге сена», а критичные векторы остаются непроверенными.
Главный принцип: карта строится не на угадывании, а на анализе потоков данных, границ доверия и поверхности атаки конкретной системы. В этой статье — пошаговый алгоритм создания такой карты, критерии полноты и способы проверить, что ничего существенного не упущено.
- Зачем нужна карта до начала тестирования
- Входные данные: что собрать перед стартом
- Пошаговый алгоритм построения карты
- Шаг 1. Инвентаризация активов-носителей данных
- Шаг 2. Определение границ доверия и переходов
- Шаг 3. Моделирование векторов утечки для каждого актива и перехода
- Шаг 4. Приоритизация векторов (Risk Scoring)
- Шаг 5. Формирование артефакта карты
- Интеграция карты в процесс тестирования
- Типичные ошибки при составлении карты
- Сценарии: как адаптировать под контекст
- Микросервисная архитектура в Kubernetes
- Монолит с легаси кодом
- Мобильное приложение + Backend
- SaaS с мультитенантностью
- Инструменты и автоматизация
- Практический чек-лист готовности к тестированию
- Что делать после тестирования
- Ответы на частые вопросы
- Нужна ли карта для небольшого проекта / MVP?
- Кто должен владеть картой?
- Как часто обновлять?
- Чем карта утечек отличается от Threat Model?
- Можно ли использовать готовые шаблоны (OWASP ASVS, NIST 800-53)?
- Главный принцип: карта — это процесс, не документ
Зачем нужна карта до начала тестирования
Тестирование безопасности без карты утечек работает по остаточному принципу: проверяют то, что успевают, или то, что покрывают стандартные чек-листы. Карта меняет подход с реактивного на целевой.
- Фокус ресурсов. Время тестирования ограничено. Карта показывает, какие модули, интеграции и хранилища несут максимальный риск утечки, и позволяет выделить им больше внимания.
- Покрытие бизнес-рисков. Стандартные сканеры ищут известные уязвимости (CVE, OWASP Top 10). Карта утечек учитывает бизнес-логику: например, экспорт отчётов в CSV менеджером, API для партнёров, бэкапы в облачное хранилище — векторы, которые сканеры часто пропускают.
- База для threat modeling. Карта становится входом для STRIDE, PASTA или собственной методологии моделирования угроз. Без неё моделирование строится на предположениях.
- Коммуникация с бизнесом. Карта на языке «данные — путь — риск» понятна владельцам продукта, юристам и аудиторам. Это упрощает согласование скоупа тестирования и обоснование бюджета.
Входные данные: что собрать перед стартом
Качество карты зависит от полноты исходной информации. Не начинайте рисовать схемы, пока не соберёте минимум:
- Схемы архитектуры. Актуальные диаграммы контейнеров, последовательности, развёртывания (C4 model уровни 1–3). Если диаграмм нет — это первый пункт действия: восстановить или нарисовать по коду/инфраструктуре.
- Реестр чувствительных данных. Что считается секретом: PII, платёжные данные, медицинские записи, коммерческие тайны, токены доступа, ключи шифрования. Для каждого типа — классификация (критичность, регуляторные требования).
- Карта потоков данных (Data Flow Diagram). Откуда данные приходят, где обрабатываются, куда уходят: внешние API, внутренние микросервисы, очереди сообщений, БД, файловые хранилища, логи, метрики, бэкапы.
- Границы доверия. Разделение на зоны: публичный интернет, DMZ, внутренняя сеть, привилегированные сегменты, управляемые/неуправляемые устройства пользователей.
- Список интеграций и сторонних сервисов. Платёжные шлюзы, CRM, аналитика, email/SMS-провайдеры, облачные хранилища, CI/CD, системы мониторинга.
- Модель доступа и роли. Кто (пользователи, сервисы, админы, саппорт) имеет доступ к каким данным и через какие интерфейсы.
- История инцидентов и багов. Предыдущие утечки, близкие к инцидентам ситуации, находки баг-баунти — они указывают на слабые места, которые стандартные схемы не показывают.
Если часть данных недоступна, отметьте пробелы в карте как риск: «нет актуальной схемы интеграции с платёжным шлюзом — вектор не проверен».
Пошаговый алгоритм построения карты
Шаг 1. Инвентаризация активов-носителей данных
Пройдитесь по DFD и выпишите каждый компонент, который хранит, обрабатывает или передаёт чувствительные данные. Не ограничивайтесь БД. Включите:
- Оперативные БД и реплики (включая read-only для аналитики).
- Кэши (Redis, Memcached) — часто хранят сессии, токены, PII без TTL и шифрования.
- Очереди сообщений (Kafka, RabbitMQ, SQS) — данные могут жить там часами.
- Файловые хранилища (S3, Azure Blob, NFS) — загрузки пользователей, выгрузки отчётов, бэкапы.
- Логи приложений, веб-серверов, WAF, балансировщиков — часто попадают заголовки авторизации, параметры запросов, тела ответов.
- Системы мониторинга и APM (Datadog, New Relic, Sentry) — могут собирать полные запросы/ответы.
- CI/CD артефакты — дампы БД в тестах, переменные окружения в логах пайплайнов.
- Локальные файлы разработчиков и дампы продакшена в нижних средах.
- Email/SMS/пуш-шлюзы — передача данных третьим сторонам.
- Браузер пользователя — localStorage, sessionStorage, cookies, IndexedDB, кэш Service Worker.
Для каждого актива укажите: тип данных, классификацию, владельца, среду (prod/stage/dev), шифрование (at rest / in transit), доступ (кто читает/пишет).
Шаг 2. Определение границ доверия и переходов
Нанесите на схему границы доверия. Каждый переход данных через границу — потенциальный вектор утечки. Типичные границы:
- Интернет ↔ Публичный API (WAF, API Gateway).
- Публичный API ↔ Внутренние микросервисы (service mesh, mTLS).
- Микросервисы ↔ БД (сетевая сегментация, учётные записи БД).
- Внутренняя сеть ↔ Облачные сервисы (S3, внешние API).
- CI/CD ↔ Продакшн-среда (секреты, артефакты).
- Админка/саппорт-панель ↔ Данные пользователей (RBAC, аудит).
- Разработчик/ноутбук ↔ Репозиторий/Среда разработки (код, дампы, секреты).
Для каждого перехода зафиксируйте: протокол, аутентификацию, шифрование, валидацию, логирование, rate limiting, наличие DLP/WAF.
Шаг 3. Моделирование векторов утечки для каждого актива и перехода
Примените структурированный подход (вариация STRIDE для утечек) к каждому активу и переходу. Вопросы-триггеры:
| Категория вектора | Вопросы для анализа | Примеры реализации |
|---|---|---|
| Нарушение контроля доступа | Кто может прочитать/записать? Есть ли RBAC/ABAC? Проверяются ли права на уровне строк/объектов (IDOR)? Работает ли принцип минимальных привилегий для сервисных аккаунтов? | API возвращает данные чужого пользователя при подмене ID; сервисный аккаунт с правами админа читает все таблицы; S3 бакет с public read. |
| Утечка через логи и телеметрию | Что пишется в логи: заголовки Authorization, куки, тела запросов/ответов, PII в URL? Куда уходят логи: SIEM, облачные APM, файлы на диске? Кто имеет доступ к логам? | JWT в access-логах nginx; полный JSON тела запроса в Sentry; номер карты в URL параметре, попавший в Google Analytics. |
| Небезопасная передача | Есть ли TLS 1.2+ везде? Проверяется ли сертификат (pinning, CA)? Используется ли mTLS между сервисами? Есть ли downgrade атаки? Передаются ли секреты в URL, Referer, query params? | Внутренний API по HTTP; токен в Referer при переходе на внешний сайт; отсутствие HSTS. |
| Утечка через экспорт и интеграции | Какие функции выгрузки: CSV, Excel, PDF, API, email? Есть ли аудит экспорта? Ограничения по объёму/роли? Валидация получателя? Шифрование выгрузки? | Менеджер выгружает базу клиентов в CSV без аудита; вебхук отправляет PII на неверифицированный URL партнёра. |
| Кэширование и браузерные хранилища | Cache-Control заголовки на чувствительных эндпоинтах? Pragma: no-store? Автозаполнение форм отключено? Токены в localStorage vs httpOnly cookies? Service Worker кэш? | Страница профиля кэшируется CDN; токен в localStorage доступен XSS; номер карты в autocomplete. |
| Бэкапы и копии данных | Где хранятся бэкапы? Зашифрованы ли? Кто имеет доступ? Есть ли бэкапы в нижних средах (stage/dev) с продакшн-данными? Snapshots БД, Volume snapshots, экспорты в Data Warehouse. | Незашифрованный дамп БД в S3 без политики жизненного цикла; прод-данные в dev-кластере ClickHouse. |
| Сторонние сервисы и цепочка поставок | Какие данные уходят в SaaS: поддержка, аналитика, почта, чат-боты, AI-ассистенты? Есть ли DPA/SCC? Минимизируются ли данные? Аудит доступа вендора? | Полный текст тикета поддержки с PII в Zendesk; отправка логов с токенами в Datadog; код в GitHub Copilot. |
| Утечка через ошибки и отладку | Возвращаются ли стектрейсы, SQL-запросы, конфиги в ответах ошибок? Включён ли debug режим в проде? Есть ли /actuator, /metrics, /health с чувствительной инфой? | 500 error с полным SQL и данными пользователя; Spring Boot Actuator /env показывает секреты. |
| Физические и боковые каналы | Доступ к дискам, памяти, сетевому трафику внутри доверенной зоны? Side-channel атаки (тайминг, кэш)? Дамп памяти процесса (core dumps, k8s ephemeral storage)? | Ключ шифрования в переменной окружения, видимый в /proc//environ; секрет в образе Docker. |
Результат шага — список векторов в формате: Актив → Граница/Процесс → Вектор утечки → Условия реализации → Потенциальный ущерб.
Шаг 4. Приоритизация векторов (Risk Scoring)
Не все векторы равны. Оцените каждый по трём измерениям (шкала 1–5):
- Вероятность реализации (Likelihood). Насколько легко эксплуатировать: публичный эндпоинт без авторизации = 5; нужен компрометированный админский аккаунт + доступ к VPN = 2.
- Влияние на бизнес (Impact). Объём и критичность данных: утечка одной записи PII = 2; полная база клиентов с платёжными данными = 5; утечка мастер-ключа шифрования = 5.
- Обнаруживаемость (Detectability). Увидит ли система/команду утечку: аудит логов + алерты = 1; никакого логирования, данные уходят в сторонний SaaS = 5.
Риск = Likelihood × Impact × Detectability (или сумма, если предпочитаете аддитивную модель). Сортируйте по убыванию. Топ-20% векторов — фокус тестирования. Остальные — в реестр для периодической перепроверки.
Шаг 5. Формирование артефакта карты
Карта должна быть живым документом, а не разовой картинкой. Удобный формат — таблица (Confluence, Notion, Git wiki, Excel) со следующими колонками:
- ID вектора (например, LEAK-001).
- Актив / Компонент.
- Тип данных (классификация).
- Граница доверия / Поток.
- Описание вектора (как может произойти утечка).
- Предусловия (что нужно злоумышленнику).
- Оценка риска (L/I/D, сумма).
- Существующие контролы (WAF, шифрование, RBAC, аудит, DLP).
- Пробелы в контролах (что не защищает).
- Тест-кейс для верификации (как проверить при тестировании).
- Статус (Open / Mitigated / Accepted / False Positive).
- Ответственный / Дедлайн митигации.
Дополнительно: визуальная схема (Data Flow Diagram с отмеченными векторами) — для коммуникации с нетехническими стейкхолдерами.
Интеграция карты в процесс тестирования
Карта бесполезна, если она лежит в вики. Встраивайте её в рабочие процессы:
- Скоуп пентеста / баг-баунти. Передайте топовые векторы как приоритетные зоны. Исключите из скоупа векторы со статусом Accepted (с обоснованием).
- Чек-листы QA и автотестов. Для каждого вектора с тест-кейсом добавьте автотест в CI (например: проверка Cache-Control на /api/profile, проверка отсутствия PII в логах стажингового стенда).
- Code Review гейты. PR, затрагивающий актив из карты, требует ревью безопасности или обновления карты.
- Инцидент-менеджмент. При инциденте проверяйте: был ли вектор в карте? Если нет — почему? Обновите карту.
- Ежеквартальный пересмотр. Новые микросервисы, интеграции, изменения классификации данных — триггеры обновления.
Типичные ошибки при составлении карты
- Фокус только на «взломе». Утечки часто происходят через легаitimate функции: экспорт, логи, интеграции, бэкапы. Карта должна покрывать и авторизованные пути выхода данных.
- Игнорирование нижних сред. Stage/dev часто содержат копии прод-данных, но защищены слабее. Векторы через dev-среды — частый сценарий реальных инцидентов.
- Отсутствие контекста данных. «БД пользователей» — недостаточно. Нужно: какие поля (email, хеш пароля, токен смены пароля, номер карты), какая классификация, кто читает.
- Статичная карта. Архитектура меняется еженедельно. Карта без процесса обновления устаревает за месяц.
- Переоценка контролов. «Есть WAF» не значит «защищено от утечки через экспорт CSV». Проверяйте контролы на соответствие конкретному вектору.
- Скрытие принятых рисков. Если бизнес принимает риск (например, логи с PII в SIEM без маскирования, потому что «нужно для отладки») — зафиксируйте это явно со статусом Accepted, владельцем и датой пересмотра.
Сценарии: как адаптировать под контекст
Микросервисная архитектура в Kubernetes
Акцент на: сервис-ту-сервис mTLS, секреты в Vault/SealedSecrets, sidecar-прокси (Envoy) для аудита, egress политики (NetworkPolicy, Cilium), логгирование в stdout → Loki/Elastic — что именно попадает в логи, дампы памяти подов (core dumps), образы контейнеров в реестре (сканирование секретов), RBAC k8s (кто может exec/port-forward/logs).
Монолит с легаси кодом
Акцент на: общие БД без разделения прав, файлы на диске сервера, крон-скрипты выгрузок, общие аккаунты БД, отсутствие аудита на уровне приложения, debug endpoints, старые интеграции по FTP/SFTP, бэкапы на том же сервере.
Мобильное приложение + Backend
Акцент на: хранение токенов/ключей в Keychain/Keystore vs SharedPreferences, certificate pinning, кэширование ответов (NSURLCache, OkHttp cache), логи в консоль (Xcode log, logcat), сторонние SDK (аналитика, краш-репортеры, реклама) — какие данные они собирают, App Transport Security / Network Security Config.
SaaS с мультитенантностью
Акцент на: изоляция данных тенантов на уровне БД (RLS, schema-per-tenant, отдельные БД), экспорт данных тенанта админом другого тенанта, логи с tenant_id, метрики с утечкой данных между тенантами, саппорт-доступ (impersonation), общие очереди/кэши.
Инструменты и автоматизация
Ручная работа с DFD и таблицами масштабируется плохо. Полезные подходы:
- Code-to-DFD генерация. Инструменты вроде Otterize, ArchUnit, кастомные скрипты на основе OpenAPI/Protobuf/gRPC схем — строят черновик DFD из кода.
- SAST/DAST/SCA интеграция. Находки сканеров (hardcoded secrets, insecure config, уязвимые зависимости) коррелируйте с активами карты.
- Cloud asset inventory. AWS Config, GCP Asset Inventory, Azure Resource Graph — экспорт ресурсов с тегами, проверка шифрования, публичного доступа, политик.
- DLP сканирование логов и хранилищ. Регулярные джобы: grep по логам на предмет regex PII/токенов, сканирование S3 на предмет открытых бакетов и PII в файлах.
- Git secrets scanning. TruffleHog, Gitleaks, GitGuardian — в pre-commit и CI для предотвращения утечки секретов в репозиторий.
Автоматизация не заменяет мышление, но снимает рутину инвентаризации и позволяет держать карту актуальной.
Практический чек-лист готовности к тестированию
Перед стартом тестирования (пентест, баг-баунти, внутренний аудит) пройдитесь по списку. Если на любой пункт «нет» — тестирование будет неполным.
- Есть актуальная схема потоков данных (DFD) для тестируемой системы.
- Проведён реестр чувствительных данных с классификацией.
- Все границы доверия отмечены на схеме.
- Для каждого актива и перехода перечислены векторы утечки (минимум по 3–5 на актив).
- Векторы приоритизированы по риску (L/I/D).
- Топ-рисковые векторы имеют конкретные тест-кейсы для верификации.
- Статус каждого вектора: Open / Mitigated / Accepted / False Positive.
- Принятые риски (Accepted) задокументированы с владельцем и датой пересмотра.
- Карта передана команде тестирования / пентестерам как часть скоупа.
- Запланировано обновление карты после тестирования (внести находки, закрыть векторы).
Что делать после тестирования
Тестирование — не финиш, а точка калибровки карты.
- Каждая найденная уязвимость → обновить соответствующий вектор (статус, детали, PoC).
- Новые векторы, обнаруженные тестерами → добавить в карту.
- Векторы, которые не подтвердились → перевести в False Positive с обоснованием (например, «WAF блокирует, проверено в проде»).
- Метрики: % векторов с тест-кейсами, % векторов Mitigated, среднее время закрытия Open векторов.
- Обратная связь в threat modeling: уточнить модели угроз на основе реальных находок.
Ответы на частые вопросы
Нужна ли карта для небольшого проекта / MVP?
Да, но упрощённая. Для MVP достаточно: список 3–5 критичных активов, их потоки данных, 1–2 главные границы доверия, топ-10 векторов. Это занимает 2–4 часа и спасает от утечки при первом публичном релизе.
Кто должен владеть картой?
Product Security / AppSec инженер или техлид команды, отвечающей за безопасность продукта. Не QA (они тестируют), не только CISO (слишком высокий уровень). Владелец — тот, кто может влиять на архитектуру и приоритеты разработки.
Как часто обновлять?
Минимум: при каждом мажорном релизе (новые микросервисы, интеграции, изменение классификации данных) и после каждого инцидента. Идеально — непрерывно через автоматизацию (инвентаризация из кода/клауда) + квартальный ручной ревью.
Чем карта утечек отличается от Threat Model?
Threat Model шире: включает угрозы целостности, доступности, не только конфиденциальности. Карта утечек — фокусный артефакт только на конфиденциальность/утечку данных. Карта часто является входом (input) для Threat Model.
Можно ли использовать готовые шаблоны (OWASP ASVS, NIST 800-53)?
Шаблоны дают чек-листы контролов, но не заменяют анализ вашей архитектуры. Используйте их как справочник «а проверили ли мы это», но карту строьте от ваших данных и потоков.
Главный принцип: карта — это процесс, не документ
Стоимость утечки растёт нелинейно: репутация, штрафы (GDPR до 4% оборота, 152-ФЗ, PCI DSS), потеря клиентов, расследование. Карта потенциальных утечек — самый дешёвый способ снизить эту вероятность до начала дорогого тестирования.
Начните с инвентаризации активов и DFD. Даже неполная карта лучше отсутствия карты. Итерируйте: добавьте векторы, приоритизируйте, передайте тестерам, обновите по результатам. Через 2–3 цикла у вас будет надёжный навигатор для безопасности продукта.
Материал носит информационный характер и не заменяет профессиональную оценку безопасности. Для систем, обрабатывающих платёжные данные, медицинскую информацию, гостайну или критичную инфраструктуру, привлекайте сертифицированных специалистов по информационной безопасности и проводите независимый аудит в соответствии с применимыми стандартами (PCI DSS, ISO 27001, ФСТЭК, ФСБ и др.).
