Mahdollisuus päivittää RouterOS:ään (Mikrotik) perustuvia laitteita etäkäyttöön asettaa satoja tuhansia verkkolaitteita vaaraan. Haavoittuvuus liittyy Winbox-protokollan DNS-välimuistin myrkytykseen, ja sen avulla voit ladata vanhentuneita (oletussalasanan palautuksilla) tai muokattuja laiteohjelmistoja laitteeseen.
Haavoittuvuuden tiedot
RouterOS-pääte tukee DNS-haun solve-komentoa.
Tämän pyynnön käsittelee binääri nimeltä solver. Resolver on yksi monista binääritiedostoista, jotka muodostavat yhteyden RouterOS:n Winbox-protokollaan. Korkealla tasolla Winbox-porttiin lähetetyt "viestit" voidaan reitittää RouterOS:n eri binääritiedostoihin taulukkopohjaisen numerointimallin perusteella.
Oletuksena RouterOS:ssä DNS-palvelinominaisuus on poistettu käytöstä.
Kuitenkin, vaikka palvelintoiminto olisi poistettu käytöstä, reititin ylläpitää omaa DNS-välimuistiaan.
Kun teemme pyynnön käyttämällä winbox_dns_request-osoitetta esimerkiksi example.com, reititin tallentaa tuloksen välimuistiin.
Koska voimme määrittää DNS-palvelimen, jonka kautta pyyntö tulee kulkea, väärien osoitteiden syöttäminen on triviaalia. Voit esimerkiksi määrittää DNS-palvelimen toteutuksen kohteesta
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()
Jos nyt haet osoitteesta example.com Winboxilla, voit nähdä, että reitittimen DNS-välimuisti on myrkytetty.
Tietenkään esimerkki.com-sivuston myrkyttäminen ei ole kovin hyödyllinen, koska reititin ei itse asiassa käytä sitä. Reitittimen on kuitenkin käytettävä upgrade.mikrotik.com-, cloud.mikrotik.com-, cloud2.mikrotik.com- ja download.mikrotik.com-sivustoja. Ja toisen virheen ansiosta on mahdollista myrkyttää ne kaikki kerralla.
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()
Reititin pyytää yhtä lupaa, ja myönnämme viisi takaisin. Reititin ei tallenna kaikkia näitä vastauksia oikein välimuistiin.
Ilmeisesti tämä hyökkäys on hyödyllinen myös, jos reititin toimii DNS-palvelimena, koska sen avulla voidaan hyökätä reitittimen asiakkaisiin.
Tämän hyökkäyksen avulla voit myös hyödyntää vakavampaa haavoittuvuutta: päivittää RouterOS:n versio alemmaksi tai siirtää sen takaisin. Hyökkääjä luo uudelleen päivityspalvelimen logiikan, mukaan lukien muutoslokin, ja pakottaa RouterOS:n pitämään vanhentuneen (haavoittuvan) version ajankohtaisena. Vaara tässä piilee siinä, että kun versio "päivitetään", järjestelmänvalvojan salasana palautetaan oletusarvoon - hyökkääjä voi kirjautua sisään järjestelmään tyhjällä salasanalla!
Hyökkäys on siitä huolimatta toimiva
suojaus
Yksinkertaisesti poistamalla Winboxin käytöstä voit suojautua näiltä hyökkäyksiltä. Huolimatta Winboxin hallinnon mukavuudesta, on parempi käyttää SSH-protokollaa.
Lähde: will.com