Zephyrnet-logo

Microsoft Malware-detectie

Datum:

Dit artikel is gepubliceerd als onderdeel van het Data Science-blogathon.

Introductie

Als onderdeel van het schrijven van een blog over het ML- of DS-onderwerp, heb ik een prijs geselecteerd Microsoft-malwaredetectie. In deze blog wordt uitgelegd hoe u het probleem vanaf nul kunt oplossen.

In deze blog zal ik je uitleggen hoe ik omga met het probleem en gebruik maken van Microsoft malware detectie.

Hier pas ik het toegepaste ML-algoritme en de statistieken toe om het probleem op te lossen.

  • Wat is malware?
  • Zakelijk probleem
  • Gegevensoverzicht
  • Mappin ML-probleem
  • EDA (verkennende data-analyse)
  • Extraheer-functie
  • Coderingsfunctie:
  • Multivariate analyse
  • ML-model toepassen
  • Eindmodel
  • Vergelijk model
  • Conclusie
  • Referentie

Wat is malware?

Malware is opdringerige software die is ontworpen om computers en computersystemen te beschadigen en te vernietigen en Malware is een samentrekking van 'kwaadaardige software'. Voorbeelden van veelvoorkomende malware zijn virussen, wormen, Trojaanse virussen, spyware, adware en ransomware.

bron:- klik hier.

Microsoft Malware-detectie | Kaggle
Bron Kaggle

Zakelijk probleem

In de afgelopen jaren is de malware-industrie zo snel gegroeid dat de syndicaten zwaar investeren in technologieën om traditionele bescherming te omzeilen, waardoor de anti-malwaregroepen/gemeenschappen gedwongen worden om robuustere software te bouwen om deze aanvallen te detecteren en te beëindigen. Het belangrijkste onderdeel van het beschermen van een computersysteem tegen een malware-aanval is: identificeren of een bepaald stuk bestand/software malware is.

Deze dataset bevat 9 soorten malware.

Bron: https://www.kaggle.com/c/malware-classification

Gegevensoverzicht

In deze sectie hebben we de gegevens die we hebben begrepen. Dus voor elke malware. We hebben de twee soorten bestanden gegeven. Het eerste bestand is het.ASM-bestand. En de tweede zijn de .bytes-bestanden.

Voor meer over.ASM-bestanden, https://www.reviversoft.com/file-extensions/asm

Dus ASM betekent assembler codebestand, laten we aannemen dat je code moet schrijven in C++ en C++ compiler, neem deze onbewerkte code en converteer het naar een ASM-bestand, en dan is iets genaamd een assembler en het converteert naar bytes-bestanden en dit bestand bevat alleen nullen en enen

.asm-bestanden bevatten dit type trefwoorden als 'pop', 'jump', 'push', 'move', etc.

En bytes-bestand (de onbewerkte gegevens bevatten de hexadecimale weergave van de binaire inhoud van het bestand, zonder de PE-header) bevatten hexadecimale waarden en waar de waarde ligt tussen 00 tot FF

Hier hebben we in totaal 200 GB aan gegevens waarbij 50 GB gegevens van bytes-bestanden en 150 GB een .asm-bestand is.

Dus de naam van de negen malware is als volgt:

  1. Ramnit
  2. Lolly
  3. Kelihos_ver3
  4. Vundo
  5. simda
  6. Volg
  7. Kelihos_ver1
  8. Verduisteraar.ACY
  9. Gatak

.ASM-bestand

.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 [e-mail beveiligd]@Z; operator delete (void *) .text:0040104B 83 C4 04 add 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

.bytes-bestand

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 FF 15 CC 63 52 00 B8 07 00 00 00 C2 04 00 CC CC CC CC CC CC CC B8 FE FF FF FF C3 CC CC CC CC CC CC CC CC CC CC B8 09 00 00 00 C3 CC CC CC CC CC CC CC CC CC CC B8 01 00 00 00 C3 CC CC CC CC CC CC CC CC CC CC B8 FD FF FF FF C2 04 00 CC CC CC CC CC CC CC CC CC 8B 4C 24 04 8D 81 D6 8D 82 F7 81 F1 60 4F 15 0B 23 C1 C3 CC CC CC CC CC CC CC CC CC CC CC CC CC 8B 4C 24 04 8B C1 35 45 CF 3F FE 23 C1 25 BA 3D C5 05 C3 CC CC CC CC CC CC CC CC CC CC CC CC CC 8B 4C 24 04 B8 1F CD 98 AE F7 E1 C1 EA 1E 69 D2 FA C9 D6 5D 56 8B F1 2B F2 B8 25 95 2A 16 F7 E1 8B C1 2B C2 D1 E8 03 C2 C1 E8 1C 69 C0 84 33 73 1D 2B C8 8B C1 85 F6 74 06 33 D2 F7 F6 8B C2 5E 8B 4C 24 04 8B D1 8D 81 D6 8D 82 F7 81 F2 60 4F

