Ranljivost povratnih vrat v sistemu RouterOS ogroža več sto tisoč naprav

Ranljivost povratnih vrat v sistemu RouterOS ogroža več sto tisoč naprav

Možnost oddaljenega znižanja naprav, ki temeljijo na sistemu RouterOS (Mikrotik), ogroža več sto tisoč omrežnih naprav. Ranljivost je povezana z zastrupitvijo predpomnilnika DNS protokola Winbox in omogoča nalaganje zastarele (s privzeto ponastavitvijo gesla) ali spremenjene vdelane programske opreme v napravo.

Ranljivost povratnih vrat v sistemu RouterOS ogroža več sto tisoč naprav

Podrobnosti o ranljivosti

Terminal RouterOS podpira ukaz resolve za iskanje DNS.

Ranljivost povratnih vrat v sistemu RouterOS ogroža več sto tisoč naprav

To zahtevo obravnava binarni program, imenovan razreševalec. Resolver je ena izmed številnih binarnih datotek, ki se povezujejo s protokolom Winbox sistema RouterOS. Na visoki ravni se lahko "sporočila", poslana v vrata Winbox, usmerijo v različne binarne datoteke v RouterOS na podlagi sheme oštevilčevanja, ki temelji na nizu.

RouterOS ima privzeto onemogočeno funkcijo strežnika DNS.

Ranljivost povratnih vrat v sistemu RouterOS ogroža več sto tisoč naprav

Tudi ko je funkcija strežnika onemogočena, usmerjevalnik vzdržuje lasten predpomnilnik DNS.

Ranljivost povratnih vrat v sistemu RouterOS ogroža več sto tisoč naprav

Ko naredimo zahtevo z uporabo winbox_dns_request, na primer example.com, bo usmerjevalnik predpomnil rezultat.

Ranljivost povratnih vrat v sistemu RouterOS ogroža več sto tisoč naprav

Ker lahko določimo strežnik DNS, prek katerega naj gre zahteva, je vnašanje napačnih naslovov nepomembno. Izvedbo strežnika DNS lahko na primer konfigurirate iz Filip Klausda se vedno odzove z zapisom A, ki vsebuje naslov IP 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()

Zdaj, če iščete example.com z Winboxom, lahko vidite, da je predpomnilnik DNS usmerjevalnika zastrupljen.

Ranljivost povratnih vrat v sistemu RouterOS ogroža več sto tisoč naprav

Seveda zastrupitev example.com ni zelo uporabna, saj je usmerjevalnik dejansko ne bo uporabljal. Vendar mora usmerjevalnik dostopati do upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com in download.mikrotik.com. In zaradi druge napake jih je mogoče zastrupiti vse naenkrat.

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()

Usmerjevalnik zahteva eno dovoljenje in vrnemo pet. Usmerjevalnik vseh teh odgovorov ne predpomni pravilno.

Ranljivost povratnih vrat v sistemu RouterOS ogroža več sto tisoč naprav

Očitno je ta napad koristen tudi, če usmerjevalnik deluje kot strežnik DNS, saj omogoča napade na odjemalce usmerjevalnika.

Ta napad vam prav tako omogoča, da izkoristite resnejšo ranljivost: spremenite različico sistema RouterOS ali jo prenesete nazaj. Napadalec ponovno ustvari logiko strežnika za posodabljanje, vključno z dnevnikom sprememb, in prisili RouterOS, da zaznava zastarelo (ranljivo) različico kot trenutno. Nevarnost je v tem, da se pri »posodabljanju« različice skrbniško geslo ponastavi na privzeto vrednost - napadalec se lahko prijavi v sistem s praznim geslom!


Napad precej deluje, kljub dejstvu, da Avtor implementira več vektorjev, vključno s tistimi, ki so povezani z vdelavo stranskih vrat v vdelano programsko opremo, vendar je to že odvečna tehnika in je njena uporaba v nelegitimne namene nezakonita.

zaščita

Če preprosto onemogočite Winbox, se lahko zaščitite pred temi napadi. Kljub udobju upravljanja prek Winboxa je bolje uporabiti protokol SSH.

Vir: www.habr.com

Dodaj komentar