DLP с нуля: практическое руководство по защите от утечек данных

О чем этот курс

DLP (Data Loss Prevention / Data Leak Prevention) — это класс систем, которые предотвращают утечку конфиденциальной информации за пределы контролируемой зоны. DLP следит за тем, какие данные покидают компанию, через какие каналы и кто это делает.

DLP позволяет:

  • Обнаруживать и блокировать передачу персональных данных (ПДн)
  • Контролировать передачу коммерческой тайны и интеллектуальной собственности
  • Мониторить все каналы: email, веб, мессенджеры, USB, печать, облачные хранилища
  • Расследовать инциденты и собирать цифровые доказательства
  • Соответствовать требованиям регуляторов (152-ФЗ, GDPR, PCI DSS)

В этом курсе мы пройдем путь от полного нуля до работающей DLP-системы:

  • Что такое DLP и как она работает?
  • Архитектура DLP: агенты, шлюзы, управление
  • Обзор open-source DLP решений (OpenDLP, MyDLP, Endpoint Protector)
  • Классификация данных: что защищать?
  • Создание политик и правил
  • Мониторинг основных каналов утечек
  • Анализ инцидентов и реагирование
  • Интеграция с SIEM и SOAR
  • Юридические аспекты внедрения DLP

Курс ориентирован на практику — вы сможете повторить все шаги на своем сервере или локальной машине.


Часть 1. Основы DLP: теория для практиков

1.1 Что такое DLP и зачем она нужна?

Статистика утечек данных:

  • 70% утечек происходят по вине сотрудников (намеренно или случайно)
  • Средняя стоимость утечки данных — $4.45 млн (IBM, 2023)
  • 60% компаний, переживших крупную утечку, закрываются в течение 6 месяцев
  • Регуляторные штрафы могут достигать 4% от глобального оборота (GDPR)

DLP решает эти проблемы:

ПроблемаРешение DLP
Сотрудник отправил ПДн клиентов на личную почтуDLP обнаружит и заблокирует
Инсайдер копирует базу данных на флешкуDLP зафиксирует и оповестит
Конфиденциальный документ загружен в облакоDLP перехватит и проверит
Партнер получил доступ к секретной информацииDLP ограничит по контексту

1.2 Компоненты DLP