Toewijzen aan een ML-probleem

Dus gezien de bestanden, moeten we een van de negen klassen classificeren, waardoor we het eerst kunnen omzetten in het juiste machine learning-probleem.

Het is dus het multiclass-classificatieprobleem.

Voor dit probleem prestatiestatistieken, we gebruiken is de multiclass log loss en we gebruiken ook precisie- en terugroepstatistieken, die een beter idee geven van hoe onze modi zijn, nauwkeurig.

Mapping in ML-probleem
bron medium.com 

Logboekverlies van meerdere klassen retourneert de waarschijnlijkheid van elke klasse.

Voor meer informatie over het logboek, verlies klik hier.

EN VAN

Dus in deze sectie zal een aantal van de EDA (verkennende data-analyse) operaties.

Dus laten we EDA gaan doen. Dus het eerste dat we hier doen, is het scheiden van bytes-bestanden van de ASM-bestanden. dit probleem zijn de onevenwichtige datasets, dus eerst plotten we histogrammen op de klassenlabels.

EDA | Microsoft Malware-detectie
bron GitHub-profiel van de auteur

Uit dit histogram van het klasselabel kunnen we zeggen dat klasse 5 zeer weinig datapunten heeft, en klassen 2 en 3 een behoorlijk aantal datapunten beschikbaar hebben.

Functie uitpakken uit .bytes-bestanden

Dus kijk eerst naar een bytes-bestand en doe wat functie-engineering

Hier kijken we eerst naar de bestandsgrootte als een functie en plotten we een boxplot om te begrijpen dat deze functie nuttig is of niet om de klassenlabels te bepalen. Als alle boxplots van klasselabels elkaar overlappen, kunnen we deze bestandsgrootte als een functie is niet handig.

Microsoft Malware-detectie
bron GitHub-profiel van de auteur

Uit de boxplot kunnen we zeggen dat de functie voor bestandsgrootte nuttig is om het klasselabel te bepalen.

Dus onze tweede dingen van feature-extractie zijn als volgt:

We weten dat bytes-bestanden hexadecimale waarden bevatten en dat hexadecimale waarden tussen 00 en FF liggen, dus we nemen alle hexadecimale waarden als invoerwaarden of kenmerken.

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

Een pixelfunctie toepassen op bytes-bestanden

Pixel betekent hier in feite dat we elk bestand nemen en het omzetten in een afbeelding en dan gebruiken we de eerste 100 pixels van de afbeelding als invoerwaarde.

Verwijzen: meer over

GitHub-profiel | Microsoft Malware-detectie
bron GitHub-profiel van de auteur

Coderingsfunctie

Nu hebben we functies, voor het coderen van een functie passen we a . toe bi-gram BOW(zak-van-woord), Laten we eerst BOW begrijpen,

Dus BOW betekent dat we elk bytesbestand nemen en we tellen gewoon hoe vaak onze kenmerken 00, 01, 02... voorkomen, en bi-gram betekent dat we kenmerken nemen en omzetten in een paar kenmerken 00 01, 01 02, 02 03... en dan tellen we hoe vaak het voorkomt.

Om meer over te weten BOOG.

Multivariate analyse op .bytes-bestandsfuncties

T-SNE is in feite een techniek voor dimensiereductie, dus eerst nemen we alle gegevens en zetten deze om in een 2-dimensie, omdat we met T-SNE er een idee van krijgen, onze functie is handig om de klassenlabels te classificeren of niet.

Coderingsfunctie:
bron GitHub-profiel van de auteur

Van de T-SNE kunnen we zeggen dat onze functies nuttig zijn voor het classificeren van de klassenlabels.

