Ranjivost backporta u RouterOS-u dovodi u opasnost stotine tisuća uređaja

Ranjivost backporta u RouterOS-u dovodi u opasnost stotine tisuća uređaja

Mogućnost daljinskog vraćanja uređaja temeljenih na RouterOS (Mikrotik) na stariju verziju dovodi u opasnost stotine tisuća mrežnih uređaja. Ranjivost je povezana s trovanjem DNS predmemorije Winbox protokola i omogućuje učitavanje zastarjelog (sa zadanom poništavanjem lozinke) ili modificiranog firmvera na uređaj.

Ranjivost backporta u RouterOS-u dovodi u opasnost stotine tisuća uređaja

Pojedinosti o ranjivosti

RouterOS terminal podržava naredbu resolve za DNS traženje.

Ranjivost backporta u RouterOS-u dovodi u opasnost stotine tisuća uređaja

Ovim zahtjevom upravlja binarni program koji se zove razrješavač. Resolver je jedna od mnogih binarnih datoteka koje se povezuju na RouterOS-ov Winbox protokol. Na visokoj razini, "poruke" poslane na Winbox priključak mogu se preusmjeriti u različite binarne datoteke u RouterOS-u na temelju sheme numeriranja temeljene na nizu.

Prema zadanim postavkama, RouterOS ima onemogućenu značajku DNS poslužitelja.

Ranjivost backporta u RouterOS-u dovodi u opasnost stotine tisuća uređaja

Međutim, čak i kada je funkcija poslužitelja onemogućena, usmjerivač održava vlastitu DNS predmemoriju.

Ranjivost backporta u RouterOS-u dovodi u opasnost stotine tisuća uređaja

Kada podnesemo zahtjev koristeći winbox_dns_request na primjer example.com, usmjerivač će predmemorirati rezultat.

Ranjivost backporta u RouterOS-u dovodi u opasnost stotine tisuća uređaja

Budući da možemo odrediti DNS poslužitelj kroz koji treba ići zahtjev, unos netočnih adresa je trivijalan. Na primjer, možete konfigurirati implementaciju DNS poslužitelja iz Filip Klausda uvijek odgovori zapisom A 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 pretražujete example.com pomoću Winboxa, možete vidjeti da je DNS predmemorija usmjerivača zatrovana.

Ranjivost backporta u RouterOS-u dovodi u opasnost stotine tisuća uređaja

Naravno, trovanje example.com nije baš korisno jer ga usmjerivač zapravo neće koristiti. Međutim, ruter mora pristupiti upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com i download.mikrotik.com. A zahvaljujući još jednoj pogreš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()

Usmjerivač traži jednu dozvolu, a mi vraćamo pet. Usmjerivač ne sprema ispravno sve ove odgovore u predmemoriju.

Ranjivost backporta u RouterOS-u dovodi u opasnost stotine tisuća uređaja

Očito, ovaj napad je također koristan ako usmjerivač djeluje kao DNS poslužitelj, budući da omogućuje napad na klijente usmjerivača.

Ovaj napad također vam omogućuje da iskoristite ozbiljniju ranjivost: smanjite ili vratite verziju RouterOS-a. Napadač ponovno kreira logiku poslužitelja za ažuriranje, uključujući dnevnik promjena, i prisiljava RouterOS da percipira zastarjelu (ranjivu) verziju kao trenutnu. Opasnost ovdje leži u činjenici da kada se verzija "ažurira", administratorska lozinka se vraća na zadanu vrijednost - napadač se može prijaviti na sustav s praznom lozinkom!


Napad prilično funkcionira, unatoč činjenici da autor implementira još nekoliko vektora, uključujući one koji se odnose na ugradnju stražnjih vrata u firmware, ali to je već suvišna tehnika i njezino korištenje u nelegitimne svrhe je protuzakonito.

zaštita

Jednostavno onemogućavanje Winboxa omogućuje vam da se zaštitite od ovih napada. Unatoč praktičnosti administracije putem Winboxa, bolje je koristiti SSH protokol.

Izvor: www.habr.com

Dodajte komentar