Авторы: Андрей Котайе, Тибериу Борос, Кумар Викрамджит и Вивек Малик, команда Adobe Security Intelligence.

В сфере безопасности атаки типа Жизнь за счет земли (LotL или LOTL) не новы. Злоумышленники используют законное программное обеспечение и функции для нацеливания на системы и проведения вредоносных атак много лет. И хотя это не ново, LotL по-прежнему остается одним из предпочтительных подходов даже для высококвалифицированных злоумышленников. Почему? Потому что хакеры, как правило, не изобретают велосипед и предпочитают вести себя сдержанно, то есть не оставлять следов, таких как случайные двоичные файлы или сценарии в системе. Интересно, что именно из-за этих скрытных действий часто бывает очень сложно определить, какие из этих действий являются действительным системным администратором, а какие — злоумышленником. Именно поэтому статические правила могут вызвать так много ложных срабатываний и почему компромиссы могут остаться незамеченными.

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

Команда специалистов по безопасности в Adobe решила помочь решить эту проблему. Используя открытый источник и другие репрезентативные данные об инцидентах, мы разработали динамичную и надежную программу под названием LotL Classifier, а затем мы открыли ее для более широкого сообщества.

Классификатор LotL уникален, потому что он использует контролируемый подход к обучению — это означает, что он сопоставляет входные данные с выходными на основе примеров пар вход-выход.

Классификатор LotL состоит из двух основных компонентов:

· Извлечение признаков

· Алгоритм классификатора на основе ML

Извлечение признаков

Компонент Feature Extraction (FE) принимает входные данные из открытого исходного кода и другие репрезентативные данные об инцидентах, также известные как атаки вредоносных программ, и фактические данные журнала, и создает набор данных, который описывает команды на основе сотен ключевых слов, регулярных выражений и статических правил. чтобы помочь обнаружить сходство.

Рисунок 1. Извлечение признаков

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

Рисунок 2. Пример сгенерированных тегов для типичной обратной оболочки.

Рисунок 3. Методы сходства

Проверка подобия

После завершения набора данных компонент FE проводит проверку подобия в качестве вторичного механизма проверки. Для этого мы используем метрику BLEU (BiLingual Evaluation Understudy): число от нуля до единицы, оценка BLEU обычно используется в машинном переводе для измерения сходства между двумя предложенными переводами предложения. Для классификатора LotL мы используем оценку BLEU, чтобы выразить функциональное сходство двух командных строк, которые имеют общие шаблоны в параметрах. Интуитивно понятно, что расстояние Левенштейна также является хорошим кандидатом для этой задачи. Однако, проводя нашу ручную проверку, мы пришли к выводу, что взвешенный BLEU дает лучшие результаты.

Рис. 4. Пример известной команды, создающей метку сходства/LOOKS_LIKE_KNOWN_LOL в обход классификации машинного обучения

Проще говоря: если он выглядит как утка, плавает как утка и крякает как утка, то, вероятно, это утка.

Классификатор машинного обучения (ML)

Используя теги, сгенерированные в процессе извлечения признаков, набор данных теперь готов для принятия решения в рамках проекта. Классификатор ML берет набор данных и помечает его как хороший или плохой. Во время тестирования мы использовали множество различных классификаторов, но наилучшие результаты с точки зрения точности и скорости мы получили, используя классификатор RandomForest. Используя пятикратную проверку, средний балл F1 составил 0,95 со стандартным отклонением 0,013 в последнем внутреннем обучении с использованием нашего набора тестовых данных, репрезентативных для ситуаций «реального мира».

В итоге проект выдает два основных набора информации о команде:

1. Решает (или классифицирует) данные во входном наборе как хорошие или плохие,

2. Создает набор тегов, описывающих саму команду, метку, которую можно конвейеризировать в различных проектах автоматизации на основе правил (RBA) или типах аномалий, таких как наш недавно открытый универсальный магазин аномалий (OSAS) .

Последнее примечание

Недавно мы открыли исходный код проекта по адресу https://github.com/adobe/libLOL. Несмотря на то, что классификатор RandomForest встроен, если вы решите использовать другой классификатор, вы можете загрузить наш проект OSAS, который поможет вам в этом. Вы можете экспериментировать с различными классификаторами и сравнивать результаты с вашими собственными наборами данных.

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