ML-model toepassen op .bytes-bestanden

1 Pas een willekeurig model toe

We weten dat onze evaluatiematrix een logverlies is en dat de logverlieswaarden tussen [0, oneindig] liggen.

Om de hoogste waarde van logverlies in onze gegevens te vinden, gebruiken we een willekeurig model en we vinden een test- en treinlogverlies.

Willekeurig model als volgt: -

Eerst nemen we onze gegevens en voorspellen de klasselabels willekeurig, en we hebben ook een echt klasselabel en we passen een multiclass logverlies toe en we vinden de waarde van multiclass logverlies op cv (cross-validatie) gegevens, en de waarde bedraagt ​​2.45.

Deze waarde is de allerslechtste waarde voor ons, dus we moeten proberen het logverlies zo veel mogelijk te beperken.

2 Pas KNN (K Nearest Neighbor Classification) toe op bytes-bestanden

Hier passen we een KNN toe in onze dataset die een buurtgebaseerde methode is, dit is om een ​​K-buurpunt te nemen en de klasselabels te voorspellen.

Trein- en testverlies is 0.078 en 0.245, hier zijn de verschillen in trein- en testverlies erg groot, vandaar dat we kunnen zeggen dat ons model de treingegevens overbelast.

Als we de precisie observeren, kunnen we zeggen dat alle gegevens goed zijn geclassificeerd voor de all-class behalve klasse 5, dit komt omdat we een heel klein aantal datapunten hebben dat tot klasse 5 behoort.

3. Pas een logistische regressie toe op bytes-bestanden

We passen een logistische regressie toe op het .bytes-bestand.

Trein- en testverlies zijn 0.1918 en 0.3168

Als we een logboekverlies van de trein waarnemen, passen testgegevens een beetje te veel bij de gegevens.

Maar niet alle datapunten zijn geclassificeerd. uit de precisie kunnen we zeggen dat dit geen voorspelling van klasse 5 is vanwege de minder hoeveelheid gegevens.

4 Pas willekeurig bos toe op bytes-bestanden

Hier passen we een RF toe op de bytes-gegevens en het werkt goed.

Trein- en testverlies zijn 0.0342 en 0.0971

Uit de precisie kunnen we zeggen dat het bijna elk klasselabel voor klasse 5 heeft voorspeld.

En uit de terugroepactie kunnen we zeggen dat dit de juiste classificatie is voor het bijna klassenlabel. en gezien het logboekverlies is het goed uitgerust.

5 Pas XGBoost toe op bytes-bestanden

Nu passen we een XGBoost toe op de gegevens, wat een op ensemblemodel gebaseerde techniek is.

Voor meer hierover klik hier.

Trein- en testverlies zijn 0.022 en 0.079, dit verlies is redelijk goed dan bij andere modellen.

Uit de precisie kunnen we zeggen dat voorspeld wordt dat bijna elk klasselabel correct is, zelfs voor klasse 5.

En uit de terugroepactie kunnen we zeggen dat dit de juiste classificatie is voor het bijna klasselabel.

Functie uitpakken uit .asm-bestanden

Nu halen we de functie uit het .asm-bestand. Alle bestanden vormen ongeveer 150 GB.

Hier hebben we geëxtraheerd 52 functies van alle .asm-bestanden die belangrijk zijn.

Dit bestand bevat registers, trefwoorden, opcodes, voorvoegsels uit deze 4 delen van het bestand. We extraheren in totaal 52 functies en we nemen de bestandsgrootte op als een functie, dus in totaal hebben we hier 53 functies.

 prefixes = ['HEADER:','.text:','.Pav:','.idata:','.data:','.bss:','.rdata:','.edata:', '.rsrc:','.tls:','.reloc:','.BSS:','.CODE'] opcodes = ['jmp', 'mov', 'retf', 'push', 'pop ', 'xor', 'retn', 'nop', 'sub', 'inc', 'dec', 'add','imul', 'xchg', 'or', 'shr', 'cmp', 'call', 'shl', 'ror', 'rol', 'jnb','jz','rtn','lea','movzx'] trefwoorden = ['.dll','std::', ':dword'] registers=['edx','esi','eax','ebx','ecx','edi','ebp','esp','eip']

Verdeling van .asm-bestandsgrootten

