
În investigarea cazurilor legate de phishing, botnets, tranzacții frauduloase și grupuri criminale de hackeri, experții Group-IB folosesc de mulți ani analiza grafică pentru a identifica diverse tipuri de conexiuni. În diferite cazuri, există seturi proprii de date, algoritmi de identificare a conexiunilor și interfețe adaptate la sarcinile specifice. Toate aceste instrumente au fost dezvoltate intern de Group-IB și au fost disponibile doar angajaților noștri.
Analiza grafică a infrastructurii de rețea (graficul rețelei) a fost primul instrument intern pe care l-am integrat în toate produsele publice ale companiei. Înainte de a crea propriul nostru grafic de rețea, am analizat numeroase dezvoltări similare de pe piață și nu am găsit niciun produs care să satisfacă nevoile noastre. În acest articol, vom vorbi despre cum am creat graficul de rețea, cum îl folosim și cu ce dificultăți ne-am confruntat.
Dmitry Volkov, CTO Group-IB și șeful departamentului de ciberintelligence
Ce poate face graficul de rețea Group-IB?
Investigații
De la înființarea Group-IB în 2003 până în prezent, identificarea, de-anonimizarea și tragerea la răspundere a cibercriminalilor reprezintă prioritatea principală în activitatea noastră. Nicio investigație a unei ciberatacuri nu a fost completă fără analiza infrastructurii de rețea a atacatorilor. La începuturile noastre, aceasta a fost o „lucrare manuală” destul de laborioasă pentru a găsi legături care ar putea ajuta la identificarea infractorilor: informații despre numele de domenii, adrese IP, amprente digitale ale serverelor etc.
Cei mai mulți atacatori încearcă să acționeze cât mai anonim în rețea. Totuși, ca și toți oamenii, ei fac greșeli. Principala sarcină a unei astfel de analize este de a identifica proiectele „albe” sau „gri” istorice ale infractorilor, care au intersecții cu infrastructura malițioasă utilizată în incidentul actual pe care îl investigăm. Dacă reușim să descoperim „proiecte albe”, găsirea atacatorului devine, de obicei, o sarcină trivială. În cazul „proiectelor gri”, căutarea necesită mai mult timp și efort, deoarece proprietarii lor încearcă să anonimizeze sau să ascundă datele de înregistrare, însă șansele rămân suficient de mari. De obicei, la începutul activităților lor criminale, atacatorii acordă mai puțină atenție propriului nivel de securitate și fac mai multe greșeli, astfel încât cu cât ne putem adânci mai mult în istorie, cu atât mai mari sunt șansele pentru o anchetă de succes. De aceea, un grafic de rețea cu o poveste bună este un element extrem de important al unei astfel de investigații. Cu alte cuvinte, cu cât mai multe date istorice are compania, cu atât mai bun este graficul său. Să presupunem că o istorie de 5 ani poate ajuta la descoperirea, aproximativ, a 1-2 din 10 crime, iar o istorie de 15 ani oferă șanse de a descoperi toate cele zece.
Identificarea phishingului și a fraudei
De fiecare dată când primim un link suspect de phishing, resurse frauduloase sau piratate, construim automat un grafic al resurselor de rețea conectate și verificăm toate gazdele găsite pentru conținut similar. Acest lucru ne permite să găsim atât site-uri vechi de phishing care au fost active, dar necunoscute, cât și complet noi, care sunt pregătite pentru atacuri viitoare, dar care nu au fost utilizate încă. Un exemplu simplu, care apare destul de des: am găsit un site de phishing pe un server unde există doar 5 site-uri. Verificând fiecare dintre ele, găsim conținut de phishing și pe celelalte site-uri, ceea ce înseamnă că putem bloca 5 în loc de 1.
Căutarea backend-urilor
Acest proces este necesar pentru a stabili unde se află cu adevărat serverul malițios.
99% dintre magazinele online, forumurile hackerilor, numeroase resurse de phishing și alte servere malițioase se ascund atât în spatele propriilor servere proxy, cât și în spatele proxy-urilor unor servicii legitime, cum ar fi Cloudflare. Cunoașterea backend-ului real este foarte importantă pentru investigații: devine cunoscut furnizorul de hosting de la care se poate confisca serverul și apare posibilitatea de a construi legături cu alte proiecte malițioase.
De exemplu, aveți un site de phishing pentru colectarea datelor bancare, care se rezolvă în IP-ul 11.11.11.11, și adresa unui magazin online, care se rezolvă în IP-ul 22.22.22.22. În timpul analizei, poate apărea că atât site-ul de phishing, cât și magazinul online au un IP backend comun, de exemplu, 33.33.33.33. Aceste cunoștințe permit construirea unei legături între atacurile de phishing și magazinul online, unde, probabil, se vând datele bancare.
Corelarea evenimentelor
Atunci când aveți două alerte diferite (să zicem, pe IDS) cu diferite programe malițioase și servere diferite pentru gestionarea atacului, le veți considera ca două evenimente independente. Dar dacă există o bună legătură între infrastructurile malițioase, devine evident că acestea nu sunt atacuri diferite, ci etape ale unui atac mult mai complex, în mai multe etape. Și dacă unul dintre evenimente a fost deja atribuit unei grupări de atacatori, și celălalt poate fi atribuit aceleași grupări. Desigur, procesul de atribuire este mult mai complex, așa că tratați cele scrise ca pe un simplu exemplu.
Îmbogățirea indicatorilor
Nu vom acorda multă atenție acestui subiect, deoarece este cel mai comun scenariu de utilizare a grafurilor în securitatea cibernetică: introduci un indicator și obții un array de indicatori asociați la ieșire.
Identificarea modelelor
Identificarea modelelor este necesară pentru o vânătoare eficientă. Grafurile permit nu doar găsirea elementelor conexe, ci și identificarea proprietăților comune care sunt specifice unui anumit grup de hackeri. Cunoașterea unor astfel de trăsături unice permite recunoașterea infrastructurii atacatorilor încă din etapa de pregătire, fără dovezi care să confirme atacul, cum ar fi e-mailurile de phishing sau programele malițioase.
De ce am creat grafica noastră de rețea?
Reiterez că am analizat soluții de la diferiți furnizori înainte de a conchide că trebuie să dezvoltăm propriul instrument, capabil să facă ceea ce nu există în niciun produs existent. Crearea acestuia a durat câțiva ani, timp în care l-am modificat complet de mai multe ori. Cu toate acestea, în ciuda timpului îndelungat de dezvoltare, nu am găsit încă un echivalent care să răspundă cerințelor noastre. Cu ajutorul produsului nostru, am reușit, în cele din urmă, să rezolvăm aproape toate problemele descoperite în rețelele grafice existente. Mai jos vom examina aceste probleme în detaliu:
Problema
Soluție
Lipsa unui furnizor cu colecții variate de date: domenii, DNS pasiv, SSL pasiv, înregistrări DNS, porturi deschise, servicii care rulează pe porturi, fișiere care interacționează cu numele de domeniu și cu adresele IP. Explicație. De obicei, furnizorii oferă tipuri separate de date, iar pentru a obține o imagine de ansamblu completă, trebuie să achiziționezi abonamente de la toți. Dar chiar și așa, nu mereu reușești să obții toate datele: unii furnizori de SSL pasiv oferă date doar despre certificate emise de CA de încredere, iar acoperirea certificatelor auto-semnate este extrem de slabă. Alții oferă date și despre certificatele auto-semnate, dar le colectează doar din porturi standard.
Am colectat toate colecțiile menționate mai sus noi înșine. De exemplu, pentru a colecta date despre certificate SSL, am scris propriul serviciu care le adună atât de la CA de încredere, cât și prin scanarea întregului spațiu IPv4. Certificatele au fost colectate nu doar de la IP-uri, ci și de la toate domeniile și subdomeniile din baza noastră: dacă aveți un domeniu example.com și subdomeniul său iar toate acestea se rezolvă în IP 1.1.1.1, atunci când încercați să obțineți un certificat SSL de pe portul 443 utilizând IP-ul, domeniul și subdomeniul său, puteți obține trei rezultate diferite. Pentru a colecta date despre porturile deschise și serviciile care rulează, a fost necesar să creăm propriul sistem distribuit de scanare, deoarece alte servicii aveau adrese IP ale serverelor de scanare adesea incluse în "listele negre". Serverele noastre de scanare ajung și ele pe "listele negre", dar rezultatul descoperirii serviciilor de care avem nevoie este mai mare decât cel al celor care doar scanează cât mai multe porturi și vând accesul la aceste date.
Lipsa accesului la întreaga bază de date istorică. Explicație. Fiecare furnizor decent are o istorie acumulată bună, dar din motive naturale, noi, ca și clienți, nu am putut obține acces la toate datele istorice. Adică putem obține întreaga istorie pentru un înregistrare separată, de exemplu, pentru un domeniu sau o adresă IP, dar nu putem vedea istoria globală — iar fără aceasta, nu putem observa tabloul complet.
Pentru a aduna cât mai multe înregistrări istorice despre domenii, am achiziționat diverse baze de date, am parseat o mulțime de resurse deschise care conțineau această istorie (bine că au fost multe), am negociat cu înregistratorii de nume de domenii. Toate actualizările din propriile noastre colecții, desigur, sunt păstrate cu întreaga istorie a modificărilor.
Toate soluțiile existente permit construirea graficelor în mod manual. Explicație. Presupunem că ați cumpărat numeroase abonamente de la toți furnizorii posibili de date (de obicei, aceștia sunt numiți „îmbogățitori”). Când trebuie să construiți un grafic, manual îi dați comanda să construiască de la elementul de legătură dorit, apoi din elementele apărute alegeți cele necesare și dați comanda de a construi legăturile de la acestea și așa mai departe. În acest caz, responsabilitatea pentru calitatea graficului construit revine complet persoanei.
Am realizat construcția automată a graficelor. Adică, dacă trebuie să construiți un grafic, legăturile de la primul element se construiesc automat, ulterior și din toate celelalte — de asemenea. Specialistul doar indică adâncimea din care trebuie construit graficul. Procesul de construcție automată a graficelor este simplu, dar ceilalți furnizori nu îl implementează deoarece oferă o cantitate enormă de rezultate nerelevante și acest dezavantaj a trebuit să-l luăm în considerare (vezi mai jos).
Multe rezultate nerelevante reprezintă o problemă pentru toate grafurile de elemente de rețea. Explicație. De exemplu, un „domeniu rău” (participat la atac) este legat de un server care, în ultimii 10 ani, a fost asociat cu 500 de alte domenii. Atunci când adăugați manual sau construiți automat graficul, toate cele 500 de domenii trebuie să apară în grafic, deși nu au legătură cu atacul. Sau, de exemplu, verificați un indicator IP dintr-un raport al unui furnizor de securitate. De obicei, astfel de rapoarte apar cu întârziere semnificativă și acoperă, adesea, un an sau mai mult. Este foarte probabil ca, în momentul în care citiți raportul, serverul cu această adresă IP să fi fost deja închiriat altor persoane cu alte legături, iar construirea graficului va duce la obținerea din nou a unor rezultate nerelevante.
Am instruit sistemul să identifice elementele nerelevante după aceeași logică utilizată de experții noștri manual. De exemplu, verificați un domeniu rău example.com, care acum se rezolvă în IP 11.11.11.11, iar cu o lună în urmă – în IP 22.22.22.22. Cu IP 11.11.11.11, pe lângă domeniul example.com, este legat și example.ru, iar cu IP 22.22.22.22 sunt legate 25 de mii de alte domenii. Sistemul, ca și un om, înțelege că 11.11.11.11 este, cel mai probabil, un server dedicat, iar deoarece domeniul example.ru este similar ca scriere cu example.com, este foarte probabil ca acestea să fie legate și să trebuiască să fie în grafic; pe când IP 22.22.22.22 aparține unui hosting partajat, deci toate domeniile sale nu trebuie să fie trecute în grafic, dacă nu există alte legături care să arate că vreunul din cele 25 de mii de domenii trebuie să fie inclus (de exemplu, example.net). Înainte ca sistemul să înțeleagă că legăturile trebuie rupte și că o parte din elemente nu trebuie incluse în grafic, ia în considerare numeroase proprietăți ale elementelor și clusterelor în care aceste elemente sunt grupate, precum și tăria legăturilor curente. De exemplu, dacă avem un cluster mic în grafic (50 de elemente), în care se află un domeniu rău, și un alt cluster mare (5 mii de elemente), iar cele două clustere sunt legate printr-o legătură (linie) cu o tărie foarte mică (greutate), atunci această legătură se va rupe și elementele din clusterul mare vor fi eliminate. Dar, dacă legăturile între clusterul mic și cel mare sunt multe și tăria lor crește treptat, atunci în acest caz legătura nu se va rupe și în grafic vor rămâne elementele necesare din ambele clustere.
Intervalul de deținere a serverului și a domeniului nu este luat în considerare. Explicație. Perioada de înregistrare a „domeniilor necorespunzătoare” va expira mai devreme sau mai târziu, iar acestea sunt din nou achiziționate în scopuri malițioase sau legitime. Chiar și la hosting-urile bulletproof, serverele sunt închiriate unor hackeri diferiți, așa că este critic să cunoști și să iei în considerare intervalul în care un anumit domeniu/server a fost sub conducerea aceluiași proprietar. Ne întâlnim frecvent cu situația în care serverul cu IP 11.11.11.11 este acum folosit ca C&C pentru boti bancari, iar cu două luni în urmă era administrat de ransomware. Dacă construim o legătură fără a lua în considerare intervalele de deținere, va părea că există o conexiune între proprietarii rețelei de boti bancari și cei ai ransomware-ului, deși în realitate nu există. O astfel de eroare este critică în activitatea noastră.
Am învățat sistemul să determine intervalele de deținere. Pentru domenii, este relativ simplu, deoarece în whois sunt adesea indicate datele de început și de expirare a înregistrării, iar când există o istorie completă a modificărilor whois, determinarea intervalelor este ușoară. Când termenul de înregistrare al unui domeniu nu a expirat, dar gestionarea a fost transferată altor proprietari, acest lucru se poate urmări de asemenea. Pentru certificatele SSL, nu există această problemă, deoarece se emit o singură dată, nu se reînnoiesc și nu se transferă. Dar pentru certificatele autocontractate, nu putem avea încredere în datele indicate în termenele de valabilitate ale certificatului, deoarece poate fi generat un certificat SSL astăzi, iar data de început a valabilității certificatului să fie indicată din 2010. Cea mai dificilă sarcină este determinarea intervalelor de deținere pentru servere, deoarece datele și termenii de închiriere sunt disponibili doar pentru furnizorii de hosting. Pentru a determina perioada de deținere a unui server, am început să folosim rezultatele scanărilor de porturi și crearea amprentelor serviciilor rulate pe porturi. Pe baza acestei informații, putem spune destul de precis când s-a schimbat proprietarul serverului.
Puține legături. Explicație. Acum nu este o problemă chiar și să obții gratuit o listă de domenii în whois care conțin o anumită adresă de email, sau să afli toate domeniile care au fost legate de o anumită adresă IP. Dar, atunci când este vorba de hackeri, care fac tot posibilul pentru a fi greu de urmărit, sunt necesare „trucuri” suplimentare care să permită identificarea de noi proprietăți și construirea de noi legături.
Am petrecut mult timp cercetând cum putem extrage datele care nu sunt accesibile prin metode obișnuite. Nu putem detalia cum funcționează acest proces din motive evidente, dar în anumite circumstanțe, hackerii fac erori la înregistrarea domeniilor sau la închirierea și configurarea serverelor, ceea ce permite aflarea adreselor de email, pseudonimelor hackerilor și adreselor backend. Cu cât extragi mai multe conexiuni, cu atât mai precis poți construi grafuri.
Cum funcționează graful nostru
Pentru a începe utilizarea grafului de rețea, trebuie să introduci în bara de căutare un domeniu, o adresă IP, un email sau un amprenta certificatului SSL. Există trei condiții pe care le poate gestiona analistul: timpul, adâncimea pașilor și curățarea.
![]()
Timp
Timpul – data sau intervalul în care elementul căutat a fost utilizat în scopuri malițioase. Dacă acest parametru nu este specificat, sistemul va decide singur ultimul interval de deținere a acestei resurse. De exemplu, pe 11 iulie, compania Eset a publicat despre modul în care Buhtrap utilizează exploatarea 0-day pentru spionaj cibernetic. La finalul raportului există 6 indicatori. Unul dintre ei, secure-telemetry[.]net, a fost înregistrat din nou pe 16 iulie. Așadar, dacă vei construi graful după 16 iulie, vei obține rezultate nerelevante. Dar dacă specifici că acest domeniu a fost utilizat înainte de această dată, atunci graful va include 126 de noi domenii și 69 de adrese IP care nu sunt menționate în raportul Eset:
- ukrfreshnews[.]com
- unian-search[.]com
- vesti-world[.]info
- runewsmeta[.]com
- foxnewsmeta[.]biz
- sobesednik-meta[.]info
- rian-ua[.]net
- și altele.
În plus față de indicatorii de rețea, găsim imediat conexiuni cu fișiere malițioase care au avut legături cu această infrastructură și etichete care ne indică că s-au folosit Meterpreter, AZORult.
Ceea ce este remarcabil este că obții acest rezultat în decurs de o secundă și nu mai trebuie să petreci zile întregi analizând datele. Cu siguranță, această abordare reduce uneori drastic timpul investigațiilor, ceea ce este adesea critic.

