Simovits

Fantastiska Antivirus och hur man kringgår dem

Det här blogginlägget är det första i en (förhoppningsvis!) forsatt serie om antivirusprogram, deras olika metoder för att upptäcka hot samt hur en angripare kan kringgå dem.

Målet är inte att besvara frågor såsom om antivirusprogram behövs, vilket som är “bäst” eller tala om det bizarra i att ett marknadsföretags så kallade “magiska kvadrant” har kommit att bli en vägledning för många organisationer när de väljer antiviruslösningar.

Istället är det min förhoppning att en bättre förståelse för hur antivirusprogram fungerar och deras begränsningar både kan underlätta för läsaren att bilda sig en egen uppfattning och fungera som en varning mot att hysa alltför höga förväntningar på antivirusprogrammens förmåga att stoppa hot!

Blogginlägget är skrivet främst med Windows i åtanke, men antiviruslösningar finns även till Mac och Linux och har samma grundläggande funktioner som sina Windows-motsvarigheter.

Signaturbaserad hotdetektion

De flesta känner till att man måste uppdatera antivirusprogram ofta för att de ska ha effekt. Vad man då framförallt menar är att man måste uppdatera signaturdatabasen, som innehåller beskrivningar av tidigare observerad skadlig kod. Det är alltså en kamp mot klockan att hot skall upptäckas, signaturer formuleras och distribueras till varje system innan hotet drabbar fler.

Vad är då en signatur? Det är helt enkelt en beskrivning av en fil som gör att man kan känna igen ett hot. Ett exempel på en signatur är den så kallade EICAR-teststrängen:

Textremsan ovan är framtagen för att testa antivirusprogrammens detektion. Testa själv genom att gå till https://secure.eicar.org/eicar.com.txt och spara textfilen på hårddisken. Reagerar din antivirusprodukt?

De flesta moderna antiviruslösningar känner av när filer sparas till och läses från hårddisken, men om realtidsskyddet inte är påslaget kan det krävas att du manuellt kör en genomsökning av filen. Ofta kan man göra detta med ett högerklick och välja att köra en genomsökning från menyn, men exakt hur detta ser ut varierar från produkt till produkt.

Skript- och batchfiler

Skript och batchfiler har traditionellt varit en blind fläck för antiviruslösningar då de inte behöver sparas på filsystemet för att kunna köras, och därmed inte utlöser en scanning från antiviruslösningen.

Sedan Windows 10 finns en lösning på problemet. AMSI, vars namn står för Anti Malware Scanning Interface, är ett gränssnitt för antiviruslösningar att avsöka skriptbaserade hot. När en skriptfil körs kommer koden att granskas av antiviruslösningen genom AMSI, och stoppa körningen om ett hot upptäcks.

Så för att sammanfatta: Om en fil sparas till eller läses från hårddisken och det finns en signatur i antiviruslösningen som matchar filen kommer systemet att larma.

Demonstration – Signaturbaserad detektion

För att demonstrera hur antivirusprogram kan stoppa körningen av skriptbaserade hot har jag öppnat Windows PowerShell ISE med en enkel trojan i skriptform. Trojanen kommer om den körs att öppna en bakdörr in till systemet och ge mig tillgång till en kommandoprompt.

Trojanen löser dock ut ett larm om den försöker köras:

Den rosa texten informerar om att hotet har stoppats efter att ha identifierats som skadligt. Hur kan mekanismen kringgås?

Att kringgå signaturbaserad detektion

Genom att klistra in en kodrad i taget och köra skriptet steg för steg går det att identifiera vilken del som utgör signaturen. Det är när rad 8 inkluderas som varningen löser ut.

$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)

Raden är egentligen inte särskilt hotfull, den ser bara till att informationen som skall sändas tillbaka till angriparens dator formateras så att den kan visas korrekt i en kommandoprompt. Men uppenbarligen utgör raden en del av en signatur och vi behöver förändra den för att bryta detektionen. Enklast görs detta genom att byta teckenkodning från ASCII till UTF8:

Förändringen gör att trojanen kan fungera felfritt utan varningar från antiviruslösningen, vilket kan upplevas som absurt eftersom teckenkodningen inte har någon som helst betydelse när det kommer till “farligheten” i koden som körs.

Som synes är det ofta inte speciellt svårt för en motiverad angripare att med en liten ansträngning kosmetiskt förändra skadlig kod så att den kringgår den signaturbaserade detektionen.
Beroende på vilken lösning som används kan även andra detektionstekniker användas och dessa kommer vi att titta närmare på i framtida blogginlägg.