Aftësia për të ulur në distancë pajisjet e bazuara në RouterOS (Mikrotik) vë në rrezik qindra mijëra pajisje rrjeti. Dobësia shoqërohet me helmimin e memories DNS të protokollit Winbox dhe ju lejon të ngarkoni firmware të vjetëruar (me një rivendosje të fjalëkalimit të paracaktuar) ose të modifikuar në pajisje.
Detajet e cenueshmërisë
Terminali RouterOS mbështet komandën e zgjidhjes për kërkimin e DNS.
Kjo kërkesë trajtohet nga një binar i quajtur zgjidhës. Resolver është një nga shumë binarët që lidhen me protokollin Winbox të RouterOS. Në një nivel të lartë, "mesazhet" e dërguara në portin Winbox mund të drejtohen në binare të ndryshme në RouterOS bazuar në një skemë numërimi të bazuar në grup.
Si parazgjedhje, RouterOS e ka të çaktivizuar funksionin e serverit DNS.
Megjithatë, edhe kur funksioni i serverit është i çaktivizuar, ruteri ruan cache-in e tij DNS.
Kur bëjmë një kërkesë duke përdorur winbox_dns_request për shembull.com, ruteri do të ruajë rezultatin në cache.
Meqenëse ne mund të specifikojmë serverin DNS përmes të cilit duhet të kalojë kërkesa, futja e adresave të pasakta është e parëndësishme. Për shembull, mund të konfiguroni një implementim të serverit DNS nga
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()
Tani nëse kërkoni për shembull.com duke përdorur Winbox, mund të shihni që cache DNS e ruterit është helmuar.
Sigurisht, poisoning example.com nuk është shumë i dobishëm pasi ruteri nuk do ta përdorë atë. Megjithatë, ruteri duhet të hyjë në upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com dhe download.mikrotik.com. Dhe falë një gabimi tjetër, është e mundur që të helmohen të gjithë menjëherë.
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()
Ruteri kërkon një leje dhe ne japim pesë. Ruteri nuk i ruan si duhet të gjitha këto përgjigje.
Natyrisht, ky sulm është gjithashtu i dobishëm nëse ruteri po vepron si një server DNS, pasi lejon që klientët e ruterit të sulmohen.
Ky sulm ju lejon gjithashtu të shfrytëzoni një dobësi më serioze: të reduktoni ose të mbështesni versionin e RouterOS. Sulmuesi rikrijon logjikën e serverit të përditësimit, përfshirë regjistrin e ndryshimeve, dhe detyron RouterOS të perceptojë versionin e vjetëruar (të cenueshëm) si aktual. Rreziku këtu qëndron në faktin se kur versioni "përditësohet", fjalëkalimi i administratorit rivendoset në vlerën e paracaktuar - një sulmues mund të hyjë në sistem me një fjalëkalim bosh!
Sulmi është mjaft funksional, pavarësisht se
mbrojtje
Thjesht çaktivizimi i Winbox ju lejon të mbroni veten nga këto sulme. Megjithë komoditetin e administrimit përmes Winbox, është më mirë të përdorni protokollin SSH.
Burimi: www.habr.com