Numărul de pași sau adâncimea recursului cu care va fi construit graful
Implicit, adâncimea este 3. Asta înseamnă că de la elementul căutat vor fi găsite toate elementele direct conectate, apoi, pentru fiecare nou element, vor fi construite noi conexiuni către alte elemente, iar deja de la noile elemente din pasul anterior vor fi noi elemente.
Să luăm un exemplu care nu are legătură cu APT și exploit-uri de tip 0-day. Recent, pe Habr, a fost descris un caz interesant de fraudă legată de criptomonede. În raport se menționează un domeniu — themcx[.]co, folosit de fraudatori pentru găzduirea unui site aparent de schimb, Miner Coin Exchange, și phone-lookup[.]xyz, pentru atragerea traficului.
Din descriere este clar că schema necesită o infrastructură destul de mare pentru a atrage trafic către resursele frauduloase. Am decis să analizăm această infrastructură construind un grafic în 4 pași. La final, am obținut un grafic cu 230 de domenii și 39 de adrese IP. Apoi, am împărțit domeniile în 2 categorii: cele care seamănă cu servicii de criptomonede și cele destinate atragerii de trafic prin servicii de verificare a numerelor de telefon:
Legat de criptomonedă
Legat de servicii de identificare a numerelor de telefon
coinkeeper[.]cc
caller-record[.]site.
mcxwallet[.]co
phone-records[.]space
btcnoise[.]com
fone-uncover[.]xyz
cryptominer[.]watch
number-uncover[.]info

