Muligheden for at fjernnedgradere enheder baseret på RouterOS (Mikrotik) sætter hundredtusindvis af netværksenheder i fare. Sårbarheden er forbundet med forgiftning af DNS-cachen i Winbox-protokollen og giver dig mulighed for at indlæse forældet (med en standardnulstilling af adgangskode) eller ændret firmware på enheden.
Sårbarhedsdetaljer
RouterOS-terminalen understøtter resolve-kommandoen til DNS-opslag.
Denne anmodning håndteres af en binær kaldet resolver. Resolver er en af mange binære filer, der forbinder til RouterOS's Winbox-protokol. På et højt niveau kan "meddelelser", der sendes til Winbox-porten, dirigeres til forskellige binære filer i RouterOS baseret på et array-baseret nummereringsskema.
Som standard har RouterOS DNS-serverfunktionen deaktiveret.
Men selv når serverfunktionen er deaktiveret, bevarer routeren sin egen DNS-cache.
Når vi laver en anmodning ved at bruge winbox_dns_request for eksempel eksempel.com, cachelagrer routeren resultatet.
Da vi kan angive den DNS-server, som anmodningen skal gå igennem, er det trivielt at indtaste forkerte adresser. For eksempel kan du konfigurere en DNS-serverimplementering fra
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()
Hvis du nu søger på example.com ved hjælp af Winbox, kan du se, at routerens DNS-cache er forgiftet.
Forgiftning eksempel.com er selvfølgelig ikke særlig nyttig, da routeren faktisk ikke vil bruge den. Routeren skal dog have adgang til upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com og download.mikrotik.com. Og takket være en anden fejl er det muligt at forgifte dem alle på én gang.
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()
Routeren anmoder om én tilladelse, og vi giver fem tilbage. Routeren cacher ikke alle disse svar korrekt.
Dette angreb er naturligvis også nyttigt, hvis routeren fungerer som en DNS-server, da det tillader, at routerens klienter bliver angrebet.
Dette angreb giver dig også mulighed for at udnytte en mere alvorlig sårbarhed: nedgradere eller backportere versionen af RouterOS. Angriberen genskaber logikken i opdateringsserveren, inklusive ændringsloggen, og tvinger RouterOS til at opfatte den forældede (sårbare) version som aktuel. Faren her ligger i, at når versionen er "opdateret", nulstilles administratoradgangskoden til standardværdien - en angriber kan logge ind på systemet med en tom adgangskode!
Angrebet fungerer ganske godt, på trods af det
beskyttelse
Blot at deaktivere Winbox giver dig mulighed for at beskytte dig selv mod disse angreb. På trods af bekvemmeligheden ved administration via Winbox er det bedre at bruge SSH-protokollen.
Kilde: www.habr.com