Привет, Хабр!

Меня зовут Валерия Чулкова, я продакт‑менеджер R‑Vision TIP. Сегодня вместе с Анастасией Перковой и Сергеем Ивановым мы расскажем про сервис для распознавания отчетов о киберугрозах, созданный командой экспертов в области машинного обучения R‑Vision. В этой статье мы объединили усилия ML‑разработчика и двух ML‑аналитиков.

В одном из прошлых материалов мы рассказали о разных источниках данных Threat Intelligence, о форматах и культуре обмена ими. Помимо машиночитаемых «фидов» существует огромное количество ценной информации, которую можно найти в статьях и отчетах исследователей киберугроз. Однако на их изучение требуется много времени, поэтому мы создали сервис, который обрабатывает «человеческие» тексты и вычленяет из них полезную при расследовании событий ИБ информацию.

Давайте рассмотрим значение важных терминов для этой статьи: 

Именованная сущность — последовательность элементов текста, которая представляет собой наименование объекта реального мира, например, имени человека, организации, названия географического объекта и т.п 

Распознавание именованных сущностей (Named Entity Recognition, NER) — задача, направленная на поиск в тексте последовательности элементов, которая представляет собой название объекта реального мира (ФИО человека, город, страну и т.п.).

Распознавание именованных сущностей в Cyber Threat Intelligence текстах — достаточно популярная задача. Для ее решения, помимо классического подхода с LLM (large language model) используются дополнительные механизмы расширения контекста с помощью разноуровневых эмбеддингов (character-level/word-level/POS (part of speech)), регулярных выражений, парсинга,грамматических зависимостей и т.д.¹ ²

Допустим, у нас есть отчет исследователя об активно распространяемом экземпляре вредоносного ПО AlienFox, который угрожает организациям определенной отрасли (или страны в целом). Если мы хотим выделить в этом отчете все упоминания вредоносного ПО, то в данном случае задача NER — обозначить фрагмент текста AlienFox как имя вредоносного ПО.

Какие подходы мы используем?

Rule-based 

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

Регулярные выражения

Регулярные выражения — правила, основанные на паттерне символов. Такой тип правил подходит в основном для слабовариативных сущностей (сущности, у которых ограниченное число вариантов написания и нет пограничных толкований). 

Например, такой подход используется для извлечения уязвимостей программного обеспечения, которые упоминаются в тексте с помощью кодов CVE (Common Vulnerabilities and Exposures system).

В других случаях этот механизм крайне редко используется в одиночку без подкрепления другими подходами расширения контекста или NER. Это объясняется тем, что простого посимвольного соответствия часто недостаточно для однозначной идентификации именованной сущности

В нашем случае мы даем этот контекст с помощью паттернов, грамматик, зависимостей и LLM. Подробнее о них расскажем дальше в тексте. 

Например, у нас есть регулярное выражение, описывающее построение URL. По нему мы найдем все слова в тексте статьи, которые по своему строению являются URL. Но не всякий URL, упомянутый в статье, — это индикатор компрометации (IoC, Indicator of Compromise). Автор отчета мог упомянуть ссылку на похожее исследование или литературный источник. Все это нельзя будет однозначно считать индикатором, указывающим на вредоносную активность.

Паттерны грамматик зависимостей

Грамматики зависимостей — одна из формальных моделей в структурной лингвистике, где предложение представляется в виде иерархии компонентов (в нашем случае это токены), между которыми установлены отношения зависимости. 

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

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

Суть подхода состоит в следующем:

  • описать шаблоны возможных зависимостей между токенами, основываясь на атрибутах токенов и правилах грамматики английского языка. Part-of-speech tagging и токенизация выполняются встроенными инструментами spaCy для английского языка. Исходными данными для формирования шаблонов являются тексты наборов данных для обучения LLM и схожие по стилистике и формату тексты из будущих источников фида;

  • применить описанные шаблоны в реализации с Dependency Matcher для поиска найденных совпадений паттернам.

Dictionary-based

Это прямое сопоставление последовательности символов со словами заданного словаря. Подход, очень близкий по своей сути к rule-based.

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

Пример dictionary-based подхода представлен ниже.

Machine learning (ML) и подходы deep learning

К этой группе относятся подходы на основе алгоритмов машинного обучения и глубоких нейросетей. В эту категорию попадают многочисленные ML-алгоритмы и LLM, которые решают задачу классификации, поскольку NER в этом случае сводится к классификации токенов.

Для сведения к задаче классификации число классов обучаемой модели нейронной сети увеличивается в соответствии со схемой IOB.

