Malware Analysis Rapid Introduction

Pagina: 1
Acties:

  • Squ1zZy
  • Registratie: April 2011
  • Niet online

Malware Analysis Rapid Introduction


Inleiding


De meeste weten wel wat malware is en heeft er misschien ook wel iets mee te maken gehad, maar hoe analyseer je malware? Het leek mij wel leuk om hier een topic over aan te maken om deze kennis te delen of erover te discussiëren.

Note: Dit is een eerste opzet en ik zal de topic aanvullen waar nodig.


Wat is Malware?


Om te beginnen is het handig om te vertellen wat Malware nou precies is. Malware staat voor "Malicious Software". Kwaadaardig software dus. In het kort is het software waarbij de maker tijdens het bouwen iets "kwaads" als intentie heeft gehad. Zo zijn verschillende "soorten" malware.

Enkele voorbeelden zijn:

Virus - Een virus is software wat zich verspreid door menselijk interventie. Denk hierbij aan een email waar een attachment aan zit en die zich verspreid nadat de gebruiker het bestand heeft uitgevoerd (het verspreiden wordt gedaan door b.v. je adressenlijst).

Worm - Een worm is software wat zichzelf verspreid. Het verschil tussen een virus en een worm is dus de manier waarop de malware zich verspreid. Bij een virus wordt dit gedaan door de gebruiker en bij een worm wordt dit gedaan door b.v. een exploit (een kwetsbaarheid in software).

Trojan Horse - Misschien ken je het verhaal uit de Griekse mythologie: Het Trojaanse paard. Een reusachtig paard wat door de inwoners van Troje werd binnengehaald als overwinningscadeau, maar wat achteraf toch iets anders bleek te zijn. Een Trojan horse is software waarbij het iets anders doet dan wat men verwacht. In een keygen zit bijvoorbeeld vaak een trojan horse. Men denkt een keygen te downloaden, maar ondertussen wordt er malware geïnstalleerd.

Ransomware - Cryptolocker is een bekend voorbeeld. Ransomware "kidnapped" je computer of bestanden waarbij je moet betalen om het weer bruikbaar te maken.

Keylogger - Een keylogger is software wat de toetsenbordaanslagen opslaat of doorstuurt, welke toets er is aangeslagen door de gebruiker, om zo gevoelige informatie zoals gebruikersnamen en wachtwoorden te achterhalen.


Malware Releases


In 2007 kwamen er naar schatting enkele honderdduizenden verschillende malware uit. Dit was in 2015 naar schatting 470 miljoen. Dat is dus meer dan 1 miljoen malware per dag!

Note: Er wordt vaak gebruik gemaakt van software wat malware creëert. Men geeft aan wat er in de malware moet komen en met een druk op de knop wordt de malware gecreëerd. Er komt dan een ander naampje op te staan en dat wordt dus ook gezien als "nieuw" malware. Desondanks komen er steeds geavanceerder en verschillende soorten malware op het internet.


Wat is Malware Analysis?


Het analyseren van malware is kijken wat de software precies doet, maar niet te verdwalen in de details. Als je een beetje een idee hebt wat de malware doet is het bijvoorbeeld al mogelijk om verdere verspreiding te voorkomen door bepaalde eigenschappen te blokken. Denk hierbij aan een IP adres waar de malware naar connect die je na een korte analyse kan blokkeren op bijvoorbeeld een firewall om verdere verspreiding te voorkomen of te voorkomen dat meer informatie wordt gelekt.

Het analyseren begint bij het controleren of het wel malware is. Je analyseert bijvoorbeeld een executable waarbij eerst vastgesteld moet worden of het überhaupt wel malware is. Als men heeft vastgesteld dat het malware is kan men zoeken naar een bepaalde eigenschap en kan er later verdere analyse worden gedaan.

Malware analysis is een een kat en muis spel. De makers van malware doen een zet en het is aan de malware analyst om dit zo snel mogelijk te herkennen of proberen voor te zijn. Gezien de eerste stap vaak door de malware maker gedaan kan worden is het een lastig gevecht voor de malware analyst.


Malware Techniques


De 2 technieken die gebruikt wordt bij het analyseren van malware zijn static en dynamic analysis. Static analysis is het analyseren van software zonder dat de code wordt uitgevoerd. Bij dynamic analysis wordt de code dus wel uitgevoerd.