Curățare
În mod implicit, opțiunea 'Curățare grafic' este activată și toate elementele nerelevante vor fi șterse din grafic. Apropo, aceasta a fost folosită și în toate exemplele anterioare. Anticipând o întrebare firească: cum să facem să nu fie șters ceva important? Răspund: pentru analiștii care iubesc să construiască grafice manual, curățarea automată poate fi dezactivată și se poate alege numărul de pași = 1. Mai departe, analistul poate completa graficul cu elementele de care are nevoie și șterge elementele nerelevante pentru sarcina stabilită.
Deja pe grafic, analistului îi devin disponibile istoricul modificărilor whois, DNS, precum și porturile deschise și serviciile rulate pe acestea.

Phishing financiar
Am investigat acțiunile unui grup APT care, timp de câțiva ani, a desfășurat atacuri de phishing împotriva clienților diferitelor bănci din diverse regiuni. O trăsătură caracteristică a acestui grup era înregistrarea de domenii foarte asemănătoare cu numele băncilor reale, iar majoritatea site-urilor de phishing aveau un design identic, diferențele fiind doar în numele băncilor și în logo-urile lor.

În acest caz, analiza grafică automatizată ne-a fost de un real ajutor. Luând unul dintre domeniile lor - lloydsbnk-uk[.]com, am construit în câteva secunde un grafic cu o profunzime de 3 pași, care a dezvăluit peste 250 de domenii dăunătoare folosite de acest grup, începând cu anul 2015 și care continuă să fie folosite. Unele dintre aceste domenii au fost deja achiziționate de bănci, dar din înregistrările istorice reiese că anterior au fost înregistrate pe numele atacatorilor.
Pentru ilustrare, figura arată un grafic cu o profunzime de 2 pași.
Este notabil că deja în 2019 atacatorii au schimbat puțin tactica și au început să înregistreze nu doar domeniile băncilor pentru hosting de phishing, ci și domenii de diferite companii de consultanță pentru a trimite e-mailuri de phishing. De exemplu, domeniile swift-department.com, saudconsultancy.com, vbgrigoryanpartners.com.