IOB (inside-outside-begin) — подход к разметке данных, при котором метку «B» (begin) получает токен-начало именованной сущности; «I» (inside) — токен внутри именованной сущности (не является началом); «O» (outside) — токен, не являющийся частью какой-либо именованной сущности.³

Одной из самых популярных групп LLM, практически State-of-the-Art в задачах NLP, являются архитектуры нейронных сетей, основанных на BERT. Такие архитектуры уже успешно показывали себя в исследованиях по извлечению именованных сущностей в текстах CTI.⁴ ⁵

BERT (Bidirectional Encoder Representations from Transformers) в своей архитектуре использует механизм двунаправленного внимания. Он позволяет провести предварительную подготовку глубоких двунаправленных представлений немаркированного текста путем совместного обобщения левого и правого контекста во всех слоях.⁶

На данный момент существует множество производных от BERT архитектур, но наше внимание остановилось на RoBERTa.

Архитектура RoBERTa является более гибкой и оптимизированной версией BERT, за счет улучшенных подходов обучения: использование динамической маскировки слов (Dynamic MLM), отказ от Next Sentence Prediction стратегии и пр. ⁷

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

 С ее помощью нами распознаются такие имена сущностей, как:

  • имена собственные субъектов и объектов угроз, вредоносного ПО, кампаний;

  • типы вредоносного ПО;

  • временные метки; 

  • индикаторы компрометации.

В общем, это все то, что обладает очень большой вариативностью в написании или требует для идентификации контекста вокруг себя, который проблематично охватить подходами rule-based.

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

Начнем с того, что для использования моделей ML в конкретных задачах необходимо обучить ее этой задаче. Если говорить простым языком: модель, которая умела находить в данных кошечек и собачек, без дополнительного обучения не сможет распознать в них слона. Для этого класса объектов ей не известны ни характерные признаки, ни чем она отличается от тех же кошечек и собачек. 

Этот пример применим и к нашей работе — недостаточно взять обученную кем-то модель и эксплуатировать в своих задачах. С большой вероятностью такой подход из-за специфичности задачи не может обеспечить приемлемого качества.

Жизненный цикл проекта с использованием ML предполагает непрерывный сбор/обработку данных и улучшение уже существующих подходов/моделей. Причем для первого пункта будет тратиться до 80% времени, так как качество обученной модели в первую очередь зависит от количества, вариативности и качества данных для обучения.

Для оценки качества обучения используется F1-мера, представляющая собой среднее гармоническое точности (precision) и полноты (recall). 

Хорошие метрики не исключают возникновение ложных срабатываний по причине особенностей языка. Исследователи пишут новые отчеты, используя новые формулировки и словесные обороты для описания тех или иных событий. В процессе анализа обратной связи могут быть выявлены новые характеристики сущности, которых в ранних данных не было. Всё это динамично развивается и требует регулярных корректировок в работе модели и механизмов NER в целом.

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

Набор данных

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

  • RST TI Reports: это агрегатор аналитических отчетов о киберугрозах. 

  • APTNER: открытый набор данных создан специально для решения распознавания именованных сущностей (NER) в CTI. APTNER содержит 21 категорию именованных сущностей (например, IP, URL, вредоносное ПО, местоположение и.т.д.), что делает его более насыщенным по сравнению с другими наборами данных для аналогичных задач. 

  • DNRTI: этот набор данных также специально разработан для решения задачи NER в CTI. В отличие от APTNER в нем упомянуто меньшее количество категорий именованных сущностей (13), но при этом DNRTI отличается общим объемом отчетов внутри себя.

  • Иные публичные источники

Размеченные наборы данных были отформатированы и переразмечены под задачи, которые нам было необходимо решить (некоторые имена классов переименованы, другие неиспользуемые исключены). В остальных случаях тексты подвергались полноценному процессу разметки. 

Размеры выборок для обучения и валидации представлены ниже.

Обучающая выборка

Валидационная выборка

Размер выборки в отчетах

165

53

Размер выборки в предложениях

25477

8826

Разметка

Процесс сбора и разметки качественного датасета практически для любого проекта с ML — долго, дорого, больно и неприятно. 

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

Что касается длительности нашей разметки, то над ней работали группа разметчиков и валидаторов около 4 месяцев. Роль разметчиков — выделять в текстах датасета именованные сущности, роль валидаторов — проверять корректность разметки с точки зрения предметной области и особенностей языка.

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