Static en dynamic heeft beide zijn voor en nadelen. Zo is het met dynamic analysis bijvoorbeeld makkelijk om te achterhalen of er een bestand wordt aangemaakt tijdens het uitvoeren van de malware. Er zijn programma's die 'aanhaken' aan het OS en loggen of er een bijvoorbeeld een bestand wordt aangemaakt. Op deze manier is het vrij snel te zien of er een bestand wordt gecreëerd door de malware. Het nadeel is dat je de malware uitvoert en dus de machine kan besmetten. Dit is ook de reden waarom er vaak een virtuele machine wordt gebruikt.

Daarnaast is er "Advanced Analysis". Wat hiermee wordt bedoeld is dat je gebruik maakt van een disassembler of debugger waarbij Assembly kennis nodig is. Assembly is een low-level programmeer taal en "moeilijk" leesbaar.


Basic Static Analysis


Basic static analysis is het analyseren van malware waarbij de code niet wordt uitgevoerd en waarbij geen disassembler wordt gebruikt. Een disassembler is software wat computer taal omzet in Assembly taal.

Een voorbeeld van basic static analysis zijn het zoeken van 'strings'. Een string is een "zin" van karakters. Wanneer je een programma maakt dan maak je misschien gebruik van paden, bestandsnamen, comments etcetera wat terug te vinden is als platte text in bijvoorbeeld een executable. Dit kan zeer waardevolle informatie geven zonder dat er maar een enkele regel code is uitgevoerd. Denk hierbij aan bestandsnamen. Als er een bestandsnaam staat "C:\Windows\temp\keylogger.txt" dan weet je eigenlijk al genoeg.

Een ander voorbeeld van static analysis is een 'Hash'. Een hash is de uitkomst van een cryptografische hashfunctie zoals MD5. MD5 staat voor 'Message Digest Algorithm 5' en heeft een 128 bit-hashwaarde.

Het wordt o.a. gebruikt om de integriteit van bestanden te controleren. Als je een hashfunctie los laat op een bestand komt er een 128 bit waarde uit (ook wel een checksum genoemd). Deze hash kan worden gebruikt om bijvoorbeeld te controleren of het bestand is aangepast. Wanneer er maar 1 bit anders is zal de checksum ook anders zijn. Zo is dus de integriteit van een bestand te bepalen.

Dit wordt ook gebruikt door een virus-scanner. Wanneer er een checksum overeenkomt met een checksum uit de virus-scanner's database zal het bestand worden opgemerkt als 'Malicious'. Het is een snelle manier om te bepalen of een bestand als malware bestempeld is door de virus-scanner.


Basic Dynamic Analysis


Een voorbeeld van basic dynamic analysis is het gebruik van de applicatie 'Procmon'. Procmon is een monitoring tool van sysinternals welke gratis te downloaden is via de volgende link.

Met procmon is het mogelijk om registry, file, process en thread in real-time te monitoren. Met procmon is het mogelijk om op een snelle manier te kijken op bijvoorbeeld registry en file niveau wat er wordt aangemaakt/aangepast.


Advanced Static Analysis


Advanced static analysis wordt vaak gedaan met IDA Pro. IDA is een interactieve disassembler. Met disassembler wordt bedoeld dat computer taal wordt omgezet in Assembly. Hierdoor wordt het "leesbaar" en kan men precies zien wat de software doet op detail niveau. Hiervoor is wel Assembly kennis nodig.

Zoals eerder aangegeven wordt de code niet uitgevoerd. Het voordeel hiervan is dat de malware je niet om de tuin kan leiden door bijvoorbeeld je applicatie die je gebruikt om te monitoren te laten crashen bij het uitvoeren van de code. Als je hiervoor een debugger gebruikt moet je een breakpoint zetten voor de code die je applicatie laat crashen. IDA Pro is een betaalde applicatie en kost rondom de 1000 euro. Er is een gratis versie (5.0), maar die loopt erg achter. Meer informatie over IDA is te vinden in de volgende link.


Advanced Dynamic Analysis


Voor advanced dynamic analysis wordt vaak OllyDbg gebruikt. OllyDbg is een 32 bit debugger. Een groot voordeel van OllyDbg is dat je gebruik kunt maken van een breakpoint. De code wordt uitgevoerd tot aan je breakpoint om zo op een opgegeven plek te kunnen stoppen om te analyseren. Meer informatie over OllyDbg is te vinden in de volgende link.


