La kapablo malproksime malaltigi aparatojn bazitajn sur RouterOS (Mikrotik) riskas centojn da miloj da retaj aparatoj. La vundebleco estas rilata al veneniĝo de la DNS-kaŝmemoro de la protokolo Winbox kaj permesas al vi ŝargi malmodernan (kun defaŭlta pasvorta restarigo) aŭ modifitan firmvaron sur la aparato.
Detaloj pri vundebleco
La RouterOS-terminalo subtenas la solvan komandon por DNS-serĉo.
Ĉi tiu peto estas pritraktata de duuma nomita solvilo. Resolver estas unu el multaj binaroj, kiuj konektas al la Winbox-protokolo de RouterOS. Je alta nivelo, "mesaĝoj" senditaj al la Winbox-haveno povas esti direktitaj al diversaj binaroj en RouterOS surbaze de tabel-bazita numera skemo.
Defaŭlte, RouterOS havas la funkcion de DNS-servilo malŝaltita.
Tamen, eĉ kiam la servila funkcio estas malŝaltita, la enkursigilo konservas sian propran DNS-kaŝmemoron.
Kiam ni faras peton uzante winbox_dns_request ekzemple example.com, la enkursigilo konservos la rezulton.
Ĉar ni povas specifi la DNS-servilon tra kiu la peto devas iri, enigi malĝustajn adresojn estas bagatela. Ekzemple, vi povas agordi DNS-servilan efektivigon de
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()
Nun se vi serĉas ekzemple.com uzante Winbox, vi povas vidi, ke la DNS-kaŝmemoro de la enkursigilo estas venenita.
Kompreneble, veneni example.com ne estas tre utila ĉar la enkursigilo fakte ne uzos ĝin. Tamen, la enkursigilo devas aliri upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com kaj download.mikrotik.com. Kaj danke al alia eraro, eblas veneni ilin ĉiujn samtempe.
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()
La enkursigilo petas unu permeson, kaj ni donas kvin reen. La enkursigilo ne konservas ĉiujn ĉi tiujn respondojn ĝuste.
Evidente, ĉi tiu atako ankaŭ estas utila se la enkursigilo agas kiel DNS-servilo, ĉar ĝi permesas ataki klientojn de la enkursigilo.
Ĉi tiu atako ankaŭ ebligas al vi ekspluati pli gravan vundeblecon: malaltgradigi aŭ retroporti la version de RouterOS. La atakanto rekreas la logikon de la ĝisdatiga servilo, inkluzive de la ŝanĝprotokolo, kaj devigas RouterOS percepti la malmodernan (vundeblan) version kiel aktuala. La danĝero ĉi tie kuŝas en la fakto, ke kiam la versio estas "ĝisdatigita", la administranto pasvorto estas restarigita al la defaŭlta valoro - atakanto povas ensaluti en la sistemon kun malplena pasvorto!
La atako sufiĉe funkcias, malgraŭ tio
protekto
Simple malŝalti Winbox permesas vin protekti vin kontraŭ ĉi tiuj atakoj. Malgraŭ la komforto de administrado per Winbox, estas pli bone uzi la SSH-protokolon.
fonto: www.habr.com