graph TB subgraph "DLP Система" direction TB %% Верхний уровень - Компоненты системы subgraph Components[" "] direction LR Center["Центр управления"] Agents["Агенты
(Endpoint)"] Gateways["Шлюзы
(Network)"] end %% Связи от компонентов к функциям Center --> Policies Agents --> Monitoring Gateways --> Analysis %% Нижний уровень - Функции subgraph Policies["Политики"] direction TB P1["• Контент"] P2["• Контекст"] P3["• Поведение"] end subgraph Monitoring["Мониторинг"] direction TB M1["• USB"] M2["• Печать"] M3["• Приложения"] end subgraph Analysis["Анализ"] direction TB A1["• Инциденты"] A2["• Расследование"] A3["• Отчеты"] end end %% Стили для наглядности classDef system fill:#e1f5fe,stroke:#01579b,stroke-width:2px classDef component fill:#fff9c4,stroke:#f57f17,stroke-width:1px classDef function fill:#f3e5f5,stroke:#7b1fa2,stroke-width:1px class Components system class Center,Agents,Gateways component class Policies,Monitoring,Analysis function class P1,P2,P3,M1,M2,M3,A1,A2,A3 function
  1. Центр управления — консоль для настройки политик, просмотра инцидентов, отчетов
  2. Агенты (Endpoint DLP) — устанавливаются на рабочие станции, контролируют все действия пользователя
  3. Шлюзы (Network DLP) — анализируют трафик на сетевом уровне (email, web, FTP)

1.3 Методы обнаружения конфиденциальной информации

МетодОписаниеПример
Цифровые отпечаткиХеширование документов, создание шаблоновДокумент с грифом “Коммерческая тайна”
Регулярные выраженияПоиск по шаблонамНомера паспортов, ИНН, кредитных карт
Ключевые словаПоиск по словарям“Секретно”, “Конфиденциально”
Морфологический анализАнализ текста с учетом словоформУчет склонений и спряжений
Статистический анализВыявление аномалийВнезапная отправка большого объема данных
ML/поведенческий анализПрофилирование пользователейНехарактерное поведение сотрудника

1.4 Обзор open-source DLP решений

РешениеТипПлюсыМинусыДля кого
OpenDLPEndpointБесплатно, агенты для Windows/Linux, централизованное управлениеСложная установка, устаревший интерфейсИзучение DLP, малые проекты
MyDLPEndpoint + NetworkВеб-интерфейс, модульная архитектураНе обновлялся с 2017Исторический интерес
Endpoint Protector (Community)EndpointПрофессиональное решение, есть бесплатная версияОграничения в бесплатной версииКоммерческое внедрение
OpenDLP-GUI (форк)EndpointСовременный форк с веб-интерфейсомМало документацииТе, кому нужен современный OpenDLP
Cuckoo SandboxАнализАнализ подозрительных файловНе полноценная DLPДополнение к DLP

В этом курсе мы сосредоточимся на OpenDLP (как классическое open-source решение) и на практических подходах к созданию DLP своими руками с использованием существующих инструментов.


Часть 2. Подготовка инфраструктуры

2.1 Требования к оборудованию

Для учебного проекта (OpenDLP + несколько агентов):

КомпонентМинимумРекомендуется
Сервер DLP2 CPU, 4 ГБ RAM4 CPU, 8 ГБ RAM
Агентские машины1 CPU, 1 ГБ RAM2 CPU, 2 ГБ RAM
Диск сервера50 ГБ100 ГБ SSD
ОС сервераUbuntu 20.04/22.04 LTSUbuntu 22.04 LTS
ОС агентовWindows 10/11, UbuntuWindows 10/11, Ubuntu

2.2 Создание виртуальной среды

Для тестирования DLP нам понадобится несколько виртуальных машин:

  1. Сервер DLP (Ubuntu Server)
  2. Клиент Windows (Windows 10/11) — с установленным агентом
  3. Клиент Linux (Ubuntu Desktop) — с установленным агентом

Вариант 1: Локальные VM (VirtualBox/VMware)

  • Создайте три VM с параметрами выше
  • Настройте сеть (все VM должны видеть друг друга)

Вариант 2: Облачные серверы

  • Арендуйте VPS для сервера
  • Для агентов можно использовать локальные машины

2.3 Базовая настройка сервера

# Обновление системы
sudo apt update && sudo apt upgrade -y

# Установка необходимых пакетов
sudo apt install -y curl wget git vim htop net-tools build-essential

# Установка Docker и Docker Compose
sudo apt install -y docker.io docker-compose
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER

# Открытие портов
sudo ufw allow 22/tcp        # SSH
sudo ufw allow 80/tcp         # HTTP для веб-интерфейса
sudo ufw allow 443/tcp        # HTTPS
sudo ufw allow 8080/tcp       # Альтернативный порт
sudo ufw enable

Часть 3. Установка и настройка OpenDLP

OpenDLP — это одно из первых open-source DLP решений. Оно состоит из серверной части и агентов.

3.1 Установка серверной части OpenDLP

Шаг 1. Клонируйте репозиторий

cd ~
git clone https://github.com/ezarko/opendlp.git
cd opendlp

Шаг 2. Установите зависимости

sudo apt install -y mysql-server python3-pip python3-dev libmysqlclient-dev
sudo pip3 install -r requirements.txt

Шаг 3. Настройте базу данных

sudo mysql
CREATE DATABASE opendlp;
CREATE USER 'opendlp'@'localhost' IDENTIFIED BY 'opendlp_password';
GRANT ALL PRIVILEGES ON opendlp.* TO 'opendlp'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Шаг 4. Настройте конфигурацию

cp config.py.example config.py
nano config.py

Отредактируйте параметры подключения к БД:

DATABASE = {
    'host': 'localhost',
    'port': 3306,
    'user': 'opendlp',
    'password': 'opendlp_password',
    'database': 'opendlp'
}

Шаг 5. Инициализируйте базу

python3 manage.py migrate

Шаг 6. Запустите сервер

python3 manage.py runserver 0.0.0.0:8080

Шаг 7. Откройте веб-интерфейс

Перейдите в браузере: http://ваш-сервер-ip:8080

Логин/пароль по умолчанию: admin / admin

3.2 Альтернативная установка: современный форк OpenDLP-GUI

Существует более современный форк с веб-интерфейсом:

cd ~
git clone https://github.com/opendlp/opendlp-gui.git
cd opendlp-gui

# Установка через Docker (рекомендуется)
docker-compose up -d

Веб-интерфейс будет доступен на http://ваш-сервер-ip:8080


Часть 4. Установка агентов OpenDLP

4.1 Установка агента на Windows

Шаг 1. Скачайте агент

На сервере OpenDLP перейдите в раздел Downloads и скачайте Windows-агент (или соберите его из исходников).

Шаг 2. Установите агент

На Windows-машине запустите установщик от имени администратора.

Шаг 3. Настройте подключение к серверу

При установке укажите:

  • Server IP: IP-адрес вашего DLP-сервера
  • Port: 8080 (или тот, который вы настроили)
  • Group: TestGroup

Шаг 4. Проверьте статус

В веб-интерфейсе OpenDLP перейдите в раздел Agents — должен появиться новый агент со статусом “Active”.

4.2 Установка агента на Linux

Шаг 1. Скачайте агент

wget http://ваш-сервер-ip:8080/static/opendlp-agent-linux.tar.gz
tar -xzf opendlp-agent-linux.tar.gz
cd opendlp-agent

Шаг 2. Настройте конфигурацию

nano config.ini
[server]
host = ваш-сервер-ip
port = 8080

[agent]
name = linux-client-01
group = TestGroup

Шаг 3. Запустите агент

sudo python3 agent.py --daemon

Шаг 4. Проверьте статус

ps aux | grep opendlp

Часть 5. Классификация данных: что защищать?

Прежде чем настраивать политики, нужно понять, какие данные мы защищаем.

5.1 Инвентаризация конфиденциальной информации

Шаг 1. Определите типы данных

КатегорияПримерыРегулятор
Персональные данные (ПДн)ФИО, паспорт, телефон, email152-ФЗ, GDPR
Коммерческая тайнаФинансовые отчеты, стратегии, клиентские базыГК РФ
Платежная информацияНомера карт, CVV, банковские счетаPCI DSS
Интеллектуальная собственностьИсходный код, патенты, чертежиГК РФ
Медицинская информацияДиагнозы, истории болезней323-ФЗ, HIPAA

Шаг 2. Найдите, где хранятся данные

Проведите аудит:

  • Файловые серверы
  • Базы данных
  • Облачные хранилища
  • Рабочие станции
  • Email-архивы

Шаг 3. Создайте “эталонные” образцы

Для каждого типа данных создайте несколько образцов:

  • Документ с паспортными данными
  • База данных клиентов (тестовая)
  • Финансовый отчет
  • Исходный код

5.2 Создание цифровых отпечатков (fingerprints)

Шаг 1. Загрузите образцы в OpenDLP

В веб-интерфейсе перейдите в раздел FingerprintsUpload и загрузите ваши образцы.

Шаг 2. Создайте правила для регулярных выражений

В разделе Regex Patterns создайте шаблоны:

НазваниеРегулярное выражениеОписание
Паспорт РФ\d{4} \d{6}Серия и номер паспорта
ИНН\d{10}|\d{12}ИНН физического или юридического лица
Номер карты\d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4}Номер кредитной карты
Email[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}Адрес электронной почты

