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.
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.
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.
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.
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.
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.
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.
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.
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.
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:


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.
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:
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 ]








