Redactie - 14 november 2014

Waarom antivirusoplossingen tekort schieten: hoe ik malware schreef die ze wist te omzeilen

Antivirustechnologie (AV) vormt een belangrijk onderdeel van de bredere beveiligingsstrategie als hulpmiddel om de verspreiding van malware via het internet tegen te gaan.

AV werkt in feite als een inenting. Zodra nieuwe malware wordt gedetecteerd, ontwikkelt men de technologische variant van een vaccin — een signatuur — die in staat is om de bedreiging te identificeren. Dit vaccin wordt in alle clients ‘geïnjecteerd’. De kans dat een ongevaccinerde client een infectie oploopt, wordt hierdoor drastisch gereduceerd.

Deze aanpak kent wel een nadeel: nieuwe malware kan een hoop schade berokkenen voordat er een remedie voor het euvel wordt geboden. AV-oplossingen hebben absoluut bestaansrecht, maar bieden onvoldoende bescherming. Om een potentieel doelwit te kunnen inenten tegen een bedreiging, moet die bedreiging wel eerst bekend zijn. Er moeten daarom eerst een paar clients worden geïnfecteerd voordat er een vaccin beschikbaar komt dat de andere clients tegen de malware beschermt.

Kort geleden hield ik een presentatie over strategieën voor AV en malware-detectie waarin ik dit probleem aan de kaak stelde en erop wees dat er elke dag nieuwe, ongeïdentificeerde bedreigingen het netwerk binnendringen. Bij wijze van demonstratie schreef ik malware-code die als command and control (C&C)-bot fungeerde. Deze malware was in staat om instructies te ontvangen van een aanvaller en deze met de hoogst mogelijke toegangsrechten uit te voeren op de geïnfecteerde computer.

Gewapend met mijn zelfgeschreven malware probeerde ik te achterhalen hoe effectief moderne antivirusoplossingen bescherming bieden tegen onbekende bedreigingen. Geen enkele leverancier van AV-oplossingen had tot op dat moment mijn malware-code onder ogen gekregen, en daarmee ook geen gelegenheid gehad om er een signatuur voor te ontwikkelen. Dit brengt tal van deze leveranciers in een moeilijke positie. Het afslaan van nieuwe bedreigingen vraagt om innovatieve detectiestrategieën die niet afhankelijk zijn van de beschikbaarheid van een signatuur.

Dit is waar een techniek genaamd code-emulatie om de hoek komt kijken. Veel AV-oplossingen maken daar gebruik van om de zwakte van signaturen te compenseren. Code-emulatie is een van de innovatieve strategieën die de meer hoogwaardige AV-oplossingen hanteren om kwaadaardige toepassingen te kunnen identificeren die ze nog nooit eerder zijn tegengekomen. Ik liet mijn virus los op computers met een aantal populaire AV-oplossingen van leveranciers die over het grootste marktaandeel beschikken. Deze oplossingen zouden idealiter alle beschikbare strategieën moeten gebruiken, maar in werkelijkheid bleek slechts één van de acht leveranciers in staat om mijn malware te detecteren.

Het feit dat er ten minste één leverancier was die mijn kwaadaardige code wist te detecteren, betekent in ieder geval dat mijn malware redelijk snel ‘in het wild’ zou worden ontdekt.

Voor cybercriminelen betekent detectie door slechts één leverancier dat hun malware geen lang leven is beschoren. Mijn volgende stap was om te demonstreren hoe malware-ontwikkelaars hun code ondetecteerbaar weten te maken voor alle bekende AV-oplossingen.

Code-emulatie houdt in dat er een miniversie van een virtuele machine binnen de AV-oplossing wordt gecreëerd waarin de verdachte code zonder risico’s kan worden uitgevoerd. De emulator houdt bij welke bewerkingen het verdachte programma uitvoert, en bepaalt op basis van heuristische gedragspatronen of er sprake is van acties die aan malware toe te schrijven zijn.

De enige AV-leverancier die erin slaagde om mijn virus te detecteren, bleek inderdaad gebruik te maken van code-emulatie. Toen diens oplossing bemerkte dat mijn virus op de computer werd aangebracht, voerde deze de code automatisch uit binnen de emulatie-omgeving om na te gaan welke handelingen de malware zou uitvoeren. Omdat mijn programma een virus was, moest het registersleutels creëren, bestanden downloaden, bestanden verbergen enzovoort, en de AV-oplossing signaleerde terecht dat er sprake was van kwaadaardig gedrag.

