Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen

Group-IB:s experter har undersökt fall relaterade till nätfiske, botnät, bedrägliga transaktioner och kriminella hackergrupper och använt grafanalys i många år för att identifiera olika typer av kopplingar. Olika fall har sina egna datamängder, sina egna algoritmer för att identifiera anslutningar och gränssnitt som är skräddarsydda för specifika uppgifter. Alla dessa verktyg utvecklades internt av Group-IB och var endast tillgängliga för våra anställda.

Grafanalys av nätverksinfrastruktur (nätverksgraf) blev det första interna verktyget som vi byggde in i alla företagets publika produkter. Innan vi skapade vårt nätverksdiagram analyserade vi många liknande utvecklingar på marknaden och hittade inte en enda produkt som tillfredsställde våra egna behov. I den här artikeln kommer vi att prata om hur vi skapade nätverksgrafen, hur vi använder den och vilka svårigheter vi stötte på.

Dmitrij Volkov, CTO Group-IB och chef för cyberintelligens

Vad kan Group-IB-nätverksdiagrammet göra?

Undersökningar

Sedan grundandet av Group-IB 2003 och fram till idag, har identifiering, utnämning och ställande av cyberbrottslingar varit en högsta prioritet i vårt arbete. Inte en enda cyberattacksundersökning var komplett utan att analysera angriparnas nätverksinfrastruktur. I början av vår resa var det ett ganska mödosamt "manuellt arbete" att söka efter relationer som kunde hjälpa till att identifiera brottslingar: information om domännamn, IP-adresser, digitala fingeravtryck från servrar, etc.

De flesta angripare försöker agera så anonymt som möjligt i nätverket. Men som alla människor gör de misstag. Huvudmålet med en sådan analys är att hitta "vita" eller "grå" historiska projekt av angripare som har korsningar med den skadliga infrastruktur som används i den aktuella incidenten som vi undersöker. Om det är möjligt att upptäcka "vita projekt" blir det som regel en trivial uppgift att hitta angriparen. När det gäller "grå" tar sökningen mer tid och ansträngning, eftersom deras ägare försöker anonymisera eller dölja registreringsdata, men chanserna är fortfarande ganska höga. Som regel, i början av sin kriminella verksamhet, ägnar angriparna mindre uppmärksamhet åt sin egen säkerhet och gör fler misstag, så ju djupare vi kan dyka in i historien, desto större är chanserna för en framgångsrik utredning. Därför är en nätverksgraf med bra historik ett oerhört viktigt inslag i en sådan undersökning. Enkelt uttryckt, ju djupare historisk data ett företag har, desto bättre är dess graf. Låt oss säga att en 5-årig historia kan hjälpa till att lösa, villkorligt, 1-2 av 10 brott, och en 15-årig historia ger en chans att lösa alla tio.

Nätfiske och bedrägeriupptäckt

Varje gång vi får en misstänkt länk till en nätfiske, bedräglig eller piratkopierad resurs bygger vi automatiskt en graf över relaterade nätverksresurser och kontrollerar alla hittade värdar för liknande innehåll. Detta gör att du kan hitta både gamla nätfiskesidor som var aktiva men okända, samt helt nya som är förberedda för framtida attacker, men som ännu inte används. Ett elementärt exempel som förekommer ganska ofta: vi hittade en nätfiskewebbplats på en server med endast 5 webbplatser. Genom att kontrollera var och en av dem hittar vi nätfiskeinnehåll på andra webbplatser, vilket innebär att vi kan blockera 5 istället för 1.

Sök efter backends

Denna process är nödvändig för att avgöra var den skadliga servern faktiskt finns.
99 % av kortbutiker, hackerforum, många nätfiskeresurser och andra skadliga servrar är gömda bakom både sina egna proxyservrar och proxyservrar för legitima tjänster, till exempel Cloudflare. Kunskap om den verkliga backend är mycket viktig för utredningar: värdleverantören från vilken servern kan beslagtas blir känd och det blir möjligt att bygga förbindelser med andra skadliga projekt.

