Привет, меня зовут Михаил Васильев, я старший специалист по машинному обучению в компании Makves (входит в группу компаний «Гарда»). Я предпочитаю называть себя deep learning engineer, так как большую часть моего рабочего времени занимает обучение и вывод в прод именно нейросетевых моделей. Описанная в статье задача довольно часто встречается на практике, но недостаточно полно освещается в доступных мне русскоязычных материалах.
В этой статье я расскажу о том, как мы в компании Makves обучали нейросети для решения задач корпоративной безопасности, а точнее, для создания умной DCAP-системы.
Вы узнаете о том, как устроена DCAP-система, которая видит, что такое нейросеть-классификатор, как подбираются пороговые значения и кое-что еще.
Представим крупную компанию с корпоративной сетью, в которой сотрудники работают, взаимодействуют друг с другом, обмениваются файлами и т. д. Файлы непрерывно создаются, копируются, изменяются. Что будет, если в общий доступ (даже только внутри корпоративной сети) попадут, например, зарплатные ведомости? А если кто-то по ошибке выложит персональные данные сотрудников? А если потом эти данные будут скопированы на флешку и утекут к конкурентам или хакерам? Для предотвращения подобных ситуаций необходимо контролировать огромное количество данных, хранящихся внутри сети в очень разных форматах, и именно эту проблему решает DCAP-система.
Для этого в нее имплементируется робот, «ползающий» по корпоративной сети и проверяющий любую информацию, к которой может получить доступ. Такой робот может замечать огромное количество проблем: давно не менявшиеся пароли, паспортные данные в открытом виде и т. д.
DCAP-система, которая видит
Что делать нашему роботу, когда он при осмотре корпоративной сети увидит тысячи (или миллионы) графических файлов? Что в них? Какие из них содержат потенциально чувствительные данные? Об обнаружении каких файлов следует сообщать специалисту ИБ? Можно попробовать использовать эвристики, например, если файл называется `продажи_отчёт_скан_финал.jpg`, либо находится в папке `ПРОДАЖИ_2024`, то, скорее всего, там данные о продажах. Проанализировать структуру каталогов и названий файлов можно довольно быстро, но что делать с файлами `/common/temp/work/unnamed/022/h/img_6657.JPG`? Тут уже не обойтись без нейросети.
Итак, задача: есть тысячи или миллионы графических файлов. Необходимо их быстро проанализировать и выдать специалисту ИБ максимально полезную информацию о содержимом файлов. Проанализируем файлы в два этапа.
Этап 1. Классификация
В разных случаях разное значение имеет конкретное содержимое файлов. Поэтому прежде всего файлы в ИТ-инфраструктуре нужно классифицировать. Их образцы легко синтезировать и обучить на них простую сеть-классификатор.
Казалось бы, классическая задача компьютерного зрения, но есть нюанс. Заказчику интересны `N` классов, на которые нужно реагировать. Однако в сети будет ещё огромное количество графических файлов, которые не относятся к искомым классам: сканы служебных записок, приказов, чертежи, скриншоты, обои для рабочего стола, фотографии с корпоративов и множество других материалов, которые могут не относится к работе. Получается, что нейросеть должна обрабатывать `N+1` классов: `N` классов заказчика и класс «другое», к которому мы будем относить все остальные изображения.
Нейросеть-классификатор
Проанализировав потребности заказчиков, мы решили дополнительно разделить класс «другое» на две категории: «другое» и «другие документы». К классу «другое» мы решили относить все изображения, на которых, скорее всего, нет рабочей информации: фотографии с корпоративов, из отпусков, детские рисунки, обои для рабочего стола и т. д. А сканы служебных записок, чертежи, приказы и блок-схемы лучше классифицировать как «другие документы». Таким образом, мы повышаем информационную осведомлённость специалиста ИБ: как минимум, можно будет быстро оценить объём дискового пространства, занятого изображениями, которые потенциально можно просто удалить.
Реализовать класс «другое» не так-то просто именно из-за потенциального разнообразия файлов. К нему могут относиться и фотографии природы, людей, машин, животных, абстрактная живопись и т. д. Сбор датасета, содержащего все возможные варианты подобных изображений, представляет собой очень сложную (и иногда нерешаемую) задачу.
На практике для решения этой проблемы хорошо зарекомендовали себя два подхода: подбор порогов значений функции потерь и сбор супер-разнообразного датасета.
Оба подхода имеют свои преимущества и недостатки. Разберём каждый.
Подбор пороговых значений
Идея довольно проста: на выходе нейросети мы получаем логиты, которые можно интерпретировать, как вероятности отнесения входных данных к тому или иному классу. Если вероятности для всех классов заказчика низкие — перед нами класс «другое». Можно обучать модель, например, с функцией потерь triplet-loss, которая соотносит входные данные с эмбеддингами в компактном евклидовом пространстве, при этом расстояния между эмбеддингами можно напрямую интерпретировать как степень схожести входных данных.
Функция потерь triplet-loss описывается следующим образом:
где $d(x_i, y_i) = ||x_i - y_i||_p$ — расстояние между эмбеддингами, а $\alpha$ — гипер-параметр функции потерь.
Идея функции достаточно проста — в процессе обучения мы стараемся минимизировать расстояние между эмбеддингами, относящимися к одному и тому же классу ($d(a_i, p_i)$), и максимизировать расстояние между эмбеддингами, относящимися к разным классам ($d(a_i, n_i)$).
К достоинствам этого подхода можно отнести простоту: нам не требуется собирать документы класса «другие», достаточно просто обучить нейросеть на классах заказчика и отсекать «другие» по пороговому значению.
Реализация дополнительных классов
Можно пойти и «в лоб» — добавить в датасет дополнительный класс и наполнять его максимально разнообразными данными. Следует понимать, что в сети заказчика потенциально могут встретиться очень разные (и часто неожиданные) файлы. Фотографии собак, кошек, людей, абстрактные картины и рисунки. Фотографии предметов мебели, интерьеров, машин. Изображения чашек, ложек и питекантропов. В идеале в нашем обучающем датасете должно содержаться огромное количество самых разных изображений.
Минусы данного подхода очевидны — собрать достаточно разнообразный класс очень сложно. С другой стороны, нельзя не отметить важное преимущество — гибкость. Например, на каком-то этапе мы обнаружили, что нейросеть неправильно классифицирует фотографию стула (в процессе обучения она стульев не видела и не знает, к какому классу его отнести). Проблема решается достаточно просто: собираем несколько фотографий стульев (и кресел, чтобы два раза не вставать), добавляем их в датасет и переучиваем сеть.
Решение
Мы решили проверить оба подхода и сравнить их применительно к нашим задачам. При сравнении подходов мы учитывали, что количество ошибок первого рода (ложно позитивных срабатываний) крайне важно уменьшать.
Мы надеялись, что нам удастся реализовать подход, основанный на использовании пороговых значений функции потерь, но, к сожалению, эксперименты показали, что на наших данных он проигрывает второму подходу именно по метрике FPR (от англ. false positive rate, доля ошибок первого рода).
Собирать данные для классов «другое» и «другие документы» оказалось довольно сложной задачей. Периодически мы сталкивались с тем, что нейросеть неправильно классифицировала те или иные изображения, так как мы не догадались добавить соответствующие примеры в обучающую выборку, но зато нам удалось существенно снизить долю ложно положительных срабатываний.
Отдельным вопросом была формулировка различия между классами. Служебная записка относится к «другим документам», а фото сотрудника с рыбалки — к «другому». А к какому классу отнести, например, фотографию выставочного стенда компании? Это явно не документ, но в то же время может считаться рабочим файлом. А если на фотографии стенда видны какие-то документы? А если фото стенда вставлено в отчёт и отсканировано?
Промежуточный итог
Задача заключалась в том, чтобы повысить информационную осведомлённость специалистов ИБ, предоставив им данные, необходимые для анализа большого количества изображений. На первом этапе мы реализовали нейросеть-классификатор, которая позволяет выделять изображения интересующих заказчиков классов, а также разделять оставшиеся файлы на документы и другое.
Этап 2. Детекция
Классификация изображений позволяет находить заранее заданные типы изображений, а также отделять потенциально не относящиеся к рабочим задачам графические файлы. Это важная часть анализа. Здесь необходимо учитывать, что графические файлы, которые мы классифицируем как «другие документы», также могут содержать чувствительную информацию. Необходимо реализовать вычленение косвенных признаков, по которым специалисты ИБ смогут судить о содержимом файлов.
Для оценки важности файлов класса «другие документы» мы решили реализовать в нейросетевом модуле дополнительный блок детекции объектов (англ. object detection). Подобные подходы часто применяются, например, для анализа видео с камер наблюдения, мы же решили воспользоваться им для обработки офисных документов.
Детекция объектов
Наш подход основан на том, что деловые документы часто содержат типовые элементы: таблицы, графики, печати, штампы, блоки реквизитов и т. д. Если обучить нейросеть обнаруживать подобные графические элементы, по результатам её работы можно будет косвенно оценить содержание изображения. Например, специалисту ИБ можно будет отфильтровать изображения, содержащие таблицы и угловые штампы, чтобы обнаружить сканы писем с какой-либо статистикой.
Мы сформировали список элементов деловых документов, которые необходимо обнаруживать. К сожалению, в открытых источниках не удалось найти наборов данных, которые были бы близки к поставленной задаче, поэтому пришлось создавать собственный датасет с нуля.
Из открытых источников мы собрали множество примеров деловых документов. Мы уделяли особое внимание разнообразию собираемых данных, чтобы в нашей обучающей выборке оказались примеры самых разных документов, разного качества (отсканированные документы и их копии, старые документы и т.д.).
После сбора достаточно крупной выборки (более 40000 индивидуальных страниц) мы приступили к разметке. Этот этап оказался довольно сложным, но не только из-за трудоемкости процесса. Для параллельной работы нескольких разметчиков мы воспользовались свободным ПО. Для консистентности мы создали инструкции по разметке.
Разметка объектов внутри деловых документов вызвала неожиданные трудности. При разметке физических объектов, как, например, пешеходов или автомобилей. При хорошем качестве изображения было легко определить, действительно ли на изображении пешеход или автомобиль и где его физические границы. Но размечаемые же сущности: таблицы, графики, штампы – скорее концепции, которые поддаются формальному определению.
Например, довольно сложно чётко сформулировать, что такое таблица. Представьте, что вы размечаете данные. Посмотрите на 6 рисунков перед вами. На каких из них изображены таблицы?
Похоже, что на первом рисунке всё-таки не таблица (даже если формально тут есть ячейки и они сгруппированы), скорее это какое-то заполненное поле. Да и на втором рисунке скорее схема. На третьем и четвёртом рисунке определённо таблицы, хотя ячейки в них не разделены. А на пятом и шестом рисунке, возможно, таблицы, но сколько их? Одна таблица на рисунок или две? И где проходят их границы? На аналогичные вопросы пришлось отвечать практически по всем детектируемым классам. Домен деловых документов очень разнообразен, поэтому подготовка датасета превратилась в весьма нетривиальную задачу.
Промежуточный итог
Для дальнейшего повышения информационной осведомлённости специалистов ИБ по содержанию графических файлов класса «другие документы» мы собрали датасет для решения задачи детекции объектов. Мы разметили основные графические элементы деловых документов, чтобы по факту их наличия на конкретном изображении специалисты ИБ могли косвенно оценивать содержание документа.
Результат
Мы реализовали сложную двухэтапную нейросетевую систему анализа графических файлов. По результатам её работы специалисты ИБ получают данные для быстрой оценки важности огромного количества документов, хранящихся внутри корпоративной сети. Вычленяемые данные позволяют фильтровать и быстро находить файлы, содержащие критически важную или чувствительную информацию.
Выводы
По итогу проведённой работы можно сделать несколько выводов:
нейросетевые технологии давно достигли той степени зрелости, которая позволяет внедрять их в продукты ИБ;
размеченные данные представляют огромную ценность, при этом сам процесс разметки данных сложен и трудозатратен;
несмотря на огромный прогресс современных мультимодальных больших языковых моделей (англ. LLM, large language models), их внедрение для решения некоторых задач часто невозможно из-за опасности утечки данных, стоимости внедрения и длительности получения результатов;
при этом небольшие нейросетевые модели лишены вышеперечисленных недостатков и могут с успехом внедряться для решения комплексных задач.
Еще больше больше вопросов защиты данных приглашаю обсудить на конференции «Сохранить всё: безопасность информации» 24 октября в конгресс-центре Soluxe. Наш генеральный директор, Роман Подкопаев выступит в секции «Платформа защиты данных. Взгляд изнутри».