Nu plotten we een boxplot met een bestandsgrootte om te begrijpen dat deze functie al dan niet nuttig is om de klasselabels te bepalen.

Boxplot | Microsoft Malware-detectie

bron GitHub-profiel van de auteur

Uit de boxplot kunnen we zeggen dat bestandsgrootte als functie handig is om onze gegevens te classificeren.

Multivariate analyse van .asm-bestandsfuncties

Voor de multivariate analyse gebruiken we hetzelfde concept dat we gebruiken in bytes-bestanden, we passen hier een TSNE toe om te controleren of deze 53 functies nuttig zijn om de datapunten te scheiden of niet.

bron GitHub-profiel van de auteur

Uit de plot zijn er veel clusters voor de verschillende klassen, dus we kunnen zeggen ja, deze functies zijn handig om de labels te scheiden

Pas het model toe op.ASM-bestanden

1 Pas een willekeurig model toe op asm-bestanden: -

Hier weten we dat onze prestatiematrix een logverlies met meerdere klassen is, dus we weten dat de logverlieswaarden tussen (0, oneindig) liggen. Hier kennen we de lage waarde, maar we kennen geen hoge waarde, met behulp van een willekeurig model vinden we een hoge waarde van logverlies.

Vandaar dat het logverlies op de testgegevens voor het willekeurige model 2.493 is.

2 Pas KNN (K Nearest Neighbor Classification) toe op asm-bestanden

Hier passen we een KNN toe in onze dataset, een buurtbasistechniek, dit is om een ​​K-buurpunt te nemen en de klassenlabels te voorspellen.

Trein- en testverlies zijn 0.0476 en 0.089, hier zijn de verschillen in trein- en testverlies erg groot, vandaar dat we kunnen zeggen dat ons model te veel past bij de treingegevens.

Als we de precisie observeren, kunnen we zeggen dat alle gegevens goed zijn geclassificeerd voor de all-class behalve klasse 5, dit komt omdat we een heel klein aantal datapunten hebben dat tot klasse 5 behoort.

3. Pas een logistische regressie toe op ams-bestanden

We passen een logistische regressie toe op het .asm-bestand.

Trein- en testverlies zijn 0.781 en 0.742

Het observeren van een logverlies uit de trein, testgegevens, is goed op zijn plaats.

Maar niet alle datapunten zijn geclassificeerd. uit de precisie kunnen we zeggen dat dit geen voorspelling van klasse 5 is vanwege de minder hoeveelheid gegevens.

En uit de herinnering blijkt dat het niet het juiste klasselabel is voor de klassen 5, 6, 7 en 9.

4 Pas willekeurig bos toe op bytes-bestanden

Hier passen we een RF toe op de gegevens en dat werkt erg goed.

Trein- en testverlies zijn 0.0271 en 0.0462

Uit de precisie kunnen we zeggen dat bijna elk klasselabel correct is, zelfs voor klasse 5.

En uit de terugroepactie kunnen we zeggen dat dit de juiste classificatie is voor het bijna klasselabel.

En gezien het logverlies is het goed uitgerust

5 Pas XGBoost toe op bytes-bestanden

Hier passen we een XGBOOST toe op de gegevens en het werkt erg goed.

Uit de precisie kunnen we zeggen dat bijna elk klasselabel correct is, zelfs voor klasse 5.

Trein- en testverlies zijn 0.0241 en 0.0371

En uit de terugroepactie kunnen we zeggen dat dit de juiste classificatie is voor het bijna klasselabel.

En gezien het logverlies is het goed uitgerust, en dit is ook beter dan een RF-model.

Eindmodel

Nu voegen we beide bestanden .asm en .bytes samen en passen we het model toe dat beter wordt uitgevoerd in individuele bestanden en hier is XGboost het betere model.

Hier hebben we in totaal 66k functies en dit is een zeer uitdagende taak voor mij, ten eerste passen we een TSNE toe omdat het me een idee geeft van deze functies hoe goed het is om de labels te scheiden

bron GitHub-profiel van de auteur

Nu kunnen we zeggen dat al deze functies erg handig zijn voor gegevensscheiding.

Hier hebben we een multivariate gedaan op deze .asm- en bytes-bestandenfunctie en dus passen we een T-SNE op deze gegevens toe met de verschillende perplexiteitswaarden en we kunnen de mooie cluster van

