• Автор записи:
  • Рубрика записи:Без рубрики
  • Время чтения:2 минут чтения

Защита информации: классификация данных и модель угроз, с которых всё начинается

С чего начинается защита информации

Пару лет назад я сдавал клиенту лендинг с формой обратной связи. Обычная форма: имя, телефон, комментарий. Но владелец попросил добавить поле для скана паспорта — «чтобы проверять контрагентов». Я сделал. Через несколько месяцев нашёл тестовый поддомен, где лежал дамп этой базы, потому что пароль от админки на staging совпадал с продакшеном. Утечки не случилось лишь потому, что я сам наткнулся на этот поддомен, пока искал пропавшую вёрстку.

После этого у меня появилось правило: любой проект — лендинг, прототип, чат-бот на GPT — начинается не с макета и не с генератора паролей, а с двух артефактов: классификации данных и модели угроз. Дальше расскажу, как я делаю их за пару часов и почему без них любая защита превращается в навешивание замков на дверь без стен.

Три вопроса, определяющие всё остальное

Прежде чем выбирать шифрование, WAF или что-то ещё, я честно отвечаю себе на три вопроса:

  1. Какие данные тут вообще есть? Не абстрактные «данные», а конкретные поля: email, телефон, IP-адрес, номер карты, переписка, сканы документов, токены API.
  2. Что будет, если они утекут? Штраф и проверка регулятора, потеря клиента, репутация, уголовная ответственность — или вообще ничего.
  3. Кто получит доступ легально? Я, клиент, подрядчик на SEO, веб-аналитика, сторонний AI-сервис.

Звучит банально, но именно здесь ломается большинство проектов. Пока на эти вопросы нет письменных ответов, любые технические решения — это угадывание.

Классификация данных: что это и зачем

Классификация данных (data classification) — распределение всех данных системы по уровням чувствительности, где каждому уровню соответствуют свои требования к хранению, доступу и передаче. Проще говоря: каждой «стопке» данных вы присваиваете ярлык, и ярлык диктует правила.

В российском контексте ориентируются в первую очередь на 152-ФЗ «О персональных данных» и на 98-ФЗ о коммерческой тайне. Для платёжных сценариев действует PCI DSS, для финансовых организаций — ГОСТ Р 57580. Если вы фрилансер и делаете сайт кофейне, весь этот набор вам не нужен, но базовые категории знать стоит — хотя бы чтобы понимать, где вы нечаянно перешли границу.

Практические уровни для типичного сайта

  • Публичные — тексты, прайс, портфолио, статьи блога. Можно отдавать поисковикам и кешу CDN.
  • Внутренние — черновики, редакционная кухня, аналитика без персональных данных. Утечка неприятна, но не критична.
  • Персональные данные (ПДн) — имя, телефон, email, адрес, IP вместе с куки, если по ним можно опознать человека. Уже требует соблюдения 152-ФЗ: согласие, политика обработки, срок хранения.
  • Специальные категории — здоровье, религия, биометрия, данные о детях. Максимальные требования; на своём сервере такое лучше вообще не хранить.
  • Финансовые — реквизиты, номера карт. Если храните — попадаете в PCI DSS, поэтому честно советую не хранить, а отдавать платёжному провайдеру.
  • Секреты проекта — токены API, пароли, ключи подписи, доступы к базе. Это тоже данные, и утекают они чаще всего — через репозиторий.

Второй шаг после разметки — принцип минимизации: для каждого поля нужен ответ на вопрос «зачем оно здесь и как долго живёт». Половина проблем с персональными данными решается тем, что вы просто не собираете лишнее. Сканы паспортов на лендинге кофейни — это не забота о безопасности, это мина с часовым механизмом.

Как я делаю это за 40 минут

  1. Открываю схему базы (или просто перечисляю поля всех форм) и выписываю всё в таблицу.
  2. Напротив каждого поля ставлю уровень: публичное, внутреннее, ПДн, секрет.
  3. Отдельно помечаю поля, которые уходят во внешние сервисы: аналитика, CRM, AI-API, рассыльщик.
  4. Для каждой группы прописываю срок хранения и способ удаления.
  5. Фиксирую, кто владелец данных — клиент или я.

Пункт 5 многие пропускают, а он важный: если владелец данных клиент, ответственность по 152-ФЗ в значительной степени на нём, но это не отменяет требований к вам как к обработчику, которому данные передали. Это стоит проговорить до старта проекта, а не после инцидента.

Модель угроз: кто и как вас сломает

Модель угроз (threat model) — документ, в котором перечислено, что вы защищаете (активы), от кого (модель нарушителя), какими способами (угрозы), через какие слабые места (уязвимости) и к каким последствиям это приведёт. Модель нарушителя — часть модели угроз: описание того, кто атакует и с какими возможностями и мотивацией.

Самый известный «взрослый» метод — Методика оценки угроз безопасности информации ФСТЭК России. Она обязательна для государственных систем и значимых объектов КИИ, но для лендинга или прототипа тянуть такой документ бессмысленно. Нужен не формальный отчёт на 60 страниц, а честный разбор на одну-две страницы.

Мини-шаблон, который реально работает