Другая, уже привычная сложность почти всех задач NLP — различные неоднозначности в рамках выбранного языка. Тут можно упомянуть омонимы, устойчивые выражения, словесные обороты, характерные языку, и т.д. Со стороны участников разметки это требует достаточно хорошего знания языка. Сюда же можно отнести различного рода пограничные случаи и технические особенности, например: 

  • Когда одним словом в тексте могут быть названы одновременно несколько сущностей (иногда кампании названы по имени субъекта угрозы, субъект угрозы может быть созвучен с именем вредоносного ПО и пр.).

  • Неоднозначность определения пробельных символов и различных знаков препинания к части именованной сущности (это просто точка — знак препинания или точка как часть имени файла/вредоносного ПО/URL-адреса и пр.).

Каким должен быть текст, чтобы его качественно распознать?

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

Текст должен описывать инцидент киберугрозы с упоминанием IoC и/или уязвимостей. Путем анализа разметки текстов блогов о киберугрозах было отмечено, что именно упоминание этих сущностей однозначно идентифицирует текст как отчет об киберугрозе.

Размер текста должен быть более 500 слов, так как это приблизительно соответствует размеру контекстного окна используемой нами языковой модели. Поэтому тексты меньшего объема могут иметь недостаточную репрезентативность и малый контекст для однозначного распознавания именованных сущностей.

Как можно повысить качество?

Качество реализации любого ML-решения в первую очередь сильно зависит от качества данных. В момент написания статьи F1-мера экспериментальной версии модели достигала около 0.85, но на тестовых данных метрики по некоторым классам могли неприятно проседать из-за недостаточной репрезентативности данных при обучении. Поэтому параллельно велись работы как по увеличению объема обучающих данных, так и по их чистоте. Сейчас, после тщательной работы над данными, метрика качества новой модели выросла до 0.93.

Мы решили поэкспериментировать с обучением модели на «хорошем» наборе данных. Хороший набор данных должен отвечать нескольким критериям (не обязательно всем, но желательно многим из следующих):

  1. Корректная разметка: все именованные сущности в тексте должны быть правильно выделены и помечены соответствующими метками.

  2. Консистентность: метки сущностей должны быть применены согласованно и однозначно во всем наборе данных.

  3. Репрезентативность: датасет должен содержать достаточное разнообразие текстов и сущностей, чтобы обеспечить обучение модели на различных контекстах.

  4. Объем: датасет должен быть достаточно большим, чтобы модель могла обучиться на разнообразных примерах.

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

Датасет, который удовлетворяет этим критериям, позволяет модели NER обучаться на качественных данных, что повышает ее точность и способность к распознаванию именованных сущностей в новых текстах.

Обучаем модель на чистом датасете

Чистый датасет — набор данных, который был предварительно обработан и очищен от шума, ошибок и других аномалий. Это важно для обучения модели NER, так как качество данных напрямую влияет на качество обученной модели. Отметим, что этот датасет нельзя назвать сбалансированным (об эксперименте с чистым сбалансированным датасетом — читайте ниже).

Цель: получить более качественную модель.

Обучить модель на чистом сбалансированном датасете

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

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

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

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

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

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

Цель: выяснить, как сильно дисбаланс сущностей влияет на качество распознавания. Результат даст понять, нужно ли нам бороться за баланс данных, и если баланс дает сильный профит, то такая модель пойдет в прод.

Формального определения несбалансированности данных не существует. То есть нет четких коэффициентов\процентов допустимого дисбаланса классов, которого можно придерживаться как эталона. Тем не менее практика специалистов показывает, что если среди всех классов один в несколько раз больше/меньше остальных, то стоит поработать над балансировкой.

Например, если набор данных содержит два класса и соотношения их объемов 60/40 % — это некритично. Но если бы один класс составлял 90% датасета, а второй 10% — стоило бы обратить внимание. Возможно, малый класс представлен недостаточно, чтобы его качественно распознать и т.д.

Процесс:

  1. Сначала был проведен анализ набора данных. Собрана статистика по количеству именованных сущностей каждого класса. Был зафиксирован видимый перевес в пользу класса Malware_name. Он составил около 30% набора данных, когда остальные 4 класса не более 20%. Если в цифрах то Malware_name примерно на 2 000 образцов превышал по количеству остальные классы.

  2. Существует множество стратегий балансировки, но мы начали с простой — выборка с недостатком. В таком случае избыточный класс урезается приблизительно до размера остальных. В нашем случае это сокращение класса Malware_name с 7 569 приблизительно до 5 000. Почему приблизительно? Потому что балансировка таким подходом в случае текстовых данных выполнялась вручную, и в некоторых случаях было необходимо оставлять предложения, так как они содержали много контекста для других сущностей.

  3. Модель была обучена на сбалансированном датасете.

  4. На тестовом наборе проверили модель, обученную на сбалансированном датасете, и модель, обученную на несбалансированных данных. 