Daarom kunnen we hier deze functie gebruiken om de gegevenspunten te scheiden.

Willekeurige bosclassificatie op laatste functies

Hier passen we een RF toe op de uiteindelijke gegevens en het werkt

Trein- en testverlies zijn 0.03143 en 0.09624

Uit de precisie kunnen we zeggen dat het bijna elk klasselabel voor klasse 5 heeft voorspeld.

En uit de herinnering kunnen we zeggen dat dit de juiste classificatie is voor het bijna klasse-label.

En gezien het logboekverlies is het goed uitgerust. daarom kunnen we zeggen dat RF heel goed werkt voor onze gegevens.

LGBMClassifier op laatste kenmerken

Hier weten we dat voor beide bestanden ons winnaarmodel XGBOOST is, maar op de laatste functie passen we lightgbm toe omdat onze xgboost-computertijd erg hoog is en lightgbm een ​​beetje snel is dan xgboost, vandaar dat we LGBM hier toepassen en beide dezelfde dingen doen.

Hier passen we een LGBM toe op de definitieve gegevens en het werkt

Uit de precisie kunnen we zeggen dat het bijna elk klasselabel voor klasse 5 heeft voorspeld.

En van kan zeggen dat dit de juiste classificatie is voor het bijna klasse-label.

En gezien het logverlies is het goed uitgerust, en dit dan een RF-model. en we hebben een testverlies van 0.01 hier, vandaar dat LGBM/XGBOOST aan onze gegevens werkt.

Vergelijk model

Vergelijk Model | Microsoft Malware-detectie
bron GitHub-profiel van de auteur

Conclusie

1. Ten eerste zijn de gegeven gegevens Microsoft-malwaregegevens en het is onze taak om het gegeven bestand te classificeren bij welk type malware het hoort. hier in gegevens hebben we 9 soorten Microsoft-malwaredetectie beschikbaar.

2. In onze gegevens zijn 2 soorten bestanden aanwezig, de eerste is .bytes-bestanden en de tweede is .asm-bestand.

A. In bytes-bestanden bevatten ze hexadecimale waarden

B. En in het .asm-bestand bevatten ze enkele speciale trefwoorden zoals pop, push, enz.

3. Hier unzippen we eerst de gegevens en scheiden we beide soorten bestanden, en deze gegevensgrootte is ongeveer 200 GB. dus het is hier een hele uitdaging voor ons.

4. Hier is onze benadering dat we eerst de .bytes-bestanden analyseren en dan gaan we de .asm-bestanden analyseren.

5. We nemen eerst een .bytes-bestand en we weten dat het een hexadecimale waarde bevat en hexadecimale waarden liggen tussen 00 en FF, dus we passen een eenvoudige bi-gram BOW toe en we doen hier een eenvoudige telling voor elk bestand, en we passen ook een pixelfunctie, wat betekent dat we eerst elk bestand naar een afbeelding converteren en een eerste 100 pixel nemen.

6. We weten dat de minimale waarde van logverlies 0 is en de maximale waarde oneindig is, dus eerst bouwen we een willekeurig model en vinden het maximale logverlies.

7. Na het random model bouwen we een ander model zoals LR, RF, KNN, xgboost, en kijken we welk model een laag log-loss geeft.

8. Nu nemen we het .asm-bestand en we vinden enkele speciale 53 trefwoorden die erg belangrijk zijn voor het .asm-bestand.

9. Ook hier passen we een ander model toe zoals KNN, LR, RF, etc.

10. Nu combineren we beide bestandskenmerken en passen we een RF en XGBOOST/LGBM toe.

11. Met behulp van een XGBOOST/LGBM kregen we een testverlies van 0.01.

Ik hoop dat je genoten hebt van mijn artikel over Microsoft-malwaredetectie. Als je twijfelt, reageer dan hieronder. Lees meer artikelen over de Analytics Vidhya blog.

Referentie

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

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

https://www.appliedaicourse.com

Maak contact met mij

De in dit artikel getoonde media zijn geen eigendom van Analytics Vidhya en worden naar goeddunken van de auteur gebruikt. 

Bron: https://www.analyticsvidhya.com/blog/2022/01/microsoft-malware-detection/

spot_img

Laatste intelligentie

spot_img

Chat met ons

Hallo daar! Hoe kan ik u helpen?