Шаг 3. Создайте словари ключевых слов

В разделе Keywords создайте списки:

  • Секретно, Конфиденциально, Коммерческая тайна
  • Для служебного пользования
  • Не подлежит разглашению

Часть 6. Создание политик DLP

Политики DLP определяют, что, где и при каких условиях считается нарушением.

6.1 Структура политики

Политика DLP обычно содержит:

  1. Название — что она контролирует
  2. Каналы — email, web, USB, печать, буфер обмена
  3. Условия — какие данные искать (регулярки, ключевые слова, отпечатки)
  4. Действия — блокировать, уведомить, логировать, запросить подтверждение
  5. Исключения — доверенные пользователи, исключенные приложения

6.2 Создание политики в OpenDLP

Шаг 1. Перейдите в раздел PoliciesCreate New Policy

Шаг 2. Настройте базовые параметры

ПолеЗначение
NameЗащита ПДн
DescriptionБлокировка передачи персональных данных
StatusEnabled
SeverityHigh

Шаг 3. Настройте условия

В разделе Conditions добавьте:

  • Regex Pattern: Паспорт РФ
  • Regex Pattern: ИНН
  • Keyword: Конфиденциально

Шаг 4. Настройте каналы

Выберите каналы для мониторинга:

  • Email (SMTP, Outlook, Webmail)
  • Web (HTTP/HTTPS uploads)
  • USB (файлы, копируемые на съемные носители)
  • Print (документы, отправляемые на печать)
  • Clipboard (копирование в буфер обмена)

Шаг 5. Настройте действия

ДействиеОписаниеВыбрано
LogТолько логировать
AlertОтправить уведомление
BlockЗаблокировать действие✅ (для USB и Email)
QuarantineПоместить файл в карантин
Notify UserПоказать предупреждение пользователю

Шаг 6. Настройте исключения

В разделе Exceptions добавьте:

  • Доверенных пользователей (например, руководителей)
  • Доверенные домены (например, @partner-company.com)
  • Доверенные приложения (например, бухгалтерское ПО)

Шаг 7. Сохраните политику

6.3 Примеры политик для разных сценариев