Till exempel har du en nätfiskewebbplats för att samla in bankkortsdata som löser sig till IP-adressen 11.11.11.11 och en kortbutiksadress som löser sig till IP-adressen 22.22.22.22. Under analysen kan det visa sig att både nätfiskesidan och cardshop har en gemensam backend IP-adress, till exempel 33.33.33.33. Denna kunskap gör att vi kan bygga en koppling mellan nätfiskeattacker och en kortbutik där bankkortsdata kan säljas.

Händelsekorrelation

När du har två olika utlösare (låt oss säga på en IDS) med olika skadlig programvara och olika servrar för att kontrollera attacken, kommer du att behandla dem som två oberoende händelser. Men om det finns en bra koppling mellan skadliga infrastrukturer, så blir det uppenbart att det inte är olika attacker, utan stadier av en, mer komplex flerstegsattack. Och om en av händelserna redan tillskrivs någon grupp av angripare, kan den andra också tillskrivas samma grupp. Naturligtvis är tillskrivningsprocessen mycket mer komplex, så behandla detta som ett enkelt exempel.

Indikatorberikning

Vi kommer inte att ägna mycket uppmärksamhet åt detta, eftersom detta är det vanligaste scenariot för att använda grafer inom cybersäkerhet: du ger en indikator som indata, och som en utgång får du en rad relaterade indikatorer.

Identifiera mönster

Att identifiera mönster är avgörande för effektiv jakt. Grafer låter dig inte bara hitta relaterade element, utan också identifiera vanliga egenskaper som är karakteristiska för en viss grupp av hackare. Kunskap om sådana unika egenskaper gör att du kan känna igen angriparens infrastruktur även i förberedelsestadiet och utan bevis som bekräftar attacken, såsom nätfiske-e-postmeddelanden eller skadlig programvara.

Varför skapade vi vår egen nätverksgraf?

Återigen tittade vi på lösningar från olika leverantörer innan vi kom fram till att vi behövde utveckla ett eget verktyg som kunde göra något som ingen befintlig produkt kunde göra. Det tog flera år att skapa den, under vilka vi ändrade den fullständigt flera gånger. Men trots den långa utvecklingsperioden har vi ännu inte hittat en enda analog som skulle uppfylla våra krav. Med vår egen produkt kunde vi så småningom lösa nästan alla problem vi upptäckte i befintliga nätverksdiagram. Nedan kommer vi att överväga dessa problem i detalj:

problem
beslutet

Brist på en leverantör med olika samlingar av data: domäner, passiv DNS, passiv SSL, DNS-poster, öppna portar, kör tjänster på portar, filer som interagerar med domännamn och IP-adresser. Förklaring. Vanligtvis tillhandahåller leverantörer separata typer av data, och för att få hela bilden måste du köpa prenumerationer från alla. Trots det är det inte alltid möjligt att få all data: vissa passiva SSL-leverantörer tillhandahåller endast data om certifikat utfärdade av betrodda certifikatutfärdare, och deras täckning av självsignerade certifikat är extremt dålig. Andra tillhandahåller också data med hjälp av självsignerade certifikat, men samlar bara in dem från standardportar.
Vi samlade alla ovanstående samlingar själva. För att till exempel samla in data om SSL-certifikat skrev vi vår egen tjänst som samlar in dem både från betrodda certifikatutfärdare och genom att skanna hela IPv4-utrymmet. Certifikat samlades inte bara in från IP, utan också från alla domäner och underdomäner från vår databas: om du har domänen example.com och dess underdomän www.example.com och de löser sig alla till IP 1.1.1.1, sedan när du försöker få ett SSL-certifikat från port 443 på en IP, domän och dess underdomän, kan du få tre olika resultat. För att samla in data om öppna portar och körande tjänster var vi tvungna att skapa vårt eget distribuerade skanningssystem, eftersom andra tjänster ofta hade IP-adresserna till sina skanningsservrar på "svarta listor". Våra skanningsservrar hamnar också på svarta listor, men resultatet av att upptäcka de tjänster vi behöver är högre än för dem som helt enkelt skannar så många portar som möjligt och säljer tillgång till denna data.

