Логотип Зефирнет

Обнаружение вредоносных программ Майкрософт

Дата:

Эта статья была опубликована в рамках Блогатон по Data Science.

Введение

В рамках написания блога на тему ML или DS я выбрал приз Обнаружение вредоносных программ Майкрософт. Вот этот блог объясняет, как решить проблему с нуля.

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

Здесь я применяю прикладной алгоритм машинного обучения и статистику для решения проблемы.

  • Что такое вредоносное ПО?
  • Бизнес проблема
  • Обзор данных
  • Проблема Mappin ML
  • EDA (исследовательский анализ данных)
  • Извлечь функцию
  • Функция кодирования
  • Многомерный анализ
  • Применить модель машинного обучения
  • Окончательная модель
  • Сравнить модели
  • Заключение
  • Справка

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

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

Источник:- НАЖМИТЕ ЗДЕСЬ

Обнаружение вредоносных программ Майкрософт | Каггл
Источник

Бизнес-проблема

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

Этот набор данных содержит 9 классов вредоносных программ.

Источник: https://www.kaggle.com/c/malware-classification

Обзор данных

В этом разделе мы разобрались с данными, которые у нас есть. Так для каждой вредоносной программы. Мы дали два типа файлов. Первый файл — это файл .ASM. И второй - файлы .bytes.

Дополнительные сведения о файлах .ASM см. https://www.reviversoft.com/file-extensions/asm

Таким образом, ASM означает файл кода на языке ассемблера, давайте предположим, что вам нужно написать код на C++, и компилятор C++ берет этот необработанный код и преобразует его в файл ASM, а затем что-то называется ассемблером, и он преобразуется в байтовые файлы, и этот файл содержит только 0 и 1

Файлы .asm содержат этот тип ключевые слова, такие как «хлопать», «прыгать», «толкать», «двигаться» и т. д.

И файл байтов (необработанные данные содержат шестнадцатеричное представление двоичного содержимого файла без заголовка PE) содержат шестнадцатеричные значения, и где значение находится в диапазоне от 00 до FF

Здесь у нас всего 200 ГБ данных где 50 ГБ данных байтовых файлов и 150 ГБ - файл .asm.

Итак, название девяти вредоносных программ выглядит следующим образом:

  1. Ramnit
  2. леденец
  3. Келихос_ver3
  4. Vundo
  5. Simda
  6. Тракур
  7. Келихос_ver1
  8. Обфускатор.ACY
  9. Гатак

.ASM-файл

.text:00401030 56 push esi .text:00401031 8B F1 mov esi, ecx .text:00401043 74 09 jz short loc_40104E .text:00401045 56 push esi .text:00401046 E8 6C 1E 00 00 call [электронная почта защищена]@З ; оператор удаления (void *) .text:0040104B 83 C4 04 добавить esp, 4 .text:0040104E .text:0040104E loc_40104E: ; CODE XREF: .text:00401043j .text:0040104E 8B C6 mov eax, esi .text:00401050 5E pop esi .text:00401051 C2 04 00 retn 4

.байтовый файл

6A 04 68 00 10 00 00 68 66 3E 18 00 6A 00 FF 15 D0 63 52 00 8B 4C 24 04 6A 00 6A 40 68 66 3E 18 00 50 89 01 FF 15 9C 63 52 00 50 15 63 52 00 8 C07 00 00 CC CC CC CC CC CC CC B00 FE FF FF FF C2 CC CC CC CC CC CC CC CC CC CC B04 00 8 3 8 C09 CC CC CC CC CC CC CC CC CC CC B00 00 00 3 8 C01 CC CC CC CC CC CC CC CC CC CC B00 FD FF FF FF C00 00 3 CC CC CC CC CC CC CC CC CC 8B 2C 04 00 8D 4 D24 04D 8 F81 6 F8 82 7F 81 1B 60 C4 C15 CC CC CC CC CC CC CC CC CC CC CC CC CC 0B 23C 1 3 8B C4 24 04 CF 8F FE 1 C35 45 BA 3D C23 1 C25 CC CC CC CC CC CC CC CC CC CC CC CC CC 3B 5C 05 3 B8 4F CD 24 AE F04 E8 C1 EA 98E 7 D1 FA C1 D1 69D 2 9B F6 5B F56 B8 1 2 2A 8 F25 E95 2B C16 7B C1 D8 E1 2 C2 C1 E8 03C 2 C1 8 1 69 0D 84B C33 73B C1 2 F8 8 1 85 D6 F74 F06 33B C2 7E 6B 8C 2 5 8B D4 24D 04 D8 1D 8 F81 6 F8 82 7F