Политика 1: Защита персональных данных

name: "ПДн Protection"
channels:
  - email
  - web
  - usb
  - print
conditions:
  regex:
    - "\\d{4} \\d{6}"  # паспорт
    - "\\d{10}"         # ИНН
  keywords:
    - "персональные данные"
    - "personal data"
actions:
  email: block
  web: block
  usb: block
  print: alert
exceptions:
  users:
    - "hr-manager"
    - "ceo"
  domains:
    - "*.rosreestr.ru"  # отправка отчетов в госорганы

Политика 2: Защита коммерческой тайны

name: "Commercial Secret Protection"
channels:
  - email
  - usb
  - cloud
conditions:
  keywords:
    - "коммерческая тайна"
    - "секретно"
    - "только для внутреннего использования"
  fingerprint: true  # использовать цифровые отпечатки
actions:
  email: block_with_notification
  usb: block_with_notification
  cloud: alert
exceptions:
  users:
    - "legal"

Часть 7. Мониторинг ключевых каналов утечек

7.1 Email (электронная почта)

Email — один из главных каналов утечек. Сотрудники могут отправлять конфиденциальные данные на личную почту или внешним адресатам.

Настройка мониторинга SMTP:

# Настройка почтового сервера для проксирования
sudo apt install -y postfix-policyd

В OpenDLP настройте перехват SMTP-трафика:

  • SMTP Server: ваш почтовый сервер
  • Port: 25 (или 587 для TLS)
  • SSL/TLS: в зависимости от настроек

Мониторинг веб-почты (Gmail, Yandex, Mail.ru):

Для веб-почты используется анализ HTTPS-трафика. Агент на рабочей станции перехватывает данные до шифрования.

7.2 Веб-трафик (HTTP/HTTPS)

Настройка прокси-сервера:

# Установка Squid
sudo apt install -y squid

# Настройка интеграции с OpenDLP
sudo nano /etc/squid/squid.conf

Добавьте:

icap_enable on
icap_service service_req reqmod_precache icap://127.0.0.1:1344/request
adaptation_access service_req allow all

Альтернатива: использование агента для перехвата HTTPS.

7.3 USB-устройства

Агент OpenDLP на Windows может контролировать:

  • Копирование файлов на USB — перехват операций записи
  • Подключение неизвестных устройств — блокировка по vendor ID
  • Шифрование USB — требование шифрования для съемных дисков

Настройка в OpenDLP:

В политике для канала USB выберите:

  • Action: Block
  • Allow encrypted: Yes
  • Allow read-only: Yes (если нужно только чтение)

7.4 Печать документов

Печать конфиденциальных документов — еще один канал утечки (бумажные копии).

Настройка мониторинга печати:

В Windows-агенте включите:

  • Monitor Print Jobs: Yes
  • Capture Content: Yes (захват содержимого печатаемых документов)
  • Block if policy matches: Yes

7.5 Буфер обмена

Копирование конфиденциальных данных через Ctrl+C/Ctrl+V.

Настройка:

  • Monitor Clipboard: Yes
  • Max size: 1 MB (чтобы не тормозить систему)
  • Block if sensitive data: Yes

7.6 Облачные хранилища

Агент может распознавать загрузку файлов в облачные сервисы:

  • Google Drive
  • Dropbox
  • Яндекс.Диск
  • Облако Mail.ru

Настройка:

В политике выберите Cloud Storage как отдельный канал или включите в Web.


Часть 8. Анализ инцидентов и реагирование

8.1 Жизненный цикл инцидента DLP

graph TD %% Основной поток A[Обнаружение] --> B[Классификация] B --> C[Расследование] C --> D[Реагирование] D --> E[Закрытие] %% Детализация этапов (вертикальные связи) A --> A1[Событие] B --> B1[Определить критичность] C --> C1[Собрать доказательства] D --> D1[Применить меры] E --> E1[Уроки извлеченные] %% Стили для наглядности classDef main fill:#e1f5fe,stroke:#01579b,stroke-width:2px classDef detail fill:#fff9c4,stroke:#f57f17,stroke-width:1px class A,B,C,D,E main class A1,B1,C1,D1,E1 detail

8.2 Просмотр инцидентов в OpenDLP

Шаг 1. Перейдите в раздел Incidents

Вы увидите список всех событий, сработавших по политикам.

Шаг 2. Фильтруйте по критичности

  • Critical — реальная утечка конфиденциальных данных
  • High — попытка утечки (заблокировано)
  • Medium — подозрительное поведение
  • Low — нарушение политики без конфиденциальных данных

Шаг 3. Просмотрите детали инцидента