Brist på tillgång till hela databasen med historiska dokument. Förklaring. Varje normal leverantör har en god ackumulerad historia, men av naturliga skäl kunde vi som kund inte få tillgång till all historisk data. De där. Du kan få hela historiken för en enskild post, till exempel per domän eller IP-adress, men du kan inte se historiken för allt – och utan detta kan du inte se hela bilden.
För att samla in så många historiska register på domäner som möjligt köpte vi olika databaser, analyserade många öppna resurser som hade denna historia (det är bra att det fanns många av dem) och förhandlade med domännamnsregistratorer. Alla uppdateringar av våra egna samlingar förvaras naturligtvis med en fullständig revisionshistorik.

Alla befintliga lösningar låter dig bygga en graf manuellt. Förklaring. Låt oss säga att du köpt många abonnemang från alla möjliga dataleverantörer (vanligtvis kallade "berikare"). När du behöver bygga en graf ger du "händer" kommandot att bygga från det önskade anslutningselementet, välj sedan de nödvändiga från de element som visas och ger kommandot för att slutföra anslutningarna från dem, och så vidare. I det här fallet ligger ansvaret för hur väl grafen kommer att konstrueras helt på personen.
Vi gjorde automatisk konstruktion av grafer. De där. om du behöver bygga en graf byggs anslutningar från det första elementet automatiskt, sedan från alla efterföljande också. Specialisten anger bara vid vilket djup grafen behöver byggas. Processen att automatiskt fylla i grafer är enkel, men andra leverantörer implementerar det inte eftersom det ger ett stort antal irrelevanta resultat, och vi var också tvungna att ta hänsyn till denna nackdel (se nedan).

Många irrelevanta resultat är ett problem med alla nätverkselementgrafer. Förklaring. Till exempel är en "dålig domän" (deltog i en attack) associerad med en server som har 10 andra domäner associerade med sig under de senaste 500 åren. När man manuellt lägger till eller konstruerar en graf manuellt, bör alla dessa 500 domäner också visas på grafen, även om de inte är relaterade till attacken. Eller så kontrollerar du till exempel IP-indikatorn från leverantörens säkerhetsrapport. Vanligtvis släpps sådana rapporter med en betydande fördröjning och sträcker sig ofta över ett år eller mer. Troligtvis är servern med denna IP-adress redan uthyrd till andra personer med andra anslutningar när du läser rapporten, och att bygga en graf kommer återigen att resultera i att du får irrelevanta resultat.
Vi tränade systemet att identifiera irrelevanta element med samma logik som våra experter gjorde manuellt. Till exempel kontrollerar du en dålig domän example.com, som nu löser sig till IP 11.11.11.11, och för en månad sedan - till IP 22.22.22.22. Förutom domänen example.com är IP 11.11.11.11 också associerad med example.ru, och IP 22.22.22.22 är associerad med 25 tusen andra domäner. Systemet, som en person, förstår att 11.11.11.11 med största sannolikhet är en dedikerad server, och eftersom domänen example.ru liknar stavningen på example.com, så är de med stor sannolikhet anslutna och bör ligga på Graf; men IP 22.22.22.22 tillhör delad hosting, så alla dess domäner behöver inte inkluderas i grafen om det inte finns andra kopplingar som visar att en av dessa 25 tusen domäner också måste inkluderas (till exempel, example.net) . Innan systemet förstår att anslutningar måste brytas och vissa element inte flyttas till grafen, tar det hänsyn till många egenskaper hos de element och kluster i vilka dessa element kombineras, såväl som styrkan hos de nuvarande anslutningarna. Till exempel, om vi har ett litet kluster (50 element) på grafen, som inkluderar en dålig domän, och ett annat stort kluster (5 tusen element) och båda klustren är sammankopplade med en anslutning (linje) med mycket låg styrka (vikt) , då kommer en sådan anslutning att brytas och element från det stora klustret tas bort. Men om det finns många kopplingar mellan små och stora kluster och deras styrka gradvis ökar, kommer i det här fallet inte kopplingen att brytas och de nödvändiga elementen från båda klustren kommer att finnas kvar på grafen.