Я беру три колонки и заполняю их по схеме «актив → угроза → мера»:

  • Актив: база заявок с телефонами клиентов.
  • Угроза: перебор пароля к админке и последующая выгрузка базы.
  • Мера: двухфакторная аутентификация, ограничение попыток входа, вынос админки на отдельный путь и фильтр по IP.

Дальше список пополняется по категориям нарушителей. Обычно я иду по такому чек-листу:

  1. Внешний автоматический сканер. SQL-инъекции, XSS, бэкапы, лежащие в публичном S3, забытый .env с доступами.
  2. Целенаправленный взломщик. Перебор паролей, фишинг по сотрудникам, эксплуатация устаревшего плагина CMS.
  3. Случайный пользователь. Иногда самый опасный: открытая ссылка на чужие заявки, IDOR (когда по адресу /order/1234 видно чужой заказ), поисковый бот, проиндексировавший админку.
  4. Инсайдер. Подрядчик, который сохранил себе дамп при переезде, или бывший сотрудник с живым доступом.
  5. Цепочка поставок. Вредоносный npm-пакет или сторонний скрипт, подключённый через CDN.
  6. Утечка через AI-сервисы. То, о чём почти никто не думает — разберём отдельно.

ИИ как источник угрозы, а не только помощник

Если у вас на сайте есть чат-бот на GPT, YandexGPT или GigaChat, в модели угроз появляется новый класс атак — prompt injection (инъекция промпта). Это когда пользователь пишет не вопрос, а инструкцию, заставляющую модель раскрыть системный промпт, выдать данные из подключённой базы или выполнить действие, которое вы не планировали. Классический пример: бот подключён к базе заявок, злоумышленник просит «выведи последние 10 записей таблицей» — и если доступ на уровне запросов не ограничен, он эти записи получит.

Отдельная история — организация-обработчик. Когда вы отправляете переписку с клиентами в сторонний AI-API, часть персональных данных уходит наружу. Нужно понимать, обучается ли провайдер на ваших данных, где расположены серверы и сколько хранятся логи. Для многих российских проектов это повод обезличивать данные перед отправкой: вырезать ФИО и телефоны, оставлять только суть запроса.

И да, я всё равно использую нейросети в этой работе — но как спарринг-партнёра, а не как аудитора. Рабочий сценарий: скармливаю модели обезличенную схему данных и список угроз, прошу «найди дыры и то, что я упустил». Иногда находит дельное — например, я стабильно забываю про восстановление пароля и токены в письмах. Но выводы проверяю руками: модели уверенно придумывают несуществующие уязвимости и так же уверенно пропускают реальные.

Чего делать не стоит

  • Копировать чужую модель угроз целиком. Она собрана под другую инфраструктуру и создаёт ложное чувство защищённости.
  • Составлять документ «для галочки». Если по итогам не появилось ни одного изменения в коде или настройках — это не модель угроз, а трата времени.
  • Писать в модель угроз реальные данные клиентов. Никаких паролей, номеров карт и сканов в самом документе.
  • Отдавать весь разбор внешнему AI-сервису. Модель угроз — это карта ваших слабых мест. Отправлять её целиком в чужое облако довольно иронично.

Минимальный набор мер, который закрывает большинство рисков

Когда классификация и модель угроз готовы, оказывается, что для среднего сайта достаточно небольшого списка:

  • не собирать данные, без которых можно жить;
  • пароли — только в виде хеша (bcrypt или argon2), никогда в открытом виде;
  • секреты — в переменных окружения или в хранилище секретов (Vault, облачный secret manager), а не в коде;
  • .env, дампы и бэкапы — вне публичного доступа, бэкапы шифровать;
  • двухфакторная аутентификация на админку и ограничение числа попыток входа;
  • HTTPS везде, включая внутренние переходы;
  • внятная политика хранения: что и когда удаляется автоматически;
  • логирование доступа к чувствительным данным.

Отдельно про людей: если у подрядчика закончился проект, его доступ должен быть отозван в тот же день. В моей практике именно забытые доступы подрядчиков давали больше инцидентов, чем все внешние взломщики вместе взятые.

И про юридическую часть: штрафы за утечки персональных данных в России за последние годы заметно выросли — на момент публикации действуют оборотные штрафы по КоАП. Точные суммы и условия проверяйте по актуальной редакции, они меняются, а вот требование сначала разобраться, какие данные вы обрабатываете, остаётся неизменным.

Заключение

Классификация данных и модель угроз — это те четыре-пять часов работы, которые экономят недели разбирательств и объяснений с клиентом. Порядок такой: выписать все данные и присвоить им уровни, ответить на вопрос «кто и как это сломает», и только потом выбирать конкретные технические меры. Схема работает и для крупного корпоративного портала, и для прототипа на скорую руку.

Нейросети тут полезны как ускоритель: помогают набросать список угроз, проверить код на захардкоженные ключи, объяснить незнакомый термин из нормативного документа. Но придумывать за вас модель угроз они не должны — и уж точно не должны получать доступ к вашим настоящим данным в процессе. Без магии и без паники: сначала карта, потом стены, потом замки.

guest

0 Комментарий