Cobalt gang
În decembrie 2018, grupul de hackeri Cobalt, specializat în atacuri direcționate împotriva băncilor, a realizat o campanie de e-mailuri în numele Băncii Naționale a Kazahstanului.

În e-mailuri erau linkuri către hXXps://nationalbank.bz/Doc/Prikaz.doc. Documentul descărcat conținea un macro care lansa powershell, care încerca să descarce și să execute un fișier de pe hXXp://wateroilclub.com/file/dwm.exe în %Temp%einmrmdmy.exe. Fișierul %Temp%einmrmdmy.exe aka dwm.exe - CobInt stager, configurat să interacționeze cu serverul hXXp://admvmsopp.com/rilruietguadvtoefmuy.
Imaginați-vă că nu aveți posibilitatea de a obține aceste e-mailuri de phishing și de a efectua o analiză completă a fișierelor dăunătoare. Graficul pentru domeniul dăunător nationalbank[.]bz arată imediat legăturile cu alte domenii dăunătoare, le atribuie grupului și arată ce fișiere au fost folosite în atac.

Să luăm din acest grafic adresa IP 46.173.219[.]152 și să construim un grafic în jurul ei, dezactivând curățarea. Aceasta are legătură cu 40 de domenii, de exemplu, bl0ckchain[.]ug
paypal.co.uk.qlg6[.]pw
cryptoelips[.]com
Judecând după numele domeniilor, pare că acestea sunt utilizate în scheme frauduloase, dar algoritmul de curățare a înțeles că nu au nicio legătură cu acest atac și nu le-a inclus în grafic, ceea ce simplifică considerabil procesul de analiză și atribuire.

