Metodolija phishing radara
#7

(08-08-2026, 03:32 PM)VincaSec Wrote:  Svaka čast za projekat!

Odlučio sam da zbog obima projekta se baziram samo na obrazovne sisteme. Sad cu malo detaljnije napisati kako je rađeno i svaki dodatni savet je dobrodošao.

Trenutno pratim CertStream i svaki novi hostname upoređujem sa kompletnim registrom od 2.059 obrazovnih ustanova, uz još 6 obrazovnih portala.
Da ne bih radio prosto poređenje svakog domena sa svih 2.059 ustanova, napravljen je invertovani indeks tokena, normalizacija ćirilice/latinice i dijakritika, kao i nekoliko različitih načina matchovanja u zavisnosti od toga koliko je naziv škole karakterističan.
Coverage audit trenutno pokazuje da je 2.057 od 2.059 ustanova moguće jednoznačno identifikovati.
Uz svaki pronađeni signal radi se i dodatni enrichment: DNS podaci (A/AAAA/MX/NS/CNAME), RDAP podaci poput registrara, datuma i statusa domena, kao i CT podaci - issuer, SAN itd.
Bitna stvar je da se target nikada ne otvara niti aktivno skenira. Sve se zasniva na pasivnim izvorima.
Podaci se čuvaju u SQLite-u, postoji SSE live stream, trenutno je oko 650 testova, registry matcher ima maksimalni score 75, a domeni se prikazuju defangovani.
Fokus sam namerno ograničio samo na obrazovanje, jer ovde imamo dobar javni izvor podataka, a škole i obrazovne ustanove su istovremeno vrlo zahvalna meta za phishing i impersonation napade.
Što se same matcher logike tiče, trenutno radi ovako:
1. Normalizacija naziva
I registry nazivi i hostname prolaze kroz potpuno istu funkciju.
Ćirilica se prevodi u latinicu, uklanjaju se dijakritici, a crtice, tačke, zarezi, zagrade i ostali separatori postaju granice između tokena.
Na primer:
Code:
hemijsko-prehrambena
i registarsko:
Code:
Хемијско-прехрамбена
na kraju daju iste tokene.
2. Izbor kandidata
Ne prolazim kroz svih 2.059 ustanova za svaki novi hostname.
Koristim nekoliko indeksa:
  • invertovani token indeks sa oko 1.472 tokena
  • indeks spojenih, kanonskih naziva
  • poseban lokacijski indeks za česta imena poput Vuk Karadžić ili Nikola Tesla
  • stop-set za reči kao što su
    Code:
    skola
    ,
    Code:
    osnovna
    ,
    Code:
    gimnazija
    ,
    Code:
    nikola
    ,
    Code:
    jovan
    itd.
Takve reči same po sebi nisu dovoljne da bi nešto bilo proglašeno signalom.
3. Ustanove su podeljene u tri grupe
Code:
distinctive_multi
- oko 1.526 ustanova.
Imaju najmanje dva dovoljno karakteristična tokena. Ako je naziv jedinstven, dovoljan je i dodatni kontekst poput
Code:
login
,
Code:
portal
,
Code:
nalog
itd. Ako naziv nije jedinstven, mora da postoji i odgovarajuća lokacija.
Code:
distinctive_single
- oko 392 ustanove.
Imaju samo jedan karakterističan token, pa su pravila stroža. Uglavnom se traže i lokacija i dodatni kontekst, osim kada je kompletan naziv ustanove direktno prisutan u hostnameu.
Code:
generic_location_bound
- oko 141 ustanova.
To su nazivi tipa „Gimnazija“ ili „Tehnička škola“. Tu nije dovoljan samo tip škole - mora da postoji pun naziv u pravilnom redosledu, jednoznačna lokacija i dodatni kontekst.
4. Dosta pažnje sam posvetio false-positive slučajevima
Na primer:
  • lokacija se ne računa kao distinctive deo naziva
  • pogrešan redosled tokena ne prolazi
  • ne mogu da se ubacuju proizvoljne reči između delova naziva
  • nepotpuna višerečna lokacija ne prolazi
  • ako hostname navede tip ustanove, matcher filtrira samo ustanove tog tipa
  • duži i specifičniji rezultat potiskuje kraći
  • registry matcher nikada ne može imati score veći od 75
Znači, recimo:
Code:
vuk-karadzic-login.com
nije dovoljan signal jer takvih ustanova ima više.
Ali:
Code:
nikola-tesla-boljevac-login.com
već ima i naziv, i lokaciju, i kontekst.
5. Scoring
Trenutna logika je otprilike:
  • jedinstven naziv + context = 40
  • jedinstven naziv + suspicious token odmah uz naziv = 65
  • čest naziv + lokacija + context = 75
  • generic tip + jedinstvena lokacija + context = 75
Adjacent bonus od +25 se daje samo ako je suspicious token poput
Code:
login
,
Code:
secure
,
Code:
verify
itd. neposredno pre ili posle naziva.
Na primer:
Code:
aleksinacka-gimnazija-login.com
→ 65
ali:
Code:
aleksinacka-gimnazija-foo-login.com
→ 40
jer
Code:
foo
prekida vezu između naziva i suspicious tokena.
Nekoliko konkretnih primera:
Code:
aleksinacka-gimnazija-login.com
→ MATCH, 65
Code:
nikola-tesla-boljevac-login.com
→ MATCH, 75
Code:
nikola-tesla-login.com
→ nema matcha, jer naziv nije jedinstven i nema lokacije
Code:
tehnicka-skola-nis-login.com
→ nema matcha, jer nije dovoljno jednoznačno
Code:
valjevo-login.com
→ nema matcha, jer sama lokacija nije signal
Code:
gimnazija-vrnjacka-banja-login.com
→ MATCH, 75
Pored toga postoji i mali kurirani sloj za 6 obrazovnih portala i 12 univerziteta.
Za njih postoje dodatna pravila za aliase, skraćenice poput
Code:
jisp
,
Code:
uns
,
Code:
zsk
, legitimne domene, leetspeak i typosquatting. Tu score može da ide do 100.
Registry matcher i taj kurirani matcher rade paralelno, a eventualni duplikati se kasnije spajaju preko
Code:
CURATED_REGISTRY_LINKS
.
Poenta mi je da sistem ne reaguje samo na fazon „u domenu se pojavilo ime škole“, jer bi to pravilo ogroman broj glupih alarma. Cilj je da signal mora da ima dovoljno konteksta da stvarno bude interesantan za proveru.
Reply


Messages In This Thread
Metodolija phishing radara - by mercy_angel - 08-03-2026, 12:11 AM
RE: Metodolija phishing radara - by milos_rs - 08-03-2026, 05:19 PM
RE: Metodolija phishing radara - by mercy_angel - 08-04-2026, 01:57 PM
RE: Metodolija phishing radara - by milos_rs - 08-04-2026, 03:10 PM
RE: Metodolija phishing radara - by mercy_angel - 08-05-2026, 09:25 AM
RE: Metodolija phishing radara - by VincaSec - 08-08-2026, 03:32 PM
RE: Metodolija phishing radara - by mercy_angel - 08-20-2026, 12:46 PM

Forum Jump:


Users browsing this thread: 1 Guest(s)