DLP с нуля: практическое руководство по защите от утечек данных
- Часть 1. Основы DLP: теория для практиков
- Часть 2. Подготовка инфраструктуры
- Часть 3. Установка и настройка OpenDLP
- Часть 4. Установка агентов OpenDLP
- Часть 5. Классификация данных: что защищать?
- Часть 6. Создание политик DLP
- Часть 7. Мониторинг ключевых каналов утечек
- Часть 8. Анализ инцидентов и реагирование
- Часть 9. Интеграция DLP с другими системами
- Часть 10. Юридические аспекты DLP
- Часть 11. Создание DLP своими руками
- Часть 12. Тестирование DLP
- Часть 13. Заключение и дальнейшие шаги
О чем этот курс
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
(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
- Центр управления — консоль для настройки политик, просмотра инцидентов, отчетов
- Агенты (Endpoint DLP) — устанавливаются на рабочие станции, контролируют все действия пользователя
- Шлюзы (Network DLP) — анализируют трафик на сетевом уровне (email, web, FTP)
1.3 Методы обнаружения конфиденциальной информации
| Метод | Описание | Пример |
|---|---|---|
| Цифровые отпечатки | Хеширование документов, создание шаблонов | Документ с грифом “Коммерческая тайна” |
| Регулярные выражения | Поиск по шаблонам | Номера паспортов, ИНН, кредитных карт |
| Ключевые слова | Поиск по словарям | “Секретно”, “Конфиденциально” |
| Морфологический анализ | Анализ текста с учетом словоформ | Учет склонений и спряжений |
| Статистический анализ | Выявление аномалий | Внезапная отправка большого объема данных |
| ML/поведенческий анализ | Профилирование пользователей | Нехарактерное поведение сотрудника |
1.4 Обзор open-source DLP решений
| Решение | Тип | Плюсы | Минусы | Для кого |
|---|---|---|---|---|
| OpenDLP | Endpoint | Бесплатно, агенты для Windows/Linux, централизованное управление | Сложная установка, устаревший интерфейс | Изучение DLP, малые проекты |
| MyDLP | Endpoint + Network | Веб-интерфейс, модульная архитектура | Не обновлялся с 2017 | Исторический интерес |
| Endpoint Protector (Community) | Endpoint | Профессиональное решение, есть бесплатная версия | Ограничения в бесплатной версии | Коммерческое внедрение |
| OpenDLP-GUI (форк) | Endpoint | Современный форк с веб-интерфейсом | Мало документации | Те, кому нужен современный OpenDLP |
| Cuckoo Sandbox | Анализ | Анализ подозрительных файлов | Не полноценная DLP | Дополнение к DLP |
В этом курсе мы сосредоточимся на OpenDLP (как классическое open-source решение) и на практических подходах к созданию DLP своими руками с использованием существующих инструментов.
Часть 2. Подготовка инфраструктуры
2.1 Требования к оборудованию
Для учебного проекта (OpenDLP + несколько агентов):
| Компонент | Минимум | Рекомендуется |
|---|---|---|
| Сервер DLP | 2 CPU, 4 ГБ RAM | 4 CPU, 8 ГБ RAM |
| Агентские машины | 1 CPU, 1 ГБ RAM | 2 CPU, 2 ГБ RAM |
| Диск сервера | 50 ГБ | 100 ГБ SSD |
| ОС сервера | Ubuntu 20.04/22.04 LTS | Ubuntu 22.04 LTS |
| ОС агентов | Windows 10/11, Ubuntu | Windows 10/11, Ubuntu |
2.2 Создание виртуальной среды
Для тестирования DLP нам понадобится несколько виртуальных машин:
- Сервер DLP (Ubuntu Server)
- Клиент Windows (Windows 10/11) — с установленным агентом
- Клиент 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 mysqlCREATE 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. Определите типы данных
| Категория | Примеры | Регулятор |
|---|---|---|
| Персональные данные (ПДн) | ФИО, паспорт, телефон, email | 152-ФЗ, GDPR |
| Коммерческая тайна | Финансовые отчеты, стратегии, клиентские базы | ГК РФ |
| Платежная информация | Номера карт, CVV, банковские счета | PCI DSS |
| Интеллектуальная собственность | Исходный код, патенты, чертежи | ГК РФ |
| Медицинская информация | Диагнозы, истории болезней | 323-ФЗ, HIPAA |
Шаг 2. Найдите, где хранятся данные
Проведите аудит:
- Файловые серверы
- Базы данных
- Облачные хранилища
- Рабочие станции
- Email-архивы
Шаг 3. Создайте “эталонные” образцы
Для каждого типа данных создайте несколько образцов:
- Документ с паспортными данными
- База данных клиентов (тестовая)
- Финансовый отчет
- Исходный код
5.2 Создание цифровых отпечатков (fingerprints)
Шаг 1. Загрузите образцы в OpenDLP
В веб-интерфейсе перейдите в раздел Fingerprints → Upload и загрузите ваши образцы.
Шаг 2. Создайте правила для регулярных выражений
В разделе Regex Patterns создайте шаблоны:
| Название | Регулярное выражение | Описание |
|---|---|---|
| Паспорт РФ | \d{4} \d{6} | Серия и номер паспорта |
| ИНН | \d{10}|\d{12} | ИНН физического или юридического лица |
| Номер карты | \d{4}[- ]?\d{4}[- ]?\d{4}[- ]?\d{4} | Номер кредитной карты |
[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} | Адрес электронной почты |
Шаг 3. Создайте словари ключевых слов
В разделе Keywords создайте списки:
- Секретно, Конфиденциально, Коммерческая тайна
- Для служебного пользования
- Не подлежит разглашению
Часть 6. Создание политик DLP
Политики DLP определяют, что, где и при каких условиях считается нарушением.
6.1 Структура политики
Политика DLP обычно содержит:
- Название — что она контролирует
- Каналы — email, web, USB, печать, буфер обмена
- Условия — какие данные искать (регулярки, ключевые слова, отпечатки)
- Действия — блокировать, уведомить, логировать, запросить подтверждение
- Исключения — доверенные пользователи, исключенные приложения
6.2 Создание политики в OpenDLP
Шаг 1. Перейдите в раздел Policies → Create New Policy
Шаг 2. Настройте базовые параметры
| Поле | Значение |
|---|---|
| Name | Защита ПДн |
| Description | Блокировка передачи персональных данных |
| Status | Enabled |
| Severity | High |
Шаг 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
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
- Создайте тестовый файл
test_passport.txt:Паспорт: 1234 567890 ФИО: Иванов Иван Иванович - Отправьте его на внешний email
- Проверьте, что DLP заблокировала отправку
Сценарий 2: Копирование на USB
- Подключите чистую флешку
- Скопируйте файл с конфиденциальными данными
- Проверьте, что файл перемещен в карантин
Сценарий 3: Загрузка в облако
- Зайдите в Google Drive через браузер
- Попробуйте загрузить файл с коммерческой тайной
- Проверьте, что загрузка заблокирована
Сценарий 4: Печать документа
- Откройте документ с пометкой “Конфиденциально”
- Отправьте на печать
- Проверьте, что печать заблокирована или залогирована
12.2 Проверка производительности
Метрики для замера:
| Метрика | Ожидание | Метод замера |
|---|---|---|
| Задержка при копировании файлов | < 1 сек | Засечь время копирования с DLP и без |
| Нагрузка на CPU агента | < 5% | Диспетчер задач |
| Потребление RAM агентом | < 200 МБ | Диспетчер задач |
| Время доставки алерта | < 10 сек | От отправки до получения в консоли |
| Количество ложных срабатываний | < 5% | Анализ инцидентов |
12.3 A/B тестирование
- Группа А (без DLP) — несколько тестовых пользователей работают без контроля
- Группа B (с DLP) — пользователи с установленным агентом
- Сравните количество инцидентов и скорость работы
Часть 13. Заключение и дальнейшие шаги
13.1 Что мы построили
Мы создали полноценную DLP-систему, которая:
- Устанавливает агенты на Windows и Linux
- Контролирует основные каналы утечек (email, web, USB, печать, буфер обмена)
- Обнаруживает конфиденциальные данные по регулярным выражениям, ключевым словам и цифровым отпечаткам
- Блокирует или логирует нарушения в соответствии с политиками
- Позволяет расследовать инциденты и собирать доказательства
- Интегрируется с SIEM и SOAR
- Соответствует законодательным требованиям
13.2 Чек-лист внедрения DLP
- Проведена инвентаризация конфиденциальных данных
- Утвержден перечень защищаемой информации
- Разработаны политики DLP
- Подготовлены юридические документы (приказы, согласия)
- Развернут сервер DLP
- Установлены агенты на все рабочие станции
- Настроены все каналы мониторинга
- Проведено тестирование
- Обучены администраторы DLP
- Оповещены сотрудники о мониторинге
- Настроена интеграция с SIEM/SOAR
- Разработан регламент реагирования на инциденты
13.3 Рекомендации по развитию
Переход на коммерческую DLP — если open-source решение перестало справляться, рассмотрите:
- Solar Dozor
- InfoWatch Traffic Monitor
- SearchInform
- StaffCop
Внедрение DCAP (Data-Centric Audit & Protection) — защита данных, а не каналов
- Классификация данных
- Контроль доступа на уровне файлов
- Шифрование данных
CASB (Cloud Access Security Broker) — контроль облачных сервисов
- Shadow IT detection
- Управление доступом к SaaS
UEBA (User and Entity Behavior Analytics) — выявление аномалий поведения
- Профилирование пользователей
- Обнаружение инсайдеров
IRM (Information Rights Management) — защита документов на уровне прав
- Контроль доступа к документам даже после их отправки
- Водяные знаки, запрет печати
Практическое задание
- Разверните OpenDLP на сервере
- Установите агенты на тестовые Windows и Linux машины
- Создайте политику для защиты ПДн (паспортные данные)
- Проведите тесты всех каналов утечек:
- Отправьте файл с тестовыми данными на Gmail
- Скопируйте файл на USB-флешку
- Попробуйте загрузить файл в облако
- Отправьте документ на печать
- Проанализируйте инциденты в консоли
- Настройте отправку уведомлений в Telegram
- Интегрируйте DLP с SIEM (по желанию)
Нужна помощь?
Если вам нужно внедрить DLP в продуктовую среду, не хватает экспертизы или вы хотите передать эту сложную задачу профессионалам — обратитесь в компанию «Стратегия Ра». Мы поможем спроектировать архитектуру, развернуть и настроить DLP (как на базе open-source, так и коммерческие решения), разработать политики, провести классификацию данных, интегрировать с существующими SIEM/SOAR и обучить вашу команду. Мы также проводим аудит текущих процессов защиты от утечек и помогаем подготовиться к проверкам регуляторов.