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

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

Набор данных: набор данных Malimg
Для обучения нашей модели CNN нам нужен подходящий набор данных. Набор данных Malimg широко используется и состоит из 9 339 образцов вредоносных программ из 25 различных семейств вредоносных программ. Вы можете скачать этот набор данных с paperwithcodes.com по следующей ссылке: https://drive.google.com/file/d/1M83VzyIQj_kuE9XzhClGK5TZWh1T_pr-/view. Этот разнообразный набор данных обеспечивает прочную основу для обучения нашего классификатора вредоносных программ.

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

```python
import os
import numpy as np
import scipy.misc
import array

filename = '‹Malware_File_Name_Here›'
f = open(filename, 'rb')
ln = os.path.getsize(filename)
width = 256
rem = ln% ширины

a = array.array("B")
a.fromfile(f, ln — rem)
f.close()

g = np.reshape(a, (len(a) // ширина, ширина))
g = np.uint8(g)

scipy.misc.imsave(‘‹Malware_File_Name_Here›.png’, g)
```

Выбор функций и разработка.
Когда у нас есть изображения вредоносных программ в градациях серого, важно извлечь соответствующие функции для обучения нашей модели. Мы можем использовать различные характеристики изображения, такие как текстурные узоры, частоты, интенсивность или цветовые характеристики. В этом руководстве мы сосредоточимся на использовании алгоритма Global Image Descriptors (GIST), который предлагает компактное представление изображения. Для вычисления функций GIST мы можем использовать библиотеку pyleargist. Вы можете установить эту библиотеку с помощью pip, выполнив следующую команду: `pip install pyleargist==1.0.1`. Давайте теперь рассмотрим пример того, как вычислять функции GIST:

```python
из PIL import Image
import leargist

image = Image.open('‹Image_Name_Here›.png')
new_image = image.resize((64, 64))
des = leargist.color_gist(new_image)
feature_vector = des[0:320]

```

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

```python
импорт keras
из keras.models import Sequential
из keras.layers import Dense, Dropout, Flatten
из keras.layers import Conv2D, MaxPooling2D< br /> из импорта keras.layers.normalization

Пакетная нормализация
из keras.layers.advanced_activations import LeakyReLU

# Конфигурация модели
batch_size = 64
epochs = 20
num_classes = 25

# Измените форму входных изображений
train_X = train_X.reshape(-1, 32, 32, 1)
test_X = test_X.reshape(-1, 32, 32, 1)

# Построить модель
malware_model = Sequential()
malware_model.add(Conv2D(32, kernel_size=(3, 3), активация='linear', input_shape=(32, 32, 1) ), padding='same'))
malware_model.add(LeakyReLU(alpha=0.1))
malware_model.add(MaxPooling2D(pool_size=(2, 2), padding='same'))< br /> malware_model.add(Conv2D(64, (3, 3), активация='линейный', padding='такой же'))
malware_model.add(LeakyReLU(альфа=0.1))
malware_model .add(Dense(1024, активация='линейный'))
malware_model.add(LeakyReLU(alpha=0.1))
malware_model.add(Dropout(0.4))
malware_model.add( Плотный (num_classes, активация = 'softmax'))

# Скомпилируйте модель
malware_model.compile(loss=keras.losses.categorical_crossentropy, Optimizer=keras.optimizers.Adam(), metrics=[‘accuracy’])

# Обучение модели
malware_model.fit(train_X, train_label, batch_size=batch_size, epochs=epochs, verbose=1, validation_data=(valid_X, valid_label))

```

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

```python
test_eval = malware_model.evaluate(test_X, test_Y_one_hot, verbose=0)
print('Точность теста:', test_eval[1])

```

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

Я хотел бы выразить благодарность книге «Мастерство машинного обучения для тестирования на проникновение» Чихеб Чебби. Эта книга была бесценным ресурсом на протяжении всего моего пути к созданию классификатора вредоносных программ с использованием CNN. Он предоставил исчерпывающую информацию и практические рекомендации по использованию методов машинного обучения в целях кибербезопасности. Я настоятельно рекомендую «Освоение машинного обучения для тестирования на проникновение» всем, кто интересуется изучением пересечения машинного обучения и кибербезопасности.