Packers


Packers is software wat al een lange tijd bestaat. Het is software wat ooit is gemaakt om executables te compressen. Het bleef een executable, maar het bestand werd op disk veel kleiner. Doordat het een compressie heeft zijn bijvoorbeeld strings niet zichtbaar. Als je de strings opvraagt dan kijk je tenslotte naar de compressed bestand en niet naar het oorspronkelijke bestand. Je zal de executable eerst moeten decompressen om te kunnen analyseren.

De malware authors gebruiken dit om het "moeilijker" te maken voor de analist. Het is voor de author namelijk erg makkelijk om een executable te packen (tool runnen met als pad je executable en klaar), dus waarom niet?

Het voordeel is wel dat het OS de executabel moet begrijpen. Dus wat men ook doet het kan altijd unpacked worden.

Daarnaast is het erg makkelijk om na te gaan of een executable gepacked is of niet (hier zijn overigens tools voor zoals PEiD). Packers laten namelijk altijd een "signature" achter in het bestand.


Sandboxes


Er zijn websites die een analyse los kan laten op bestanden waarbij een mooi rapport uit komt. Echter is het niet moeilijk om een sandbox analysis te omzeilen. Er zit wel intelligentie in de sandbox, maar er zijn trucjes zoals het delayen van een executable om zo de sandbox om de tuin te leiden.


Malware Voorbeeld 1


Genoeg theorie... In dit voorbeeld maak ik gebruik van een keylogger die ik zelf heb compileert met code van het internet. De source (C#) is te vinden door te klikken op de volgende link.

Als eerste gaan we de strings bekijken. Op Windows is dit het beste te doen met de applicatie 'Strings' van 'Sysinternals'. Deze is te vinden door te klikken op de volgende link.

Hierbij de output van de Keylogger met strings:

Afbeeldingslocatie: https://tweakers.net/ext/f/5adJuY8v1ys7HhepjKDZxTA5/thumb.jpg

Afbeeldingslocatie: https://tweakers.net/ext/f/az1AmPYNd28YWbNjKRauQNU1/thumb.jpg

In het eerste screenshot is er een bestandsnaam te zien "Keylogger.txt". Als we dit zien weten we eigenlijk al genoeg. In de tweede screenshot zien we 2 functies "WH_KEYBOARD_LL" en "WM_KEYDOWN". Gelukkig is de documentatie van Microsoft erg goed. Als wij gaan zoeken naar "WH_KEYBOARD_LL" komen we uit op de volgende pagina:

MSDN: Hooks Overview (Windows)

Hierin staat "The WH_KEYBOARD_LL hook enables you to monitor keyboard input events about to be posted in a thread input queue". Dit zegt dus ook al genoeg. Door alleen de strings te bekijken is het dus al mogelijk om op te maken wat de malware doet. Als hier ook nog een IP adres in zou staan dan kunnen we er al bijna vanuit gaan dat de toetsenbordaanslagen wordt doorgestuurd naar een server om zo gevoelige informatie te achterhalen.

Dit is een keylogger die alleen de toetsenbordaanslagen logged, maar vaak wordt er gebruik gemaakt van obfuscation. Obfuscation is het "verbergen" van code om het niet leesbaar te maken. Wat er wordt gedaan is bijvoorbeeld een algoritme die eerst wordt toegepast voordat de string wordt gebruikt. Als men dan de strings opvraagt is het niet leesbaar om het de analist zo moeilijk mogelijk te maken.


Disclaimer


Ik ben niet verantwoordelijk voor welke schade dan ook gemaakt door het aanmaken van dit topic.

:+

[ Voor 238% gewijzigd door Squ1zZy op 29-12-2016 21:41 ]


  • Meg
  • Registratie: September 2016
  • Niet online

Meg

418: “I’m a teapot”

Nice topic! Leuk om te lezen!

"If you lose your left arm your right arm will be left."
"The difference between stupidity and genius is that genius has its limits." - Albert Einstein
"I don't need oxygen, I only need O2."


  • Squ1zZy
  • Registratie: April 2011
  • Niet online
Thanks :)