Server- och domänägandeintervallet tas inte med i beräkningen. Förklaring. "Dåliga domäner" kommer förr eller senare att upphöra att gälla och köpas igen för skadliga eller legitima syften. Även skottsäkra värdservrar hyrs ut till olika hackare, så det är viktigt att veta och ta hänsyn till intervallet när en viss domän/server var under kontroll av en ägare. Vi stöter ofta på en situation där en server med IP 11.11.11.11 nu används som C&C för en bankbot, och för 2 månader sedan kontrollerades den av Ransomware. Om vi ​​bygger en anslutning utan att ta hänsyn till ägarintervall kommer det att se ut som att det finns en koppling mellan ägarna av bankbotnätet och ransomware, även om det faktiskt inte finns någon. I vårt arbete är ett sådant fel kritiskt.
Vi lärde systemet att bestämma ägarintervall. För domäner är detta relativt enkelt, eftersom whois ofta innehåller start- och utgångsdatum för registrering och, när det finns en fullständig historik över whois-ändringar, är det lätt att fastställa intervallen. När en domäns registrering inte har löpt ut, men dess hantering har överförts till andra ägare, kan den också spåras. Det finns inget sådant problem för SSL-certifikat, eftersom de utfärdas en gång och inte förnyas eller överförs. Men med självsignerade certifikat kan du inte lita på de datum som anges i certifikatets giltighetsperiod, eftersom du kan generera ett SSL-certifikat idag och ange certifikatets startdatum från 2010. Det svåraste är att bestämma ägarintervallen för servrar, eftersom endast värdleverantörer har datum och hyresperioder. För att fastställa serverns ägandeperiod började vi använda resultaten av portskanning och skapa fingeravtryck av körande tjänster på portar. Med hjälp av denna information kan vi ganska exakt säga när serverns ägare ändrades.

Få kopplingar. Förklaring. Nuförtiden är det inte ens ett problem att få en gratis lista över domäner vars whois innehåller en specifik e-postadress, eller att ta reda på alla domäner som var associerade med en specifik IP-adress. Men när det kommer till hackare som gör sitt bästa för att vara svåra att spåra, behöver vi ytterligare knep för att hitta nya egenskaper och bygga nya kopplingar.
Vi ägnade mycket tid åt att undersöka hur vi kunde extrahera data som inte var tillgänglig på ett konventionellt sätt. Vi kan inte här beskriva hur det fungerar av uppenbara skäl, men under vissa omständigheter gör hackare, när de registrerar domäner eller hyr och konfigurerar servrar, misstag som gör att de kan ta reda på e-postadresser, hackeralias och backend-adresser. Ju fler anslutningar du extraherar, desto mer exakta grafer kan du bygga.

Hur vår graf fungerar

För att börja använda nätverksdiagrammet måste du ange domänen, IP-adressen, e-postadressen eller SSL-certifikatets fingeravtryck i sökfältet. Det finns tre förhållanden som analytikern kan kontrollera: tid, stegdjup och röjning.

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen

Tid

