Ang katakus sa pag-downgrade sa layo nga mga aparato base sa RouterOS (Mikrotik) nagpameligro sa gatusan ka libo nga mga aparato sa network. Ang pagkahuyang nalangkit sa pagkahilo sa DNS cache sa Winbox protocol ug nagtugot kanimo sa pag-download sa wala na sa panahon (nga adunay default nga pag-reset sa password) o giusab nga firmware sa device.
Mga detalye sa pagkahuyang
Gisuportahan sa terminal sa RouterOS ang mando sa pagsulbad alang sa pagpangita sa DNS.
Kini nga hangyo gidumala sa usa ka binary nga ginganlan nga solver. Ang Resolver usa sa daghang binary nga konektado sa Winbox protocol sa RouterOS. Sa taas nga lebel, ang "mga mensahe" nga gipadala sa usa ka pantalan sa Winbox mahimong madala sa lainlaing mga binary sa RouterOS base sa laraw sa pag-numero nga gibase sa array.
Ang bahin sa DNS server gi-disable pinaagi sa default sa RouterOS.
Bisan pa, bisan kung ang function sa server na-disable, ang router nagmintinar sa kaugalingon nga DNS cache.
Kung maghimo kami usa ka hangyo gamit ang winbox_dns_request sama sa example.com, ang router mag-cache sa resulta.
Tungod kay mahimo natong ipiho ang DNS server diin ang hangyo kinahanglan nga moadto, kini walay hinungdan sa pagsulod sa sayop nga mga adres. Pananglitan, mahimo nimong i-configure ang pagpatuman sa DNS server gikan sa
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()
Karon kung mogamit ka sa Winbox aron pangitaon ang example.com, imong makita nga ang DNS cache sa router nahilo.
Siyempre, ang pagkahilo sa example.com dili kaayo mapuslanon, tungod kay ang router dili gayud mogamit niini. Bisan pa, ang router kinahanglan nga maka-access sa upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com ug download.mikrotik.com. Ug salamat sa lain nga sayup, posible nga makahilo silang tanan sa usa ka higayon.
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()
Ang router nangayo og usa ka grant, ug naghatag kami og lima ka balik. Ang router sayop nga nag-cache sa tanan niini nga mga tubag.
Dayag, kini nga pag-atake mapuslanon usab kung ang router naglihok ingon usa ka DNS server, tungod kay gitugotan niini ang pag-atake sa mga kliyente sa router.
Usab, kini nga pag-atake nagtugot sa pagpahimulos sa usa ka mas seryoso nga kahuyang: pag-downgrade o pag-backport sa bersyon sa RouterOS. Gibuhat pag-usab sa tig-atake ang logic sa pag-update sa server, lakip ang changelog, ug gipugos ang RouterOS nga dawaton ang karaan (bulnerable) nga bersyon ingon nga labing bag-o. Ang kapeligrohan dinhi naa sa kamatuoran nga kung imong "pag-upgrade" ang bersyon, ang password sa tagdumala gi-reset sa "default" nga kantidad - ang usa ka tig-atake mahimong maka-log in gamit ang usa ka blangko nga password!
Ang pag-atake maayo kaayo, bisan pa sa kamatuoran nga
sa pagpanalipod sa
Ang pag-disable lang sa Winbox makatabang sa pagpanalipod batok niini nga mga pag-atake. Bisan pa sa kasayon ββββsa pagdumala pinaagi sa Winbox, mas maayo nga gamiton ang SSH protocol.
Source: www.habr.com