Было отмечено, что стали проседать метрики для других сущностей у «сбалансированной» модели. При детальном анализе ее разметок и сравнении с «несбалансированной» заметили, что сбалансированная не распознает часть контекста для сущностей, которые указываются в предложениях в связке с Malware_name (например, malware type или threat actor name).

Результат: ​​балансируя класс, мы теряем много контекста для других сущностей.

Вывод

В результате мы столкнулись с тем случаем, когда небольшой дисбаланс допустим. В нашей ситуации переизбыток класса Malware_name на деле оказался незначительным для модели, а его сокращение привело к потере контекста для других сущностей. Отчет Malware_name является важным контекстом для IoC-ов, Threat Actor и др.

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

  • старая модель против модели с балансировкой: 85,14% против 86,29%

  • старая модель против модели с дисбалансом: 85,14% против 93,42%

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

Список литературы:
  • ¹ Liu P., Li H., Wang Z., Liu J., Ren Y., Zhu H. Multi-features based Semantic Augmentation Networks for Named Entity Recognition in Threat Intelligence. // 2022 26th International Conference on Pattern Recognition (ICPR). IEEE, 2022. – 1557–1563 pp.

  • ² Zhang K., Chen X., Jing Y., Wang S., Tang, L. Research on Named Entity Recognition Methods of Network Threat Intelligence. // Cyber Security: 63 19th China Annual Conference: CNCERT 2022 (Beijing, China, August 16–17 2022). Singapore: Springer Nature Singapore, 2022. – 213–224 pp. 

  • ³ Ramshaw L.A., Marcus M.P. Text chunking using transformation based learning. // Natural language processing using very large corpora, 1999. – 157–176 pp.

  • Evangelatos P., Iliou C., Mavropoulos T., Apostolou K., Tsikrika T., Vrochidis S., Kompatsiaris, I. Named entity recognition in cyber threat intelligence using transformer-based models. // 2021 IEEE International Conference on Cyber Security and Resilience (CSR). IEEE, 2021. – 348–353 pp.

  • Alam M.T., Bhusal D., Park Y., Rastogi N. CyNER: A Python Library for Cybersecurity Named Entity Recognition. 2022. URL: https://arxiv.org/abs/2204.05754 

  • Devlin J., Chang M.W., Lee K., Toutanova K. Bert: Pre-training of deep bidirectional transformers for language understanding. 2018. URL: https://arxiv.org/abs/1810.04805 

  • Liu Y., Ott M., Goyal N., Du J., Joshi M., Chen D., Levy O., Lewis M., Zettlemoyer L., Stoyanov V. Roberta: A robustly optimized bert pretraining approach. 2019. URL: https://arxiv.org/abs/1907.11692

Комментарии (2)


  1. yafice
    15.05.2024 14:35

    Все таки чистых данных для обучения недостаточно? Как вы думаете в вашем случае можно использовать генерацию чистых данных для ликвидации диспаланса при обучении?


    1. rvteam Автор
      15.05.2024 14:35

      Добрый день!

      Все таки чистых данных для обучения недостаточно?

      Да, для качественного результата большУю роль также играет общий объем выборки, репрезентативность и консистентность набора данных. Что касается балансировки, на практике для нее нет четких правил, по которым можно понять допустимый дисбаланс в количестве объектов классов, при котором данные станут «идеальными».

      В рассмотренном нами случае выбранный способ балансировки (выборка с недостатком) не дал значительного прироста качества, т. к. исключенные тексты содержали неявный контекст не только для балансируемого класса. Сказалась специфика задачи и данных. Существуют и другие способы балансировки, целью которых является расширить «маленькие» по объему классы. С ними мы планируем в будущем поэкспериментировать.

      Как вы думаете в вашем случае можно использовать генерацию чистых данных для ликвидации дисбаланса при обучении?

      Можно попробовать генерировать на основании имеющихся данных синтетические тексты с помощью генеративных LLM и использовать такой подход для расширения небольших по объему классов.

      Но к такому набору будет также применена проверка человеком, как и при валидации реальных отчетов. Мы не можем на 100% исключить возможные галлюцинации и шум в синтетических данных.