Сопоставление с проблемой ML

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

Итак, это проблема мультиклассовой классификации.

Для показателей производительности этой задачи мы используем это потеря журнала мультиклассакачества мы также используем показатели точности и полноты, которые дают лучшее представление о том, насколько точны наши моды.

Сопоставление с проблемой ML
Источник medium.com 

Потеря журнала мультикласса возвращает вероятность каждого класса.

Подробнее о журнале потерь НАЖМИТЕ ЗДЕСЬ

ЭДА

Так что в этом разделе будет выполняться куча EDA (исследовательский анализ данных) операций.

Итак, давайте пойдем и сделаем EDA. Итак, первое, что мы здесь делаем, это отделяем файлы байтов от файлов ASM. эта проблема заключается в несбалансированных наборах данных, поэтому сначала мы строим гистограммы на метках классов.

ЭДА | Обнаружение вредоносных программ Майкрософт
Источник Профиль автора на GitHub

Из этой гистограммы метки класса мы можем сказать, что класс 5 имеет очень-очень мало точек данных, а классы 2 и 3 имеют большое количество доступных точек данных.

Извлечь элемент из файлов .bytes

Итак, сначала посмотрите на файл байтов и выполните некоторые особенность техники

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

Обнаружение вредоносных программ Майкрософт
Источник Профиль автора на GitHub

Из диаграммы мы можем сказать, что функция размера файла полезна для определения метки класса.

Итак, наши вторые вещи по извлечению признаков заключаются в следующем:

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

00,01,02,03,04,05,06,07,08,09,0a,0b,0c,0d,0e,0f,10,11,12,13,14,15,16,17,18,19,1a,1b,1c,1d,1e,1f,20,21,22,23,24,25,26,27,28,29,2a,2b,2c,2d,2e,2f,30,31,32,33,34,35,36,37,38,39,3a,3b,3c,3d,3e,3f,40,41,42,43,44,45,46,47,48,49,4a,4b,4c,4d,4e,4f,50,51,52,53,54,55,56,57,58,59,5a,5b,5c,5d,5e,5f,60,61,62,63,64,65,66,67,68,69,6a,6b,6c,6d,6e,6f,70,71,72,73,74,75,76,77,78,79,7a,7b,7c,7d,7e,7f,80,81,82,83,84,85,86,87,88,89,8a,8b,8c,8d,8e,8f,90,91,92,93,94,95,96,97,98,99,9a,9b,9c,9d,9e,9f,a0,a1,a2,a3,a4,a5,a6,a7,a8,a9,aa,ab,ac,ad,ae,af,b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,ba,bb,bc,bd,be,bf,c0,c1,c2,c3,c4,c5,c6,c7,c8,c9,ca,cb,,cf,d0,d1,d2,d3,d4,d5,d6,d7,d8,d9,da,db,dc,dd,de,df,e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,ea,eb,ec,ed,ee,ef,f0,f1,f2,f3,f4,f5,f6,f7,f8,f9,fa,fb,fc,fd,fe,ff

Применение пиксельной функции к байтовым файлам

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

См: больше об этом

Профиль на GitHub | Обнаружение вредоносных программ Майкрософт
Источник Профиль автора на GitHub

Функция кодирования

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

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

Узнать больше о ЛУК.

Многомерный анализ характеристик файла .bytes

T-SNE - это, по сути, метод уменьшения размеров., поэтому сначала мы берем все данные и преобразуем их в 2-мерные, потому что, используя T-SNE, мы получаем представление об этом, полезна ли наша функция для классификации меток классов или нет.

Функция кодирования
Источник Профиль автора на GitHub

Из T-SNE мы можем сказать, что наши функции полезны для классификации меток классов.

Применение модели машинного обучения к файлам .bytes

1 Применить случайную модель

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

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

Случайная модель выглядит следующим образом: -

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

Это значение является самым худшим для нас, поэтому мы должны попытаться минимизировать потери журнала, насколько это возможно.

2 Применить KNN (классификация ближайших соседей K) к байтовым файлам

Здесь мы применяем KNN в нашем наборе данных, который представляет собой метод, основанный на соседстве, он должен взять соседнюю точку K и предсказать метки классов.

Потери при поездке и тестировании составляют 0.078 и 0.245, здесь разница потерь при поездке и тестировании очень велика, поэтому мы можем сказать, что наша модель переоснащает данные поезда.

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

