Zraniteľnosť backportu v RouterOS ohrozuje státisíce zariadení

Zraniteľnosť backportu v RouterOS ohrozuje státisíce zariadení

Možnosť vzdialene downgradovať zariadenia založené na RouterOS (Mikrotik) vystavuje riziku státisíce sieťových zariadení. Zraniteľnosť súvisí s otravou vyrovnávacej pamäte DNS protokolu Winbox a umožňuje vám načítať zastaraný (s predvoleným resetovaním hesla) alebo upravený firmvér do zariadenia.

Zraniteľnosť backportu v RouterOS ohrozuje státisíce zariadení

Podrobnosti o zraniteľnosti

Terminál RouterOS podporuje príkaz resolve pre vyhľadávanie DNS.

Zraniteľnosť backportu v RouterOS ohrozuje státisíce zariadení

Túto požiadavku spracuje binárny program nazývaný resolver. Resolver je jedným z mnohých binárnych súborov, ktoré sa pripájajú k protokolu Winbox RouterOS. Na vysokej úrovni môžu byť „správy“ odoslané na port Winbox smerované do rôznych binárnych súborov v RouterOS na základe schémy číslovania založenej na poli.

V predvolenom nastavení má RouterOS funkciu servera DNS zakázanú.

Zraniteľnosť backportu v RouterOS ohrozuje státisíce zariadení

Avšak aj keď je funkcia servera zakázaná, router si udržiava svoju vlastnú vyrovnávaciu pamäť DNS.

Zraniteľnosť backportu v RouterOS ohrozuje státisíce zariadení

Keď zadáme požiadavku pomocou winbox_dns_request napríklad example.com, router uloží výsledok do vyrovnávacej pamäte.

Zraniteľnosť backportu v RouterOS ohrozuje státisíce zariadení

Keďže vieme určiť DNS server, cez ktorý má požiadavka prejsť, zadanie nesprávnych adries je triviálne. Môžete napríklad nakonfigurovať implementáciu servera DNS z Philip Klausaby vždy odpovedal záznamom A obsahujúcim 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()

Ak teraz hľadáte example.com pomocou Winbox, môžete vidieť, že vyrovnávacia pamäť DNS smerovača je otrávená.

Zraniteľnosť backportu v RouterOS ohrozuje státisíce zariadení

Samozrejme, otrava example.com nie je veľmi užitočná, pretože smerovač ju v skutočnosti nepoužije. Router však potrebuje prístup na upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com a download.mikrotik.com. A vďaka ďalšej chybe je možné otráviť ich všetky naraz.

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

Smerovač požaduje jedno povolenie a my mu ich udeľujeme späť. Smerovač neukladá všetky tieto odpovede správne do vyrovnávacej pamäte.

Zraniteľnosť backportu v RouterOS ohrozuje státisíce zariadení

Je zrejmé, že tento útok je užitočný aj vtedy, ak smerovač funguje ako server DNS, pretože umožňuje napadnutie klientov smerovača.

Tento útok vám tiež umožňuje zneužiť závažnejšiu zraniteľnosť: downgrade alebo backportovanie verzie RouterOS. Útočník znovu vytvorí logiku aktualizačného servera vrátane protokolu zmien a prinúti RouterOS vnímať zastaranú (zraniteľnú) verziu ako aktuálnu. Nebezpečenstvo tu spočíva v tom, že pri „aktualizácii verzie“ sa heslo správcu nastaví na predvolenú hodnotu - útočník sa môže prihlásiť do systému s prázdnym heslom!


Útok je celkom funkčný, napriek tomu autor implementuje niekoľko ďalších vektorov, vrátane tých, ktoré s nimi súvisia vloženie zadných vrátok do firmvéru, ale toto je už nadbytočná technika a jej použitie na nelegitímne účely je nezákonné.

ochrana

Jednoduché vypnutie Winboxu vám umožní chrániť sa pred týmito útokmi. Napriek pohodlnosti administrácie cez Winbox je lepšie použiť protokol SSH.

Zdroj: hab.com

Pridať komentár