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

Я перейду к введению в машинное обучение и к тому, как это работает, потому что есть много ресурсов, объясняющих это.

Алгоритмы машинного обучения могут выполнять два типа классификации: контролируемая (если есть помеченные данные) и неконтролируемая (если нет). Этот пост будет работать с контролируемыми данными.

Помеченные данные, использованные в этом эксперименте, были разделены на безобидные и вредоносные, которые состоят из 991 известного файла и 428 известных вредоносных программ. В качестве файлов использовались двоичные файлы Windows, а к доброкачественным файлам относятся двоичные файлы, которые находятся в папке Windows.

Среди алгоритмов контролируемых данных самыми известными являются наивный байесовский алгоритм, K-ближайший сосед (kNN), машина опорных векторов (SVM) и деревья решений. Мы будем работать с деревьями решений.

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

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

Итак, мы можем использовать классификатор случайного леса, передающий FeatureHash, обучающие примеры (двоичные файлы) и метки (доброкачественные или вредоносные). После завершения обучения детектор и хеш-код сохраняются для использования в будущих двоичных файлах.

После этого мы можем протестировать обученную сеть с новыми двоичными файлами. Поскольку это наша реализация, мы можем выбрать скорость, при которой файл будет классифицироваться как безопасный или вредоносный. Выбранная ставка составила 65%.

Сначала мы можем протестировать известный доброкачественный файл, исполняемый файл Putty.

Extracted 5619 strings from data/ch8/scan_file_path/putty_w64.exe
It appears this file is benign. [0.640625]

Файл был классифицирован как безопасный с вероятностью 64% быть вредоносным, что близко, но ниже, к определенным нами 65%. Теперь давайте протестируем файл, который был загружен с фишингового письма.

Extracted 7217 strings from data/ch8/scan_file_path/OneDrive.bin
It appears this file is malicious! [0.734375]

Теперь файл был классифицирован как вредоносный с вероятностью 73%, что выше определенных нами 65%.

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

Вы могли заметить, что здесь нет кода. Это потому, что это всего лишь простое введение, и, как я уже упоминал ранее, это начало серии статей, которые я сделаю. Другая причина, по которой я не поместил здесь код, заключается в том, что в этом посте я просто воспроизвел эксперимент, который можно найти в книге Saxe and Sander's Malware Data Science, опубликованной No Starch Press, и код можно загрузить в книге Веб-сайт.