Backport-sårbarhet i RouterOS sätter hundratusentals enheter i fara

Backport-sårbarhet i RouterOS sätter hundratusentals enheter i fara

Möjligheten att fjärrnedgradera enheter baserade på RouterOS (Mikrotik) sätter hundratusentals nätverksenheter i fara. Sårbarheten är associerad med förgiftning av DNS-cachen i Winbox-protokollet och låter dig ladda inaktuell (med standardlösenordsåterställning) eller modifierad firmware på enheten.

Backport-sårbarhet i RouterOS sätter hundratusentals enheter i fara

Sårbarhetsdetaljer

RouterOS-terminalen stöder resolve-kommandot för DNS-sökning.

Backport-sårbarhet i RouterOS sätter hundratusentals enheter i fara

Denna begäran hanteras av en binär som kallas resolver. Resolver är en av många binärer som ansluter till RouterOS Winbox-protokoll. På en hög nivå kan "meddelanden" som skickas till Winbox-porten dirigeras till olika binärer i RouterOS baserat på ett arraybaserat numreringsschema.

Som standard har RouterOS DNS-serverfunktionen inaktiverad.

Backport-sårbarhet i RouterOS sätter hundratusentals enheter i fara

Men även när serverfunktionen är inaktiverad behåller routern sin egen DNS-cache.

Backport-sårbarhet i RouterOS sätter hundratusentals enheter i fara

När vi gör en förfrågan med winbox_dns_request till exempel example.com, cachelagrar routern resultatet.

Backport-sårbarhet i RouterOS sätter hundratusentals enheter i fara

Eftersom vi kan ange vilken DNS-server som förfrågan ska gå igenom, är det trivialt att ange felaktiga adresser. Till exempel kan du konfigurera en DNS-serverimplementering från Philip Klausatt alltid svara med en A-post som innehåller IP-adressen 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()

Om du nu söker på example.com med Winbox kan du se att routerns DNS-cache är förgiftad.

Backport-sårbarhet i RouterOS sätter hundratusentals enheter i fara

Naturligtvis är poisoning example.com inte särskilt användbart eftersom routern faktiskt inte kommer att använda det. Routern behöver dock komma åt upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com och download.mikrotik.com. Och tack vare ett annat misstag är det möjligt att förgifta dem alla på en gång.

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

Routern begär en behörighet och vi ger tillbaka fem. Routern cachelagrar inte alla dessa svar korrekt.

Backport-sårbarhet i RouterOS sätter hundratusentals enheter i fara

Uppenbarligen är denna attack också användbar om routern fungerar som en DNS-server, eftersom den tillåter att klienter till routern attackeras.

Denna attack låter dig också utnyttja en allvarligare sårbarhet: nedgradera eller backportera versionen av RouterOS. Angriparen återskapar uppdateringsserverns logik, inklusive ändringsloggen, och tvingar RouterOS att uppfatta den föråldrade (sårbara) versionen som aktuell. Faran här ligger i det faktum att när versionen är "uppdaterad" återställs administratörslösenordet till standardvärdet - en angripare kan logga in på systemet med ett tomt lösenord!


Attacken fungerar ganska bra, trots det författaren implementerar flera fler vektorer, inklusive de som är relaterade till bädda in en bakdörr i firmware, men detta är redan en överflödig teknik och dess användning för olagliga ändamål är olaglig.

skydd

Genom att helt enkelt inaktivera Winbox kan du skydda dig mot dessa attacker. Trots bekvämligheten med administration via Winbox är det bättre att använda SSH-protokollet.

Källa: will.com

Lägg en kommentar