Tid – datum eller intervall då det sökta elementet användes i skadliga syften. Om du inte anger denna parameter kommer systemet självt att bestämma det senaste ägarintervallet för denna resurs. Till exempel den 11 juli publicerade Eset rapportera om hur Buhtrap använder 0-dagars exploateringen för cyberspionage. Det finns 6 indikatorer i slutet av rapporten. En av dem, secure-telemetry[.]net, omregistrerades den 16 juli. Därför, om du bygger en graf efter den 16 juli får du irrelevanta resultat. Men om du anger att den här domänen användes före detta datum, innehåller grafen 126 nya domäner, 69 IP-adresser som inte finns med i Eset-rapporten:

  • ukrfreshnews[.]com
  • unian-search[.]com
  • vesti-world[.]info
  • runewsmeta[.]com
  • foxnewsmeta[.]biz
  • sobesednik-meta[.]info
  • rian-ua[.]net
  • etc.

Förutom nätverksindikatorer hittar vi omedelbart kopplingar till skadliga filer som hade kopplingar till denna infrastruktur och taggar som berättar att Meterpreter och AZORult användes.

Det fantastiska är att du får detta resultat inom en sekund och du behöver inte längre spendera dagar med att analysera data. Naturligtvis minskar detta tillvägagångssätt ibland avsevärt tiden för utredningar, vilket ofta är kritiskt.

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen

Antalet steg eller rekursionsdjup som grafen kommer att byggas med

Som standard är djupet 3. Detta innebär att alla direkt relaterade element kommer att hittas från det önskade elementet, sedan kommer nya anslutningar att byggas från varje nytt element till andra element, och nya element kommer att skapas från de nya elementen från det senaste steg.

Låt oss ta ett exempel som inte är relaterat till APT och 0-dagars exploits. Nyligen beskrevs ett intressant fall av bedrägeri relaterat till kryptovalutor på Habré. Rapporten nämner domänen themcx[.]co, som används av bedragare för att vara värd för en webbplats som utger sig för att vara en Miner Coin Exchange och telefonsökning[.]xyz för att locka trafik.

Det framgår av beskrivningen att systemet kräver en ganska stor infrastruktur för att locka trafik till bedrägliga resurser. Vi bestämde oss för att titta på denna infrastruktur genom att bygga en graf i 4 steg. Resultatet var en graf med 230 domäner och 39 IP-adresser. Därefter delar vi in ​​domäner i två kategorier: de som liknar tjänster för att arbeta med kryptovalutor och de som är avsedda att driva trafik genom telefonverifieringstjänster:

Relaterat till kryptovaluta
Förknippas med telefonstansningstjänster

mynthållare[.]cc
caller-record[.]site.

mcxwallet[.]co
telefon-register[.]utrymme

btcnoise[.]com
fone-avtäcka[.]xyz

kryptominer[.]watch
nummer-avtäcka[.]info

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen

rengöring

Som standard är alternativet "Graph Cleanup" aktiverat och alla irrelevanta element kommer att tas bort från grafen. Förresten, det användes i alla tidigare exempel. Jag förutser en naturlig fråga: hur kan vi se till att något viktigt inte raderas? Jag ska svara: för analytiker som gillar att bygga grafer för hand kan automatiserad rengöring inaktiveras och antalet steg kan väljas = 1. Därefter kommer analytikern att kunna komplettera grafen från de element han behöver och ta bort element från grafen som är irrelevanta för uppgiften.

Redan på grafen blir historiken för förändringar i whois, DNS, såväl som öppna portar och tjänster som körs på dem, tillgänglig för analytikern.

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen

Finansiellt nätfiske

Vi undersökte verksamheten i en APT-grupp, som under flera år utförde nätfiskeattacker mot kunder från olika banker i olika regioner. Ett karakteristiskt drag för denna grupp var registreringen av domäner som mycket liknar namnen på riktiga banker, och de flesta nätfiskesidorna hade samma design, de enda skillnaderna var i namnen på bankerna och deras logotyper.

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen
I det här fallet hjälpte automatiserad grafanalys oss mycket. Genom att ta en av deras domäner - lloydsbnk-uk[.]com, byggde vi på några sekunder en graf med ett djup på 3 steg, som identifierade mer än 250 skadliga domäner som har använts av denna grupp sedan 2015 och som fortsätter att användas . Vissa av dessa domäner har redan köpts av banker, men historiska register visar att de tidigare var registrerade för angripare.