Ik zal het vandaag nog even aanvullen. Mijn Nederlands is niet zo heel best en ik wil er wat voorbeelden aan toevoegen. Dus eerst theorie en dan wat voorbeelden.

Als er interesse is kan ik ook verder gaan op "advanced malware". Denk hierbij aan "loopback functions" die worden gebruikt om het de analist moeilijk te maken. Hierbij lijkt het op een OS call die een "form" creëert, maar waar juist de code in staat wat je als analist naar zoekt. Ook obfuscation is een interessante.

  • Squ1zZy
  • Registratie: April 2011
  • Niet online

Malware Voorbeeld 1


Genoeg theorie... In dit voorbeeld maak ik gebruik van een keylogger die ik zelf heb compileert met code van het internet. De source (C#) is te vinden door te klikken op de volgende link.

Als eerste gaan we de strings bekijken. Op Windows is dit het beste te doen met de applicatie 'Strings' van 'Sysinternals'. Deze is te vinden door te klikken op de volgende link.

Hierbij de output van de Keylogger met strings:

Afbeeldingslocatie: https://tweakers.net/ext/f/5adJuY8v1ys7HhepjKDZxTA5/thumb.jpg

Afbeeldingslocatie: https://tweakers.net/ext/f/az1AmPYNd28YWbNjKRauQNU1/thumb.jpg

In het eerste screenshot is er een bestandsnaam te zien "Keylogger.txt". Als we dit zien weten we eigenlijk al genoeg. In de tweede screenshot zien we 2 functies "WH_KEYBOARD_LL" en "WM_KEYDOWN". Gelukkig is de documentatie van Microsoft erg goed. Als wij gaan zoeken naar "WH_KEYBOARD_LL" komen we uit op de volgende pagina:

MSDN: Hooks Overview (Windows)

Hierin staat "The WH_KEYBOARD_LL hook enables you to monitor keyboard input events about to be posted in a thread input queue". Dit zegt dus ook al genoeg. Door alleen de strings te bekijken is het dus al mogelijk om op te maken wat de malware doet. Als hier ook nog een IP adres in zou staan dan kunnen we er al bijna vanuit gaan dat de toetsenbordaanslagen wordt doorgestuurd naar een server om zo gevoelige informatie te achterhalen.

Dit is een keylogger die alleen de toetsenbordaanslagen logged, maar vaak wordt er gebruik gemaakt van obfuscation. Obfuscation is het "verbergen" van code om het niet leesbaar te maken. Wat er wordt gedaan is bijvoorbeeld een algoritme die eerst wordt toegepast voordat de string wordt gebruikt. Als men dan de strings opvraagt is het niet leesbaar om het de analist zo moeilijk mogelijk te maken.

[ Voor 94% gewijzigd door Squ1zZy op 04-01-2017 19:30 ]


  • Osiris
  • Registratie: Januari 2000
  • Niet online
Persoonlijk ben ik 't niet eens met je definitie van "virus". Wellicht een generatie-verschil, maar virussen zijn mijns inziens stukjes code die embedded zitten in stukjes overige code, zoals een boot sector of een EXE/COM-bestand.

Je huidige definitie valt en staat door het "door de gebruiker"-deel, wat ik persoonlijk niet heel sterk vind. 't Verschil tussen virus en worm is juist dat een virus embedded in iets zit en een worm een standalone programma is. De vector 'gebruiker' is vervolgens hetzelfde: de gebruiker opent een besmette exe met daarin een virus óf de gebruiker opent een exe wat stiekem een worm (en alleen maar een worm) is.

  • Squ1zZy
  • Registratie: April 2011
  • Niet online
Osiris schreef op donderdag 29 december 2016 @ 21:51:
Persoonlijk ben ik 't niet eens met je definitie van "virus". Wellicht een generatie-verschil, maar virussen zijn mijns inziens stukjes code die embedded zitten in stukjes overige code, zoals een boot sector of een EXE/COM-bestand.

Je huidige definitie valt en staat door het "door de gebruiker"-deel, wat ik persoonlijk niet heel sterk vind. 't Verschil tussen virus en worm is juist dat een virus embedded in iets zit en een worm een standalone programma is. De vector 'gebruiker' is vervolgens hetzelfde: de gebruiker opent een besmette exe met daarin een virus óf de gebruiker opent een exe wat stiekem een worm (en alleen maar een worm) is.
Hi Osiris, leuk dat je reageert. Bedankt daarvoor :)