3. Примените логистическую регрессию к байтовым файлам.

Мы применяем логистическую регрессию к файлу .bytes.

Потери при поездке и тесте составляют 0.1918 и 0.3168.

Наблюдая потерю журнала в поезде, тестовые данные немного превосходят данные.

Но это не классифицирует все точки данных. по точности мы можем сказать, что это не предсказывает класс 5 из-за меньшего количества данных.

4 Применить случайный лес к байтовым файлам

Здесь мы применяем RF к данным байтов, и это работает хорошо.

Потери при поездке и тесте составляют 0.0342 и 0.0971.

Судя по точности, мы можем сказать, что он предсказал почти каждую метку класса для класса 5.

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

5 Применить XGBoost к байтовым файлам

Теперь мы применяем XGBoost к данным, который представляет собой метод, основанный на модели ансамбля.

Подробнее об этом НАЖМИТЕ ЗДЕСЬ

Потери при поездке и тесте составляют 0.022 и 0.079, эти потери неплохие, чем у других моделей.

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

И Из отзыва мы можем сказать, что это правильная классификация для ярлыка почти класса.

Извлечь элемент из файлов .asm

Теперь мы извлекаем функцию из файла .asm. Все файлы составляют около 150 ГБ.

Здесь мы извлекли Функции 52 из всех важных файлов .asm.

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

 prefixes = ['HEADER:','.text:','.Pav:','.idata:','.data:','.bss:','.rdata:','.edata:', '.rsrc:','.tls:','.reloc:','.BSS:','.CODE'] коды операций = ['jmp', 'mov', 'retf', 'push', 'pop ', 'xor', 'retn', 'nop', 'sub', 'inc', 'dec', 'добавить', 'imul', 'xchg', 'or', 'shr', 'cmp', 'звонить', 'shl', 'ror', 'rol', 'jnb','jz','rtn','lea','movzx'] ключевые слова = ['.dll','std::', ':dword'] registers=['edx','esi','eax','ebx','ecx','edi','ebp','esp','eip']

Распределение размеров файлов .asm

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

Коробка | Обнаружение вредоносных программ Майкрософт

Источник Профиль автора на GitHub

Из диаграммы мы можем сказать, что размер файла как функция полезна для классификации наших данных.

Многомерный анализ характеристик файла .asm

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

Источник Профиль автора на GitHub

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

Применение модели к файлам .ASM

1 Примените случайную модель к файлам asm:

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

Следовательно, логарифмическая потеря на тестовых данных для случайной модели составляет 2.493.

2 Примените KNN (классификация ближайших соседей K) к файлам asm

Здесь мы применяем KNN в нашем наборе данных, который представляет собой метод соседства-базы, он должен взять соседнюю точку K и предсказать метки классов.

Потери при поездке и тестировании составляют 0.0476 и 0.089, здесь разница потерь при поездке и тестировании очень велика, поэтому мы можем сказать, что наша модель переоснащает данные поезда.

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

3. Примените логистическую регрессию к файлам ams

Мы применяем логистическую регрессию к файлу .asm.

Потери при поездке и тесте составляют 0.781 и 0.742.

Наблюдение за логарифмическими потерями поезда, тестовые данные, хорошо подходят.

Но это не классифицирует все точки данных. по точности мы можем сказать, что это не предсказывает класс 5 из-за меньшего количества данных.

И из-напомним, это не классифицировано-правильная метка класса для классов 5, 6, 7 и 9.

4 Применить случайный лес к байтовым файлам

Здесь мы применяем RF к данным, и это работает очень хорошо.

Потери при поездке и тесте составляют 0.0271 и 0.0462.

Судя по точности, мы можем сказать, что предсказано, что почти каждая метка класса верна, даже для класса 5.

И из отзыва мы можем сказать, что это правильная классификация для ярлыка почти класса.

И, судя по потерям журнала, он хорошо приспособлен

5 Применить XGBoost к байтовым файлам

Здесь мы применяем XGBOOST к данным, и это работает очень хорошо.

Судя по точности, мы можем сказать, что предсказано, что почти каждая метка класса верна, даже для класса 5.

Потери при поездке и тесте составляют 0.0241 и 0.0371.

И из отзыва мы можем сказать, что это правильная классификация для ярлыка почти класса.

И, судя по логарифмическим потерям, он хорошо подходит, и это также лучше, чем модель RF.

Окончательная модель

