Die vermoë om toestelle op afstand af te gradeer gebaseer op RouterOS (Mikrotik) stel honderdduisende netwerktoestelle in gevaar. Die kwesbaarheid hou verband met die vergiftiging van die DNS-kas van die Winbox-protokol en laat jou toe om verouderde (met 'n verstekwagwoordterugstelling) of gewysigde firmware na die toestel af te laai.
Besonderhede van die kwesbaarheid
Die RouterOS-terminaal ondersteun die oplossing-opdrag vir DNS-opsoeke.
Hierdie versoek word deur 'n binêre benoemde resolver hanteer. Resolver is een van die vele binaries wat aan RouterOS se Winbox-protokol gekoppel is. Op 'n hoë vlak kan "boodskappe" wat na 'n Winbox-poort gestuur word, na verskeie binaries in RouterOS gestuur word, gebaseer op 'n skikking-gebaseerde nommerskema.
Die DNS-bedienerkenmerk is by verstek in RouterOS gedeaktiveer.
Selfs met die bedienerfunksie gedeaktiveer, behou die router egter sy eie DNS-kas.
Wanneer ons 'n versoek rig met behulp van winbox_dns_request soos example.com, sal die router die resultaat kas.
Aangesien ons die DNS-bediener kan spesifiseer waardeur die versoek moet gaan, is dit onbenullig om verkeerde adresse in te voer. U kan byvoorbeeld die implementering van die DNS-bediener vanaf
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()
As jy nou Winbox gebruik om byvoorbeeld.com te soek, kan jy sien dat die DNS-kas van die router vergiftig is.
Natuurlik is vergiftiging example.com nie baie nuttig nie, aangesien die router dit nie eintlik sal gebruik nie. Die router moet egter toegang hê tot upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com en download.mikrotik.com. En danksy nog 'n fout is dit moontlik om hulle almal op een slag te vergiftig.
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()
Die router versoek een toelae, en ons gee vyf terug. Die roeteerder kas al hierdie antwoorde verkeerd.
Dit is duidelik dat hierdie aanval ook nuttig is as die router as 'n DNS-bediener optree, aangesien dit die aanval van die router se kliënte moontlik maak.
Hierdie aanval maak dit ook moontlik om 'n ernstiger kwesbaarheid uit te buit: die weergawe van RouterOS afgradeer of terugporteer. Die aanvaller herskep die opdateringsbedienerlogika, insluitend die veranderingslogboek, en dwing RouterOS om die verouderde (kwesbare) weergawe as bygewerk te aanvaar. Die gevaar hier lê in die feit dat wanneer jy die weergawe “opgradeer”, die administrateurwagwoord teruggestel word na die “verstek” waarde – 'n aanvaller kan met 'n leë wagwoord aanmeld!
Die aanval werk nogal, ten spyte daarvan
beskerming
Deur Winbox eenvoudig te deaktiveer help om teen hierdie aanvalle te beskerm. Ten spyte van die gerief van administrasie deur Winbox, is dit beter om die SSH-protokol te gebruik.
Bron: will.com