Ik heb het verschil tussen een virus en worm niet zelf verzonnen. Het verschil tussen een virus en een worm wat ik in meerdere boeken en cursussen heb geleerd (Practical Malware Analysis van Andrew Honig, Malware Cookbook van Blake Hartstein Michael Ligh en Matthew Richard) is toch echt de gebruiker. Zie ook hieronder:

"A worm is similar to a virus by design and is considered to be a sub-class of a virus. Worms spread from computer to computer, but unlike a virus, it has the capability to travel without any human action"

Source: http://www.webopedia.com/DidYouKnow/Internet/virus.asp

"In contrast to viruses, which require the spreading of an infected host file, worms are standalone software and do not require a host program or human help to propagate."

Source: http://www.cisco.com/c/en...er/virus-differences.html

  • Kabouterplop01
  • Registratie: Maart 2002
  • Laatst online: 02-11 14:56

Kabouterplop01

chown -R me base:all

heel vet dit!
Hoe ga je precies om met Obfuscation?
@TS, heb je al eens gekeken naar radare2? Is wel de Linux variant van IDA, in Python.

[ Voor 45% gewijzigd door Kabouterplop01 op 03-01-2017 22:31 ]


  • Hammetje
  • Registratie: Februari 2006
  • Laatst online: 21:40
Prima topic, leuk leesvoer!

"Het is pas haute cuisine als het de frituurpan heeft gezien" - @VanRoyal (2021)


  • Squ1zZy
  • Registratie: April 2011
  • Niet online

Obfuscation


Inleiding


Obfuscation is een techniek die door malware authors wordt gebruikt om binaire data of text moeilijker leesbaar te maken. Dit wordt eigenlijk toegepast in de meeste malware om het de malware analyst zo moeilijk mogelijk te maken.


Source


Als voorbeeld heb ik een C# applicatie gemaakt die gebruik maakt van obfuscation. De applicatie laat de obfuscated string zien in plain-text (deobfuscation) in een textbox en start Internet Explorer met een opgegeven URL (in dit geval de obfuscated text).

Hieronder een screenshot van de applicatie in Visual Studio:

Afbeeldingslocatie: https://tweakers.net/ext/f/UIYdH6YtONSCCzWPWxapsQLY/medium.jpg


Basic Static Analysis



Zoals in het openingspost te lezen is kan er gebruikt gemaakt worden van het uitlezen van strings. Het uitlezen van strings is onderdeel van Basic Static Analysis. Als er gekeken wordt met strings zien we het volgende:

Afbeeldingslocatie: https://tweakers.net/ext/f/XARe7R05eLIxuf48K5Z6rZki/medium.jpg

De strings die van belangrijke informatie kan dienen zijn o.a.:

Form1
Button1
Textbox1
Rot13

Er wordt dus gebruik gemaakt van een form (c.q. een window), een button, een textbox en iets wat Rot13 heet (dead-giveaway). Uiteraard zou je dit verbergen als malware author en zou je aan basic static analysis niets hebben. Je zou dan over moeten gaan naar advanced static analysis. De button en de de textbox kan interessant zijn om te weten waar je zou moeten debuggen.

Note: Wanneer je een form ziet en je start de executable op, maar je ziet geen window verschijnen dan is dit natuurlijk een red flag.

Wat mogelijk is, is dat de malware author gebruik maakt van een zogenaamde loopback function. In de code wordt het aanmaken van een form aangepast met malicious code. Wanneer je gaat analyseren zie je bijvoorbeeld een functie worden aangeroepen waarbij er een form wordt gemaakt. Als je als leek dit ziet en je denkt dat dit een valide functie is uit kernel32 dan skip je hier vaak overheen. Echter is dit JUIST de functie waar je in moet stappen om de malicious code te analyseren. Dit wordt gebruikt om de malware analysis om de tuin te leiden.

Hieronder nog een screenshot:

Afbeeldingslocatie: https://tweakers.net/ext/f/q5rjpbRjcNjG1BINsOvX01E1/medium.jpg

De strings die van belangrijke informatie kan dienen zijn o.a.:

iexplorer.exe
Uggcf://gjrnxref.arg/tnyyrel/50665/

