Классификация данных для небольшой компании: уровни, правила и поиск ПДн

0
17
Обложка статьи: Классификация данных для небольшой компании: уровни, правила и поиск ПДн

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

Статья опирается на логику направления «Безопасность данных» из методики зрелости Группы Сбер (источник); это методика для крупных компаний, мы используем её как ориентир и пересказываем своими словами.

Что должно получиться

Уровень Что это значит на практике
1. Базовый Известно, где хранятся важные и персональные данные; резервные копии существуют
2. Гигиенический Данные классифицированы; копии по схеме 3-2-1 с проверенным восстановлением; секреты не лежат в репозиториях; передача наружу защищена

Критерии сформулированы нами по мотивам методики, это ориентир, а не оценка соответствия.

Четыре класса данных

Класс Что это Примеры
Публичные Информация, которую можно раскрывать Материалы сайта, прайс, пресс-релизы
Внутренние Рабочие данные без особого ущерба при утечке Регламенты, внутренняя переписка, схемы процессов
Конфиденциальные Ущерб бизнесу при раскрытии Договоры, финансовые данные, исходный код, коммерческие условия, учётные данные
Персональные и особо защищаемые Данные физических лиц и данные, на которые есть законные требования Данные клиентов и сотрудников, базы пользователей, медицинские данные, платёжные данные

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

Правила для каждого класса

Класс Где хранить Кто имеет доступ Передача наружу Копии Удаление
Публичные Любая корпоративная система Все Свободно По необходимости По решению владельца
Внутренние Корпоративные системы, не личные облака Сотрудники По необходимости, через рабочие каналы Регулярные По сроку хранения
Конфиденциальные Защищённые каталоги и системы с журналами доступа По списку, по заявке владельца Только с согласия владельца, по защищённому каналу, с договором о конфиденциальности 3-2-1 с шифрованием По регламенту с актом
Персональные Системы из перечня ИСПДн на территории РФ (с учётом исключений закона) Только допущенные, фиксируется доступ По договору поручения или основанию закона, шифрование канала: поручение обработки 3-2-1 с шифрованием, проверенное восстановление В сроки закона с подтверждением: уничтожение ПДн

Шифрование данных на устройствах и в копиях: шифрование дисков; хранение копий: копирование 3-2-1.

Шаг 1. Составьте перечень массивов данных

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

Шаг 2. Назначьте владельцев и класс

  • Класс определяет владелец данных, а не ИТ: он знает ценность и последствия утечки.
  • При сомнении выбирайте более высокий класс и пересматривайте.
  • Класс системы определяется самым чувствительным классом данных в ней.

Шаг 3. Найдите данные, о которых забыли

Персональные данные оседают в неожиданных местах: выгрузки в таблицах, архивы, сетевые папки, домашние каталоги. Скрипт ниже обходит каталог и печатает только количество совпадений (значения не показываются) по признакам: адрес почты, телефон, СНИЛС, паспорт. Он находит кандидатов, а не точные данные: возможны ложные срабатывания, результаты нужно проверять вручную. Запускайте только по своим каталогам.

#!/usr/bin/env python3
"""Ищет в текстовых файлах признаки персональных данных и печатает только количество совпадений по файлам.
Значения не выводятся. Сканируйте только свои каталоги. Совпадения нужно проверять вручную: возможны ложные срабатывания.
Запуск: python3 pd_scan.py КАТАЛОГ [--max-mb 20]"""
import os
import re
import sys

PATTERNS = {
    'email': re.compile(r'[\w.+-]+@[\w-]+\.[\w.-]+'),
    'телефон': re.compile(r'(?<!\d)(?:\+7|8)[\s(-]*\d{3}[\s)-]*\d{3}[\s-]*\d{2}[\s-]*\d{2}(?!\d)'),
    'снилс': re.compile(r'(?<!\d)\d{3}-\d{3}-\d{3}[\s-]\d{2}(?!\d)'),
    'паспорт': re.compile(r'(?<!\d)\d{2}\s?\d{2}\s?\d{6}(?!\d)'),
}
SKIP_DIRS = {'.git', 'node_modules', '__pycache__', '.cache'}


def scan(path, limit):
    try:
        if os.path.getsize(path) > limit:
            return None
        with open(path, 'rb') as f:
            raw = f.read()
        if b'\0' in raw[:4096]:
            return None  # двоичный файл
        text = raw.decode('utf-8', errors='ignore')
    except OSError:
        return None
    return {name: len(rx.findall(text)) for name, rx in PATTERNS.items()}


def main():
    if len(sys.argv) < 2:
        sys.exit('Использование: pd_scan.py КАТАЛОГ [--max-mb N]')
    root = sys.argv[1]
    limit = 20 * 1024 * 1024
    if '--max-mb' in sys.argv:
        limit = int(sys.argv[sys.argv.index('--max-mb') + 1]) * 1024 * 1024
    found = 0
    for base, dirs, files in os.walk(root):
        dirs[:] = [d for d in dirs if d not in SKIP_DIRS]
        for name in files:
            path = os.path.join(base, name)
            res = scan(path, limit)
            if res and any(res.values()):
                found += 1
                print(path + '  ' + ', '.join(f'{k}={v}' for k, v in res.items() if v))
    print(f'Файлов с признаками ПДн: {found}', file=sys.stderr)
    return 1 if found else 0


if __name__ == '__main__':
    sys.exit(main())
python3 pd_scan.py /srv/shares/finance

Пример результата на учебных данных (итоговая строка идёт в поток ошибок и может появиться раньше списка):

Файлов с признаками ПДн: 2
/tmp/pdt/a.csv  email=1, телефон=1, снилс=1
/tmp/pdt/sub/c.txt  email=1, паспорт=1

Код возврата 1, если что-то найдено. Для найденных файлов решите: оставить (и защитить по классу), перенести в нужную систему или уничтожить. Скрипт читает только текстовые файлы; таблицы Office и архивы он не разбирает.

Шаг 4. Разметьте и закрепите правила

  • Название каталога или системы отражает класс (например, префикс conf-), в документах колонтитул «Конфиденциально».
  • Права доступа соответствуют классу: конфиденциальные и персональные каталоги закрыты по спискам.
  • Правила обращения изложены на одной странице и доведены до сотрудников: программа осведомлённости.
  • Секреты (пароли, ключи, токены) не хранятся в общих документах и репозиториях: секреты в git.

Шаг 5. Тестовые среды без реальных данных

Самая частая причина утечек из «неважных» систем — реальные данные в тестах. Используйте обезличенные или синтетические данные, а если нужна копия боевой базы, применяйте необратимое обезличивание и ограничьте доступ как к боевой.

Диагностика

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

Где это в модели зрелости

Материал относится к направлению «Безопасность данных» (материалы направления, карта зрелости). Уровень 1 закрывает знание того, где лежат важные и персональные данные, уровень 2 добавляет классификацию и правила обращения, защищённую передачу и тестовые среды без реальных данных.

Как проверить

  1. Есть перечень массивов данных с владельцами, классом и признаком ПДн.
  2. Для каждого класса записаны правила хранения, доступа, передачи, копирования и удаления.
  3. Скрипт поиска запускался на основных каталогах, найденные файлы разобраны.
  4. Тестовые среды не содержат реальных персональных данных.

Источники

  • Методика оценки уровня зрелости кибербезопасности компании, Группа Сбер: sberbank.ru.
  • NIST SP 800-60 Vol. 1 Rev. 1, Guide for Mapping Types of Information and Information Systems to Security Categories: csrc.nist.gov. Международная практика, не российский норматив.

Оставьте свой ответ