Для каждого инцидента доступны:

  • User — кто совершил действие
  • Action — что делал (отправка email, копирование на USB)
  • Data — какие данные обнаружены (с контекстом)
  • Timestamp — точное время
  • Policy — какая политика сработала
  • Status — статус расследования

8.3 Расследование инцидента

Шаг 1. Соберите доказательства

  • Скриншоты — если агент поддерживает захват экрана
  • Копии файлов — помещенные в карантин
  • Логи — все действия пользователя
  • Контекст — что делал пользователь до и после

Шаг 2. Определите намерения

ПризнакиСлучайная ошибкаЗлой умысел
Объем данныхМаленькийБольшой
ВремяРабочееНочное/выходные
ЧастотаРедкоРегулярно
Сокрытие следовНетЕсть (шифрование, удаление логов)
ПолучательЛичный emailКонкурент

Шаг 3. Примите меры

СитуацияДействие
Случайная ошибкаОбучение, предупреждение
Нарушение политикиВыговор, лишение бонусов
Злой умыселУвольнение, передача в правоохранительные органы
Системная проблемаИзменение политики, доработка DLP

Шаг 4. Документируйте инцидент

Создайте отчет по шаблону:

# Отчет по инциденту DLP-2026-001

**Дата:** 2026-03-10 14:23:45
**Сотрудник:** Иванов Иван (ivanov@company.ru)
**Отдел:** Продажи
**Должность:** Менеджер

**Обнаружено:**
Отправка email с вложением на адрес ivanov.personal@gmail.com

**Содержимое:**
Файл "clients.xlsx" содержащий:
- 1500 записей клиентов (ФИО, телефон, email)
- Отмечен как "Коммерческая тайна"

**Действие DLP:**
Блокировка отправки, уведомление администратору

**Расследование:**
- Сотрудник объяснил, что хотел поработать с файлом дома
- В истории нет других подобных инцидентов
- Сотрудник прошел обучение по работе с конфиденциальными данными 2 месяца назад

**Решение:**
- Вынести предупреждение
- Провести дополнительное обучение
- Ограничить доступ к файлам с коммерческой тайной на выходные дни

**Заключение:**
Инцидент классифицирован как "Случайное нарушение". Ущерба не нанесено.

Часть 9. Интеграция DLP с другими системами

9.1 Интеграция с SIEM (Wazuh)

DLP генерирует события, которые должны попадать в SIEM для централизованного мониторинга.

Настройка отправки логов в Wazuh:

# На сервере DLP настройте syslog-ng
sudo apt install -y syslog-ng
sudo nano /etc/syslog-ng/syslog-ng.conf

Добавьте:

destination d_wazuh {
    udp("wazuh-server" port(514));
};
log {
    source(s_src);
    destination(d_wazuh);
};

В Wazuh создайте правила для DLP-событий:

<group name="dlp,">
  <rule id="120001" level="8">
    <if_sid>120000</if_sid>
    <program_name>opendlp</program_name>
    <match>BLOCKED</match>
    <description>DLP: Blocked sensitive data transfer</description>
  </rule>
  
  <rule id="120002" level="5">
    <if_sid>120000</if_sid>
    <program_name>opendlp</program_name>
    <match>ALERT</match>
    <description>DLP: Alert on sensitive data</description>
  </rule>
</group>

9.2 Интеграция с SOAR (Shuffle)

При срабатывании DLP можно автоматически создавать тикеты и запускать плейбуки.

Создайте плейбук в Shuffle:

[Webhook] ← DLP Alert
    ↓
[IF severity = high]
    ↓
[Create Ticket in GLPI]
    ↓
[Send Telegram to SOC]
    ↓
[Check user history in DLP]
    ↓
[IF repeat offender] → [Escalate to manager]

Настройка отправки алертов из OpenDLP в Shuffle:

В OpenDLP добавьте вебхук в настройках уведомлений:

  • URL: http://shuffle-server:3001/api/v1/webhooks/trigger/dlp-alert
  • Method: POST
  • Body: JSON с данными инцидента

9.3 Интеграция с AD/LDAP

Для корректной идентификации пользователей DLP должна быть интегрирована с Active Directory.

Настройка LDAP в OpenDLP:

В config.py добавьте:

LDAP_CONFIG = {
    'host': 'ldap://ad.company.ru',
    'port': 389,
    'base_dn': 'dc=company,dc=ru',
    'user_dn': 'cn=binduser,dc=company,dc=ru',
    'password': 'password'
}

9.4 Интеграция с IRP (TheHive)

Создание кейсов в TheHive для каждого инцидента DLP.

import requests