De iexplorer.exe geeft in dit geval natuurlijk al veel weg. Om zeker te zijn dat Internet Explorer wordt gestart kunnen we gebruik maken van Dynamic Analysis. De obfuscated text lijkt in dit geval al op een URL


Dynamic Analysis



Het is aan te raden om altijd gebruik te maken van static EN dynamic analysis. Zo is met dynamic analysis, in dit geval ProcMon, makkelijk te zien wat de executable doet:

Afbeeldingslocatie: https://tweakers.net/ext/f/7dE818Rmmq7yfV12mK5R7kKj/medium.jpg

Wanneer je gebruik maakt van een filter op 'process create' zou je kunnen zien welk proces er wordt aangemaakt. In dit geval wordt Internet Explorer gestart met een opgegeven URL (in plain-text c.q. (deobfuscated).


Imports



Een andere manier om te kijken wat een executable doet is gebruik te maken van de imports. Wanneer je een massagebox wilt maken doe je dit in C# bijvoorbeeld met 'MessageBox.Show("Kabouterplop01");'.

Wat je eigenlijk doet is een functie aanroepen in een DLL waarbij je wat eigenschappen mee geeft zoals wat er getoond moet worden als text.

Wanneer een executabel gecompileerd wordt moet de applicatie de functies importeren vanuit de DLL. Dit is dus te zien in de executable zelf (de zogenaamde Import Table). Wanneer er een import wordt gedaan van bijvoorbeeld 'InternetOpen' dan zou je je af kunnen vragen wat de executabel doet met Internet Explorer ;)

Hierbij de imports voor het openen van Internet Explorer:

Afbeeldingslocatie: https://tweakers.net/ext/f/EHVlABu28JY2Nq17rjfQAffK/medium.jpg


Compiler


Het is handig om te kijken in welke taal de applicatie geschreven is. We weten welke URL er wordt geopend (dankzij ProcMon), maar we weten niet waar die vandaan komt. Het is van belang in welke taal het geschreven is om te weten hoe de executable ge-disassembled moet worden. Uiteraard zijn hier tools voor zoals de welbekende PEiD (wordt vaak gebruikt om te kijken of een executable is gepacked):

Afbeeldingslocatie: https://tweakers.net/ext/f/ZgFNEHP9j5DFjumJYZ3nXThJ/medium.jpg

Echter geeft PEiD in dit geval niet aan welke compiler er is gebruikt. Wat we kunnen doen is het zoeken naar strings in de executable. Daar is namelijk vaak te vinden in welke taal het geschreven is:

Afbeeldingslocatie: https://tweakers.net/ext/f/9HOVoE8s2lFM1XYgLh5wGmly/medium.jpg

Nu we weten dat de applicatie is gemaakt met .NET zouden we de executablel kunnen disassemblen.


Disassemble



Er zijn vele manieren om .NET applicaties te disassemblen. Wanneer je Visual Studio hebt geïnstalleerd zou je gebruik kunnen maken van ILDasm:

Afbeeldingslocatie: https://tweakers.net/ext/f/LTai2eslvZLQrtIfXIkBzsgo/medium.jpg

Wat ik persoonlijk fijner vind is echter dotPeeks:

Afbeeldingslocatie: https://tweakers.net/ext/f/Z4pZe2wYrnD0vqMVNV5Zazqq/medium.jpg

Eigenlijk wisten we al dat er gebruik gemaakt wordt van Rot13, maar op deze manier zou je ook custos obfuscation kunnen zien en reverse engineren om zo te achterhalen war de URL vandaag komt. Het is dus van balang om te weten waarna je moet zoeken.

  • Squ1zZy
  • Registratie: April 2011
  • Niet online
Kabouterplop01 schreef op dinsdag 3 januari 2017 @ 08:50:
heel vet dit!
Hoe ga je precies om met Obfuscation?
@TS, heb je al eens gekeken naar radare2? Is wel de Linux variant van IDA, in Python.
Ik zal eens kijken of ik tijd heb om malware te laten zien wat gebruik maakt van obfuscation. Voor nu heb ik een klein stukje geschreven over obfuscation wat hierboven te vinden is :)

Voor Linux maak ik overigens gebruik van Hopper. Radare2 ken ik nog niet. Zal daar eens induiken. Bedankt!
Pagina: 1