Теперь мы объединяем оба файла .asm и .bytes и применяем модель, которая лучше выполняется в отдельных файлах, и здесь лучшей моделью является XGboost.

Здесь у нас всего 66 тысяч функций, и это очень сложная задача для меня, во-первых, мы применяем TSNE, потому что это дает мне представление о том, насколько хорошо эти функции разделяют метки.

Источник Профиль автора на GitHub

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

Здесь мы выполнили многовариантный анализ этой функции файлов .asm и bytes, поэтому мы применяем T-SNE к этим данным с различными значениями недоумения, и мы можем наблюдать — красивый кластер

Следовательно, здесь мы можем использовать эту функцию для разделения точек данных.

Случайный лесной классификатор на окончательных функциях

Здесь мы применяем RF к окончательным данным, и это работает.

Потери при поездке и тесте составляют 0.03143 и 0.09624.

Судя по точности, мы можем сказать, что он предсказал почти каждую метку класса для класса 5.

И, напомним, мы можем сказать, что это правильная классификация ярлыка почти класса.

И, судя по журналу потерь, он хорошо приспособлен. следовательно, мы можем сказать, что RF работает очень хорошо для наших данных.

LGBMClassifier по конечным функциям

Здесь мы знаем, что для обоих файлов наша модель победителя — XGBOOST, но в последней функции мы применяем lightgbm, потому что наше время вычислений xgboost очень велико, а lightgbm немного быстрее, чем xgboost, поэтому мы применяем здесь LGBM, и оба делают одно и то же.

Здесь мы применяем LGBM к окончательным данным, и это работает.

Судя по точности, мы можем сказать, что он предсказал почти каждую метку класса для класса 5.

И можно сказать, что это правильно — классификация для почти классового ярлыка.

И, судя по логарифмическим потерям, он хорошо подходит, и это не модель RF. и мы получили здесь тестовую потерю 0.01, следовательно, LGBM/XGBOOST работает с нашими данными.

Сравнить модели

Сравнить модели | Обнаружение вредоносных программ Майкрософт
Источник Профиль автора на GitHub

Заключение

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

2. В наших данных присутствуют 2 типа файлов, первый - это файлы .bytes, а второй - файл .asm.

A. В байтовых файлах они содержат шестнадцатеричные значения.

B. И в файле .asm они содержат некоторые специальные ключевые слова, такие как pop, push и т. д.

3. Здесь мы сначала разархивируем данные и разделим оба типа файлов, и размер этих данных составляет примерно 200 ГБ. так что это очень сложная вещь здесь для нас.

4. Здесь наш подход заключается в том, что сначала мы анализируем файлы .bytes, а затем переходим к анализу файлов .asm.

5. Сначала мы берем файл .bytes, и мы знаем, что он содержит шестнадцатеричное значение, а шестнадцатеричные значения лежат в диапазоне от 00 до FF, поэтому мы применяем простой биграммный BOW и делаем здесь простой подсчет для каждого файла, а также применяем функция пикселя, которая означает, что мы сначала конвертируем каждый файл в изображение и берем первые 100 пикселей.

6. Мы знаем, что минимальное значение логарифмических потерь равно 0, а максимальное значение равно бесконечности, поэтому сначала мы строим одну случайную модель и находим максимальные логарифмические потери.

7. После случайной модели мы строим другую модель, такую ​​как LR, RF, KNN, xgboost, и проверяем, какая модель дает низкий лог-лосс.

8. Теперь мы берем файл .asm и находим 53 специальных ключевых слова, которые очень важны для файла .asm.

9. Здесь мы также применяем другую модель, такую ​​как KNN, LR, RF и т. д.

10. Теперь мы объединяем обе функции файлов и применяем RF и XGBOOST/LGBM.

11. Используя XGBOOST/LGBM, мы получили тестовую потерю 0.01.

Надеюсь, вам понравилась моя статья об обнаружении вредоносных программ Microsoft. Если у вас есть какие-либо сомнения, прокомментируйте ниже. Прочтите другие статьи о Analytics Vidhya Блог.

Справка

https://towardsdatascience.com/malware-classification-using-machine-learning-7c648fb1da79

https://www.kaggle.com/c/microsoft-malware-prediction

https://www.appliedaicourse.com

Связаться со мной

Материалы, показанные в этой статье, не принадлежат Analytics Vidhya и используются по усмотрению Автора. 

Источник: https://www.analyticsvidhya.com/blog/2022/01/microsoft-malware-detection/

Spot_img

Последняя разведка

Spot_img