def create_thehive_case(incident):
    case = {
        "title": f"DLP Incident: {incident['user']} - {incident['policy']}",
        "description": incident['description'],
        "severity": incident['severity'],
        "tags": ["dlp", incident['channel']],
        "tlp": 2
    }
    
    response = requests.post(
        "http://thehive:9000/api/v1/case",
        json=case,
        headers={"Authorization": "Bearer YOUR_API_KEY"}
    )
    return response.json()

Часть 10. Юридические аспекты DLP

10.1 Соответствие законодательству

Трудовой кодекс РФ:

  • Ст. 86 ТК РФ — работодатель имеет право обрабатывать персональные данные работника
  • Ст. 74 ТК РФ — необходимо уведомить работника об изменении условий труда

152-ФЗ “О персональных данных”:

  • Необходимо получить согласие на обработку ПДн (если обрабатываются ПДн других лиц)
  • Обеспечить конфиденциальность ПДн

Закон “О коммерческой тайне”:

  • Необходимо утвердить перечень информации, составляющей коммерческую тайну
  • Ознакомить сотрудников под подпись

10.2 Документы для внедрения DLP

ДокументНазначение
Приказ о внедрении DLPОснование для начала работ
Политика информационной безопасностиОбщие принципы защиты информации
Политика использования ресурсовЧто разрешено/запрещено сотрудникам
Перечень конфиденциальной информацииЧто защищаем
Согласие на мониторингПодписывается каждым сотрудником
Инструкция для администратора DLPКак управлять системой
Регламент реагирования на инцидентыЧто делать при утечке

10.3 Уведомление сотрудников

Пример уведомления при входе в систему:

ВНИМАНИЕ!
В компании используется система мониторинга DLP.
Все действия с информацией (email, web, USB, печать) могут контролироваться.
Используя корпоративные ресурсы, вы соглашаетесь с условиями Политики ИБ.

Пример согласия на мониторинг:

Я, [ФИО], ознакомлен с Политикой информационной безопасности и даю согласие
на мониторинг моих действий с использованием корпоративных ресурсов,
включая электронную почту, интернет-трафик, передачу файлов на внешние
носители и печать документов.

Подпись: ___________ Дата: ___________

Часть 11. Создание DLP своими руками

Если вам не подходят готовые open-source решения, можно создать свою простую DLP, используя существующие инструменты.

11.1 Мониторинг USB на Python

Простой скрипт для отслеживания USB-устройств:

#!/usr/bin/env python3
import os
import time
import subprocess
import json
from datetime import datetime

class SimpleDLP:
    def __init__(self):
        self.mounted_usb = []
        self.policies = self.load_policies()
        
    def load_policies(self):
        # Загрузка политик из конфига
        return {
            "block_extensions": [".xlsx", ".xls", ".docx", ".pdf", ".sql"],
            "block_keywords": ["passport", "inn", "snils"],
            "log_file": "/var/log/simple-dlp.log"
        }
    
    def detect_usb(self):
        # Поиск новых USB-устройств
        result = subprocess.run(['lsblk', '-o', 'NAME,MOUNTPOINT', '-J'], 
                               capture_output=True, text=True)
        devices = json.loads(result.stdout)
        
        for device in devices['blockdevices']:
            if device.get('mountpoint') and 'media' in device['mountpoint']:
                if device['name'] not in self.mounted_usb:
                    self.mounted_usb.append(device['name'])
                    self.log(f"USB mounted: {device['mountpoint']}")
                    self.monitor_usb_files(device['mountpoint'])
    
    def monitor_usb_files(self, mountpoint):
        # Мониторинг файлов, копируемых на USB
        import watchdog
        from watchdog.observers import Observer
        from watchdog.events import FileSystemEventHandler
        
        class USBHandler(FileSystemEventHandler):
            def on_created(self, event):
                if not event.is_directory:
                    self.check_file(event.src_path)
            
            def on_modified(self, event):
                if not event.is_directory:
                    self.check_file(event.src_path)
            
            def check_file(self, filepath):
                # Проверка расширения
                ext = os.path.splitext(filepath)[1].lower()
                if ext in self.policies['block_extensions']:
                    self.block_file(filepath)
                
                # Проверка содержимого (для текстовых файлов)
                if ext in ['.txt', '.csv', '.sql']:
                    self.check_content(filepath)
        
        handler = USBHandler()
        observer = Observer()
        observer.schedule(handler, mountpoint, recursive=True)
        observer.start()
    
    def block_file(self, filepath):
        # Блокировка (удаление или перемещение в карантин)
        quarantine_dir = "/opt/dlp/quarantine"
        os.makedirs(quarantine_dir, exist_ok=True)
        
        filename = os.path.basename(filepath)
        dest = os.path.join(quarantine_dir, f"{datetime.now().strftime('%Y%m%d_%H%M%S')}_{filename}")
        
        os.rename(filepath, dest)
        self.log(f"BLOCKED: {filepath} moved to quarantine")
        
        # Отправка алерта
        self.send_alert(f"Blocked file: {filename}", "high")
    
    def check_content(self, filepath):
        with open(filepath, 'r', errors='ignore') as f:
            content = f.read()
            for keyword in self.policies['block_keywords']:
                if keyword.lower() in content.lower():
                    self.block_file(filepath)
                    break
    
    def send_alert(self, message, severity):
        # Отправка в Telegram или другую систему
        import requests
        token = "YOUR_TELEGRAM_BOT_TOKEN"
        chat_id = "YOUR_CHAT_ID"
        
        text = f"[{severity.upper()}] {message}"
        requests.post(
            f"https://api.telegram.org/bot{token}/sendMessage",
            json={"chat_id": chat_id, "text": text}
        )
    
    def log(self, message):
        with open(self.policies['log_file'], 'a') as f:
            f.write(f"{datetime.now()}: {message}\n")
        print(message)
    
    def run(self):
        while True:
            self.detect_usb()
            time.sleep(5)

