Обнаружение вредоносных программ с помощью сверточных нейронных сетей в fast.ai

Что такое вредоносное ПО?

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

Проникновение вредоносного ПО может иметь катастрофические последствия - последствия включают кражу данных, вымогательство или повреждение сетевых систем.

Почему так важно обнаруживать вредоносное ПО?

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

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

Почему именно глубокое обучение?

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

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

Ранние слои учатся обнаруживать низкоуровневые объекты, такие как края, а последующие слои объединяют объекты из более ранних слоев в более целостное и полное представление.

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

Как создавать образы вредоносных программ?

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

Когда у нас будет готов набор данных, мы преобразуем каждый файл в изображение в оттенках серого размером 256x256 (каждый пиксель имеет значение от 0 до 255), выполнив следующие шаги для каждого изображения:

Step 1: Read 8 bits at a time from the file.
Step 2: Treat the 8 bits as a binary number and convert it to its    corresponding integer.
Step 3: Enter the number as the pixel value.

Файл с максимальным размером 64 КБ может уместиться в изображение 256 x 256. Любой файл, имеющий размер больше 64 КБ, его оставшееся содержимое будет удалено.
С другой стороны, если размер файла меньше 64 КБ, оставшееся изображение будет дополнено нулями.

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

Подготовка набора данных

Этот шаг предельно прост. После того, как все изображения будут сгенерированы, разделите их на две папки - обучение и проверка. Каждая из этих папок будет содержать две папки, а именно - Malware и Benign.
Сохраните эти две папки в другой папке с именем «dataset.tar» и сожмите ее, чтобы создать файл .tar.

Таким образом, окончательная структура каталогов будет →
dataset.tar содержит Validation и Train. У валидации будут папки Malware и Benign. В Train будут папки Malware и Benign.

Переместите сжатую папку в тот же каталог, что и записная книжка Jupyter, содержащая код.

Реализация модели

** Модель, используемая для этой задачи, создана после выполнения урока 1 курса fast.ai (классификация домашних животных). **

Чтобы прочитать набор данных с вашего Google Диска, добавьте следующие строки кода

!pip install PyDrive #
import os
from pydrive.auth import GoogleAuth
from pydrive.drive import GoogleDrive
from google.colab import auth
from oauth2client.client import GoogleCredentials
auth.authenticate_user()
gauth=GoogleAuth()
gauth.credentials = GoogleCredentials.get_application_default()
drive = GoogleDrive(gauth)

После того, как вы запустите последние 4 строки вышеупомянутого кода, Google SDK попросит вас ввести код подтверждения. Ссылка будет упоминаться, и как только вы нажмете на нее, вы получите код безопасности.

link = '1sL4I4xNh657AhrIOOwbr6TX58ahyC'(add the link here )

Создайте переменную, которая содержит ссылку на файл .tar, содержащий данные, которые хранятся на вашем Google Диске.
Чтобы получить URL-адрес, откройте файл .tar на своем диске и получите ссылку на файл для совместного использования. Вам не нужен весь URL, только его часть. Так, например, если ваша ссылка для совместного использования - «https://drive.google.com/File/d/ 1sL4I4xNh657AhrIOOwbr6TX58ahyC / view? Usp = Sharing»
, вам нужна только та часть, которая жирным шрифтом.

Получение путей к данным

downloaded = drive.CreateFile({'id':link}) 
downloaded.GetContentFile('dataset.tar')
import tarfile
tar = tarfile.open("dataset.tar")
path = tar.extractall('DS/')
tar.close()
path = Path.cwd().joinpath("DS/dataset/")
path.ls()
data = ImageDataBunch.from_folder(path, ds_tfms=get_transforms(), size=224)
## To view data in a batch
data.show_batch(rows=3, figsize=(7,6))
## To know the number of classes in a dataset
print(data.c)
## To know the names of the classes in a dataset
print( data.classes)

Создание модели

learn = create_cnn(data, model.resnet34, metrics = error_rate)
## To know the model architecture
learn.model
## Training the model
learn.fit_one_cycle(4)
learn.fit_one_cycle(10)

Вот скриншот результата, который я получил после выполнения вышеуказанного кода:

interp = ClassificationInterpretation.from_learner(learn)
losses,idxs =  interp.top_losses()
interp.plot_top_losses(9,figsize=(9,6))

Как найти и установить хорошую скорость обучения?

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

learn.lr_find()
learn.recorder.plot()

learn.fit_one_cycle(5, max_lr=slice(1e-6,1e-4))
## Saving the weights of the model
learn.save('stage-1-malware-detection')

Примечание. Каждый раз, когда вы вызываете функцию fit_one_cycle (), веса не инициализируются повторно. Таким образом, если вы вызываете функцию одну за другой, эпохи складываются, то есть, если вы вызываете fit_one_cycle (5), а затем fit_one_cycle (10), модель обучалась примерно 15 эпох.

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

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

Будущая работа

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

Другие мои статьи, которые, я думаю, вам понравятся: D

Рад, что вы дочитали до конца статьи. 🎉
Надеюсь, ваш опыт чтения был таким же обогащающим, как и тот, который я получил при написании этой статьи. 💖

Ознакомьтесь с другими моими статьями здесь.

Если вы хотите связаться со мной, я выберу Twitter.