För tydlighetens skull visar figuren en graf med ett djup på 2 steg.

Det är anmärkningsvärt att angriparna redan 2019 ändrade sin taktik något och började registrera inte bara bankernas domäner för att vara värd för webbnätfiske, utan även olika konsultföretags domäner för att skicka nätfiske-e-post. Till exempel domänerna swift-department.com, saudconsultancy.com, vbgrigoryanpartners.com.

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen

Koboltgäng

I december 2018 skickade hackergruppen Cobalt, som specialiserat sig på riktade attacker mot banker, ut en e-postkampanj på uppdrag av Kazakstans centralbank.

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen
Breven innehöll länkar till hXXps://nationalbank.bz/Doc/Prikaz.doc. Det nedladdade dokumentet innehöll ett makro som startade Powershell, som skulle försöka ladda och köra filen från hXXp://wateroilclub.com/file/dwm.exe i %Temp%einmrmdmy.exe. Filen %Temp%einmrmdmy.exe aka dwm.exe är en CobInt stager konfigurerad för att interagera med servern hXXp://admvmsopp.com/rilruietguadvtoefmuy.

Föreställ dig att inte kunna ta emot dessa nätfiske-e-postmeddelanden och utföra en fullständig analys av de skadliga filerna. Grafen för den skadliga domänen nationalbank[.]bz visar omedelbart kopplingar till andra skadliga domäner, tillskriver den till en grupp och visar vilka filer som användes i attacken.

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen
Låt oss ta IP-adressen 46.173.219[.]152 från den här grafen och bygga en graf från den i ett steg och stänga av rengöringen. Det finns 40 domäner associerade med det, till exempel bl0ckchain[.]ug
paypal.co.uk.qlg6[.]pw
cryptoelips[.]com

Att döma av domännamnen verkar det som om de används i bedrägliga system, men rengöringsalgoritmen insåg att de inte var relaterade till denna attack och lade dem inte på grafen, vilket avsevärt förenklar analys- och tillskrivningsprocessen.

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen
Om du bygger om grafen med hjälp av nationalbank[.]bz, men inaktiverar grafrensningsalgoritmen, kommer den att innehålla mer än 500 element, varav de flesta inte har något att göra med Cobalt-gruppen eller deras attacker. Ett exempel på hur en sådan graf ser ut ges nedan:

Din väg ut, graf: hur vi inte hittade en bra nätverksgraf och skapade vår egen

Slutsats

Efter flera år av finjustering, testning i verkliga undersökningar, hotforskning och jakt på angripare, lyckades vi inte bara skapa ett unikt verktyg, utan också förändra attityden hos experter inom företaget till det. Till en början vill tekniska experter ha fullständig kontroll över grafkonstruktionsprocessen. Att övertyga dem om att automatisk grafkonstruktion kunde göra detta bättre än en person med många års erfarenhet var extremt svårt. Allt bestämdes av tid och flera "manuella" kontroller av resultaten av vad grafen producerade. Nu litar våra experter inte bara på systemet, utan använder också de resultat det får i sitt dagliga arbete. Denna teknik fungerar i vart och ett av våra system och gör att vi bättre kan identifiera hot av alla slag. Gränssnittet för manuell grafanalys är inbyggt i alla Group-IB-produkter och utökar avsevärt möjligheterna för jakt på cyberbrott. Detta bekräftas av analytiker recensioner från våra kunder. Och vi fortsätter i sin tur att berika grafen med data och arbeta med nya algoritmer med hjälp av artificiell intelligens för att skapa den mest exakta nätverksgrafen.

Källa: will.com

Lägg en kommentar