Jag bygger mitt eget filter med neuronnät och ensemble-inlärning (Del 1 av 3)
Det hände någon gång i våras. Efter att ett fjärde falskt Netflix meddelande hade slunkit igenom mitt spamfilter så började jag ifrågasätta exakt vad Microsoft egentligen håller på med. Någonstans tycker nämligen Microsoft att en avsändaradress som är ”gfdgsdf435esfa@neeeaxflix.com” inte alls är märklig och absolut ska få skicka meddelanden till mig om att min icke-existerande Netflix prenumeration behöver förnyas. Varför klarar inte ett av världens största företag och dess maskininlärningslösningar att detektera en sådan uppenbart avvikande avsändaradress? Anledningen kanske är rättfram för den med insikt, men oavsett så verkar inte Microsoft ämna dela detta med oss dödliga. Jag blir alltså sittandes med ett i sammanhanget halvdant e-postfilter som jag dessutom inte har varken förståelse för eller insikt i. När jag sedan dagen efter såg att ett annat webbfilter med påstådd maskininlärning misslyckades att identifiera ”2rfwea.fgsdgdfs.ru/[personens-e-postadress]/download.php” som något som kanske inte förekommer vanligtvis så var måttet rågat. Nu bygger jag mitt eget filter, med neuronnät och ensemble-inlärning! Problemet är väl bara att man först måste lära sig dessa saker…. Men häng med så gör vi detta ihop!
I den här bloggserien kommer vi se hur enkelt det egentligen är att bygga de första delarna i ett maskininlärningsbaserad filter som både fungerar ganska bra men framförallt tillåter oss att ha insyn och förståelse för dess agerande. Fokuset kommer att vara på webbadresser, men då e-postadresser är så lika så går det att lyfta mycket över till att behandla dessa.
I denna första del behandlas problembeskrivningen, den maskininlärningssugna får tålmodigt invänta del två. Det enda som läsaren behöver veta om maskininlärning just nu är att det kräver mycket ”träningsdata”(eller snarare, den varianten som vi kommer använda behöver det). Träningsdata är enkelt sagt en stor mängd exempel som demonstrerar de olika fallen. Här så är exemplen flera olika skadliga och icke-skadliga webbadresser. Med det så kommer lösningen själv lära sig de mönster som gör att dessa skiljer sig åt. Konkreta fall kan vara domänen för den tidigare nämnda webbadressen som webbfiltret misslyckades med att hitta: 2rfwea.fgsdgdfs.ru”; och ett legitimt exempel: ”simovits.com”. Bara från dessa två går det att se flera potentiella mönster som kanske kan användas för att skilja mellan skadliga och icke skadliga webbadresser, enbart utefter domännamnet. Det bör noteras att även metoder utan maskininlärning kan skilja på sådana fall. Men om vi bland annat vill ha ett system som kan kombinera massor av olika mönster på ett meningsfullt sätt så är maskininlärning ett bättre val.
Mer bakgrund (formel)
En mer formel beskrivning av problembakgrunden är nödvändig för att inte tappa bort vad syftet är. Eftersom detta blir lite av att återuppfinna hjulet så börjar vi från början. Detta gäller likaså för hela framställningen, vi låsas helt enkelt som att vi är de första personerna som gör detta.
Att bedöma om en specifik webbplats är skadlig eller ej är ett högaktuellt problem som ofta förekommer inom säkerhetsbranschen. En av de vanligaste och mest effektiva attackvektorerna för förövare är att använda sig av så kallad nätfiske (phishing), där mottagare antingen ämnas luras på deras känsliga information (lösenord, kontouppgifter m.m.) eller förmås att installera skadlig programvara. Gemensamt för den vanligaste formen av nätfiske är att mottagare uppmanas fylla i dessa känsliga uppgifter i ett formulär på en webbplats upprättad av förövaren. För många utan större datorkunskap kan det vara svårt att bedöma om dessa e-postmeddelanden är legitima, och det är oftast ännu svårare att bedöma de länkar till webbsidor som är inkluderade.
Att automatiskt kunna undersöka dessa skulle därför vara till hjälp för personer utan ingående kunskap om hur ”normala” webbadresser oftast ser ut. Vidare skulle detta även kunna användas för att bedöma rimligheten i mottagna e-post, på det sättet att förekommande länkar i meddelandet används för att bedöma skadlighet eller ej hos själva meddelandet. Till sist kan samma metodik användas till stor del för att bedöma avsändares e-postadresser.
Problembeskrivning
Nästa steg är att stolpa upp en närmare beskrivning av problemet och exakt vad som ska åstadkommas för att uppnå de beskrivna syftena. Först behöver den data som ska undersökas betraktas, vilket i detta fall blir webbadresser (URL:er).
En webbadress, även känd som en Uniform Resource Locator(URL), är förenklat en teckensträng som entydigt identifierar en resurs på det publika Internet. Den består av flera olika delar med olika betydelser. Ett simpelt exempel är nedan, som även fastslår kommande notation (som inte nödvändigtvis följer de strikta definitionerna som står i den relaterade RFC):
http://www.exempel.se/nyheter/idag.html
- Den första delen, ”http:” beskriver vilket protokoll som ska användas för att anropa resursen. Idag är den vanligaste förekommande ”https”.
- Den andra delen, ”//www.exempel.se” är domännamnet till den maskinen på vilket resursen återfinns. Notera att de inledande ”//” oftast försummas ur detta och att ett domännamn även kan ersättas med maskinens specifika IP-adress.
- Den tredje delen, ”/nyheter/idag.html” är fil-vägen till den specifika resursen på den berörda maskinen. Fil-vägen behöver inte nödvändigtvis svara mot en direkt plats i maskinens filsystem.
Problemet kan således formuleras som sådant: Är det möjligt, genom att enbart utvärdera webbadressen (utan att växelverka med den berörda maskinen), att bedöma om en webbplats är skadlig eller ej?
Skadlig i detta fall innebär att det är en förövare som har upprättat webbplatsen med syftet att antingen sprida skadlig kod eller lura användare att avslöja känsliga uppgifter. Notera även att detta är en inskränkt problemställning, en fullständig bedömning av webbplatsen bör ta hänsyn till hur den svarar på förfrågningar (vilket innebär växelverkan med webbplatsen). Fördelen med att enbart analysera webbadresserna är att den berörda webbplatsen inte behöver vara aktiv vid träningsförfarandet. Skadliga webbplatser har en tendens att bli nedplockade vilket försvårar insamlandet av tillräckligt med träningsdata vilket vi kommer behöva för maskininlärning.
Föregående problemställning reduceras emellertid ytterligare på grund av formen av tillgängliga data (se vidare nästa avsnitt). Den slutgiltiga formuleringen blir därför: Är det möjligt, genom att enbart utvärdera webbadressens domännamn, att bedöma om en webbplats är skadlig eller ej?
Att begränsa undersökningen till enbart domännamn har en praktisk fördel, då dessa är den delen av webbadresser som alltid förekommer i exempelvis länkar eller DNS uppslag. En maskininlärningsmodell som är tränad på fullständiga webbadresser kan felaktigt hantera de som enbart har domännamns-biten, och generaliseras sämre till nya länkar som innehåller tidigare påträffade domännamn men andra fil-vägar (generalisering behandlas mer i nästa blogg del). Till sist har undersökningen av domännamn fördelen att det även kan tillämpas på e-postadresser.
Det bör nämnas att människor (sådana som jobbar inom IT-säkerhetsbranschen) många gånger kan utföra denna bedömning. Den exakta noggrannheten varierar mellan olika personer, men kan åtminstone uppgå till över 80% . Självfallet beror detta på hur sofistikerade de skadliga webbadresserna är när det gäller att försöka framstå som legitima.
För ett positivt utfall av problemställningen så behöver därför en maskininlärningsmodell erhållas som har en noggrannhet över 50% (detta basscenario svarar mot ett fullständigt slumpmässig gissande vid jämnt fördelad data mellan skadliga och icke-skadliga). På samma sätt så bedöms ett ”bra” resultat vara om en modell kan erhållas som presterar över 80% rätt. Att övergå 90% noggrannhet anses svårt, då formen på webbadresser i slutändan inte ”måste” uppfylla någon speciell form beroende på om de är skadliga eller ej (mönster och tendenser är enbart beroende på mänskliga faktorer). Vidare blir resultatet vid denna nivå känsligt för fel i träningsdata (fel-klassificeringar, behandlas mer i nästa blogg del).
Data
För att bedöma skadlighet så behövs en stormängd träningsdata, vilket i detta fall utgörs av en samling webbadresser med tillhörande etiketter som betecknar om de är skadliga eller ej.
Insamlandet av skadliga webbadresser kan utgå ifrån upprättade listor som finns på Internet. De som används är följande:
- https://isc.sans.edu/feeds/suspiciousdomains_High.txt
- http://www.malwaredomainlist.com/hostslist/hosts.txt
- http://data.phishtank.com/data/online-valid.csv
Riktigheten hos klassificeringen som ”skadlig” bygger på användare som har bedömt dessa. Därför går det inte att utesluta att det kan förekomma falska positiva bedömningar.
För icke-skadliga webbadresser så görs ett antagande, nämligen att de mest populära webbplatserna som finns är icke-skadliga. Med det går de att utgå ifrån:
Detta antagande är dock inte alltid helt rätt, bland annat då legitima sidor kan används i skadliga syften (så som sidor som låter förövare ladda upp skadliga program), och att omfattande bot-trafik kan knuffa upp rena skadliga sidor i topplistan. I detta fall anses dock dessa brister vara acceptabla, då problemställningen framförallt är inriktad på att bedöma om en klassificering överhuvudtaget är möjlig via maskininlärning med avseende på domännamn.
Användandet av data ifrån flera olika källor har ett antal fördelar och nackdelar som bör nämnas. Bland fördelarna återfinns den större data mängden och en viss ökad robusthet till följd av att det är olika källor (bland annat till följd av att de skadliga sidor förekommer i olika sammanhang). Bland nackdelarna finns dock de faktum att de är på olika format. Exempelvis innehåller de ifrån phistank fullständiga webbadresser inklusive protokoll och fil-väg. Detta är inte fallet för de andra källorna som enbart innehåller domännamn. Det här är en av anledningen för den reducerade problemställningen ovan. Att undersöka en reducerad del av webbadresserna innebär sannolikt en försämrad förmåga att bedöma skadlighet. Därför kan en framtida eventuell förbättring vara att leta efter flera datakällor som innehåller fullständiga webbadresser, vilket dock innebär andra praktiska försämringar (så som att domännamn många gånger är det enda som finns tillgängligt från exempelvis DNS-loggar). Ett vida känt mönster som exempelvis inte kan ses här är att skadliga sidor många gånger fortfarande använder protokollet http. En till fördel med att enbart betrakta domännamn, som nämndes tidigare, är att det då är möjligt att överföra detta till bedömning av e-postadresser.
Avslutningsvis bör det nämnas att bättre datakällor kan existera, men att flera av dessa är betaltjänster. För nuvarande framställning anses detta inte rättfärdigat.
I nästa del…
Nu när vi har avverkat alla delar som omfattar själva problemuppsättningen och all nödvändiga data så kan vi i nästa del fokusera på själva maskininlärningsdelarna. Det är enbart utefter dessa två delar som vi kan välja rätt maskininlärningsmodeller. Det roligaste har vi alltså framöver!