Dacă refacem graficul pentru nationalbank[.]bz, dar dezactivăm algoritmul de curățare a graficului, acesta va include peste 500 de elemente, dintre care majoritatea nu au nicio legătură nici cu grupul Cobalt, nici cu atacurile lor. Un exemplu de cum arată un astfel de grafic este prezentat mai jos:

Concluzie
După câțiva ani de ajustări fin, teste în investigații reale, cercetări asupra amenințărilor și vânătoare a atacatorilor, am reușit nu doar să creăm un instrument unic, dar și să schimbăm percepția experților din companie asupra acestuia. La început, experții tehnici doreau un control total asupra procesului de generare a graficelor. A fost extrem de dificil să-i convingem că generarea automată a graficelor poate face asta mai bine decât un om cu ani de experiență. Timpul și multiplele verificări „manuale” ale rezultatelor generate de grafic au decis totul. Acum, experții noștri nu doar că au încredere în sistem, ci și folosesc rezultatele acestuia în activitatea zilnică. Această tehnologie funcționează în interiorul fiecărui sistem al nostru și permite o identificare mai bună a amenințărilor de orice fel. Interfața pentru analiza manuală a graficului este integrată în toate produsele Group-IB și extinde semnificativ capacitățile de vânătoare a criminalității cibernetice. Acest lucru este confirmat de feedback-ul analistilor din partea clienților noștri. Iar noi, la rândul nostru, continuăm să îmbogățim graficul cu date și să lucrăm la noi algoritmi care utilizează inteligența artificială pentru a obține un grafic de rețea cât mai precis.
Sursa: habr.com