if __name__ == "__main__":
    dlp = SimpleDLP()
    dlp.run()

11.2 Мониторинг HTTP-трафика с Squid

Настройка Squid для логирования всех запросов:

sudo apt install -y squid
sudo nano /etc/squid/squid.conf
# Логирование всех запросов
access_log /var/log/squid/access.log squid

# Сохранение тел POST-запросов
logfile_rotate 10
log_mime_hdrs on

# Интеграция с анализатором
url_rewrite_program /usr/local/bin/squid-analyzer.py
url_rewrite_children 10

Скрипт анализатора:

#!/usr/bin/env python3
import sys
import re

def analyze_url(url, method, headers, body):
    # Проверка на загрузку файлов
    if method == 'POST' and 'multipart/form-data' in headers:
        # Ищем конфиденциальные данные
        patterns = [
            r'\d{4} \d{6}',  # паспорт
            r'\d{10}',        # ИНН
            r'секретно',
            r'конфиденциально'
        ]
        
        for pattern in patterns:
            if re.search(pattern, body, re.IGNORECASE):
                # Блокируем запрос
                print("ERR")
                # Отправляем алерт
                with open('/var/log/dlp-http.log', 'a') as f:
                    f.write(f"BLOCKED: {url}\n")
                return
    
    # Разрешаем запрос
    print("OK")

if __name__ == "__main__":
    while True:
        line = sys.stdin.readline().strip()
        if not line:
            break
        # Формат от Squid: метод URL заголовки тело
        parts = line.split(' ', 3)
        if len(parts) >= 4:
            analyze_url(parts[1], parts[0], parts[2], parts[3])

11.3 Мониторинг буфера обмена

Python-скрипт для Windows:

import win32clipboard
import time
import re
import requests

class ClipboardMonitor:
    def __init__(self):
        self.last_content = ""
        self.patterns = [
            (r'\d{4} \d{6}', 'passport'),
            (r'[\w\.-]+@[\w\.-]+\.\w+', 'email'),
            (r'конфиденциально', 'keyword')
        ]
    
    def get_clipboard(self):
        win32clipboard.OpenClipboard()
        try:
            data = win32clipboard.GetClipboardData()
            return data
        except:
            return ""
        finally:
            win32clipboard.CloseClipboard()
    
    def check_content(self, content):
        if content == self.last_content:
            return
        
        self.last_content = content
        
        for pattern, name in self.patterns:
            if re.search(pattern, content, re.IGNORECASE):
                self.alert(content, name)
                break
    
    def alert(self, content, reason):
        # Отправка на сервер DLP
        data = {
            'user': os.environ.get('USERNAME'),
            'computer': os.environ.get('COMPUTERNAME'),
            'content': content[:500],
            'reason': reason,
            'timestamp': time.time()
        }
        
        try:
            requests.post('http://dlp-server:8080/api/clipboard', json=data)
        except:
            pass
        
        # Локальное логирование
        with open('C:\\ProgramData\\DLP\\clipboard.log', 'a') as f:
            f.write(f"{time.time()}: {reason}\n{content[:200]}\n\n")
    
    def run(self):
        while True:
            content = self.get_clipboard()
            if content:
                self.check_content(content)
            time.sleep(0.5)

if __name__ == "__main__":
    monitor = ClipboardMonitor()
    monitor.run()

Часть 12. Тестирование DLP

12.1 Создание тестовых сценариев