In navolging van de methoden die cybercriminelen hanteren, probeerde ik vervolgens om manieren te vinden om de code-emulator te doen geloven dat mijn bestand niet kwaadaardig van aard was.

Het kostte niet veel moeite om de werking van de AV-oplossing na te bootsen. Ik voegde aanvullende code in mijn malware toe, die probeerde te achterhalen of deze door een emulator werd geïnspecteerd. Was dit het geval, dan zette mijn code al zijn activiteiten stop zonder verder nog iets verdachts te doen. Slaagde deze opzet, dan zou de AV-oplossing het bestand niet als kwaadaardig aanmerken. Als de malware er echter niet in slaagde om te detecteren dat deze in een emulator werd uitgevoerd, dan zou de AV-oplossing snel doorhebben dat het bestand een kwaadaardige code bevatte.

Ik had ongeveer een uur nodig om de eerste succesvolle omzeilingstrategie te vinden. Het bleek dat de code-emulator van deze specifieke leverancier slechts bereid was om een bepaald aantal instructies binnen een beperkte periode te controleren voordat deze er vanuit ging dat het programma zonder gevaar kon worden uitgevoerd. Om van deze beperking te profiteren liet ik mijn malware een lus van 80.000 instructies uitvoeren alvorens de kwaadaardige opdrachten aan de beurt kwamen. De AV-oplossing besteedde zoals verwacht de toebedeelde tijd aan het controleren van de waslijst aan instructies, maar had onvoldoende tijd om de coderegels uit te voeren die het kwaadaardige gedrag vertegenwoordigden. Het resultaat was dat er niets werd gedetecteerd.

Ik maakte slechts gebruik van één techniek om mijn code te laten detecteren dat het in een emulator werd uitgevoerd, maar ken minstens zes andere — wederzijds uitsluitende — manieren om de beveiliging te omzeilen.

Wat moeten netwerkbeheerders doen als ze horen dat de tools waarop ze jarenlang hebben vertrouwd hun netwerk in werkelijkheid niet beschermen tegen aanvallers? Ten eerste moeten ze zeker AV-oplossingen blijven gebruiken. Niet zozeer om schade als gevolg van malware te voorkomen, als wel om deze schade tot een minimum te beperken.

Realistisch gezien is de beste manier om bescherming te bieden tegen nieuwe bedreigingen om een beschermingslaag te creëren door geavanceerdere oplossingen op elkaar te stapelen. Er zijn innovatieve nieuwe technieken voor malwaredetectie ontwikkeld, die in staat zijn om malware te herkennen zonder hulp van signaturen. Strategieën zoals het controleren van de reputatie van bestanden en URL’s en machineleren zullen de doeltreffendheid van de beveiliging daarnaast sterk verbeteren.

Het is verder belangrijk om oplossingen te gebruiken die in real time detectie-informatie met elkaar kunnen uitwisselen, zodat er zo min mogelijk tijd verstrijkt tussen de verspreiding van malware en de beschikbaarheid van signaturen. Cloud-gebaseerde beveiligingsdiensten zijn in dit verband van onschatbaar belang. Voor makers van malware is het een stuk moeilijker om succesvolle ontwijkende strategieën te ontwikkelen als ze gedwongen zijn om hun malware te testen op basis van een detectieoplossing in de vorm van een zwarte doos die intern bij de AV-leverancier wordt gehost.

Beheerders kunnen een veel krachtiger verdedigingsstrategie ontwikkelen door gebruik te maken van een combinatie van AV-clients, netwerkoplossingen voor virusdetectie, sandboxing, code-emulatie en reputatiediensten. Het bezit van een krachtige anti-malwareoplossing is in de toekomst misschien voldoende om gerichte malware-aanvallen af te slaan. Beheerders moeten tot die tijd de detectiepercentages voor malware binnen hun netwerk goed in de gaten houden, zodat ze gerichte aanvallen in een vroegtijdig stadium kunnen identificeren en een halt toeroepen.

Alles is nog niet verloren — de strijd zal tot het einde der tijden voortwoekeren. We moeten waakzaam zijn en onze beveiligingsmechanismen voortdurend verder ontwikkelen om op de lange duur te kunnen overleven. Want één ding is zeker: wie achterblijft, zal daar keer op keer voor worden afgestraft.

Door: Kyle Adams, chief software architect bij Juniper Networks 

Wil jij dagelijkse updates?

Schrijf je dan in voor onze nieuwsbrief!