Введение в основные концепции

Сабрина Хо и Джордж Уильямс ([email protected])

Вступление

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

  • График потока управления. Что такое граф потока управления? А как это относится к софту?
  • Прошивка. Это особый тип программного обеспечения, которое можно найти во многих местах, но почему оно так важно в контексте кибербезопасности?
  • Встраивание графиков: это новый метод преобразования сильно неструктурированных данных (графиков) в компактный вектор. Мы рассмотрим популярную технику для достижения этой цели.

График потока управления

Что такое графы потока управления? Если вы когда-либо писали какие-либо программы, вы можете представить их в виде потоков управления. Когда я только начал изучать Python, мне приходилось составлять график для каждой написанной мной программы. Вот простая программа с графом потока управления справа:

Но есть и другие графы потока управления для других простых программ, вот несколько дополнительных примеров:

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

Поскольку код можно представить в виде графиков, вы можете рассмотреть возможность использования алгоритмов сопоставления графов для оценки схожести кода. Для обнаружения плагиата кода использовались методы подобия кода, и здесь мы оцениваем его полезность при обнаружении вредоносных программ или уязвимостей. К сожалению, сопоставление графов может быть очень дорогостоящим. Его временная сложность и стоимость могут быть такими же плохими, как O (n³), что неизбежно выполняется медленно и иногда может быть неточным.

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

Прошивка

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

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

Встраивание графиков

Итак, как мы можем получить вложение из графа, такого как граф потока управления? Мы видели вложения графов в моих предыдущих блогах, где я превращал молекулы в векторы. Многие виды графов можно превратить в вложения графов. Это мощный метод понимания социальных сетей, молекул, нейронных сетей и многих других систем. На изображении ниже показан пример молекулы, преобразованной в векторную форму:

Вложения графов могут помочь нам быстро оценить сходство графов без затрат на сопоставление графов. Вот еще один пример графа - социальная сеть:

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

Существует множество техник преобразования графа во вложения, и DeepWalk - одна из них. На изображении ниже показаны этапы подхода DeepWalk:

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

Заключение

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