Сценарий 1: Отправка ПДн по email

  1. Создайте тестовый файл test_passport.txt:
    Паспорт: 1234 567890
    ФИО: Иванов Иван Иванович
  2. Отправьте его на внешний email
  3. Проверьте, что DLP заблокировала отправку

Сценарий 2: Копирование на USB

  1. Подключите чистую флешку
  2. Скопируйте файл с конфиденциальными данными
  3. Проверьте, что файл перемещен в карантин

Сценарий 3: Загрузка в облако

  1. Зайдите в Google Drive через браузер
  2. Попробуйте загрузить файл с коммерческой тайной
  3. Проверьте, что загрузка заблокирована

Сценарий 4: Печать документа

  1. Откройте документ с пометкой “Конфиденциально”
  2. Отправьте на печать
  3. Проверьте, что печать заблокирована или залогирована

12.2 Проверка производительности

Метрики для замера:

МетрикаОжиданиеМетод замера
Задержка при копировании файлов< 1 секЗасечь время копирования с DLP и без
Нагрузка на CPU агента< 5%Диспетчер задач
Потребление RAM агентом< 200 МБДиспетчер задач
Время доставки алерта< 10 секОт отправки до получения в консоли
Количество ложных срабатываний< 5%Анализ инцидентов

12.3 A/B тестирование

  1. Группа А (без DLP) — несколько тестовых пользователей работают без контроля
  2. Группа B (с DLP) — пользователи с установленным агентом
  3. Сравните количество инцидентов и скорость работы

Часть 13. Заключение и дальнейшие шаги

13.1 Что мы построили

Мы создали полноценную DLP-систему, которая:

  1. Устанавливает агенты на Windows и Linux
  2. Контролирует основные каналы утечек (email, web, USB, печать, буфер обмена)
  3. Обнаруживает конфиденциальные данные по регулярным выражениям, ключевым словам и цифровым отпечаткам
  4. Блокирует или логирует нарушения в соответствии с политиками
  5. Позволяет расследовать инциденты и собирать доказательства
  6. Интегрируется с SIEM и SOAR
  7. Соответствует законодательным требованиям

13.2 Чек-лист внедрения DLP

  • Проведена инвентаризация конфиденциальных данных
  • Утвержден перечень защищаемой информации
  • Разработаны политики DLP
  • Подготовлены юридические документы (приказы, согласия)
  • Развернут сервер DLP
  • Установлены агенты на все рабочие станции
  • Настроены все каналы мониторинга
  • Проведено тестирование
  • Обучены администраторы DLP
  • Оповещены сотрудники о мониторинге
  • Настроена интеграция с SIEM/SOAR
  • Разработан регламент реагирования на инциденты

13.3 Рекомендации по развитию

  1. Переход на коммерческую DLP — если open-source решение перестало справляться, рассмотрите:

    • Solar Dozor
    • InfoWatch Traffic Monitor
    • SearchInform
    • StaffCop
  2. Внедрение DCAP (Data-Centric Audit & Protection) — защита данных, а не каналов

    • Классификация данных
    • Контроль доступа на уровне файлов
    • Шифрование данных
  3. CASB (Cloud Access Security Broker) — контроль облачных сервисов

    • Shadow IT detection
    • Управление доступом к SaaS
  4. UEBA (User and Entity Behavior Analytics) — выявление аномалий поведения

    • Профилирование пользователей
    • Обнаружение инсайдеров
  5. IRM (Information Rights Management) — защита документов на уровне прав

    • Контроль доступа к документам даже после их отправки
    • Водяные знаки, запрет печати

Практическое задание

  1. Разверните OpenDLP на сервере
  2. Установите агенты на тестовые Windows и Linux машины
  3. Создайте политику для защиты ПДн (паспортные данные)
  4. Проведите тесты всех каналов утечек:
    • Отправьте файл с тестовыми данными на Gmail
    • Скопируйте файл на USB-флешку
    • Попробуйте загрузить файл в облако
    • Отправьте документ на печать
  5. Проанализируйте инциденты в консоли
  6. Настройте отправку уведомлений в Telegram
  7. Интегрируйте DLP с SIEM (по желанию)

Нужна помощь?

Если вам нужно внедрить DLP в продуктовую среду, не хватает экспертизы или вы хотите передать эту сложную задачу профессионалам — обратитесь в компанию «Стратегия Ра». Мы поможем спроектировать архитектуру, развернуть и настроить DLP (как на базе open-source, так и коммерческие решения), разработать политики, провести классификацию данных, интегрировать с существующими SIEM/SOAR и обучить вашу команду. Мы также проводим аудит текущих процессов защиты от утечек и помогаем подготовиться к проверкам регуляторов.