08-20-2026, 12:46 PM
(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-prehrambenaCode:
Хемијско-прехрамбена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
itd.Code:jovan
3. Ustanove su podeljene u tri grupe
Code:
distinctive_multiImaju najmanje dva dovoljno karakteristična tokena. Ako je naziv jedinstven, dovoljan je i dodatni kontekst poput
Code:
loginCode:
portalCode:
nalogCode:
distinctive_singleImaju 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_boundTo 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
Code:
vuk-karadzic-login.comAli:
Code:
nikola-tesla-boljevac-login.com5. 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
Code:
loginCode:
secureCode:
verifyNa primer:
Code:
aleksinacka-gimnazija-login.comali:
Code:
aleksinacka-gimnazija-foo-login.comjer
Code:
fooNekoliko konkretnih primera:
Code:
aleksinacka-gimnazija-login.comCode:
nikola-tesla-boljevac-login.comCode:
nikola-tesla-login.comCode:
tehnicka-skola-nis-login.comCode:
valjevo-login.comCode:
gimnazija-vrnjacka-banja-login.comPored toga postoji i mali kurirani sloj za 6 obrazovnih portala i 12 univerziteta.
Za njih postoje dodatna pravila za aliase, skraćenice poput
Code:
jispCode:
unsCode:
zskRegistry matcher i taj kurirani matcher rade paralelno, a eventualni duplikati se kasnije spajaju preko
Code:
CURATED_REGISTRY_LINKSPoenta 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.

