RouterOS-ի (Mikrotik) վրա հիմնված սարքերը հեռակա կարգով իջեցնելու հնարավորությունը վտանգի տակ է դնում հարյուր հազարավոր ցանցային սարքեր: Խոցելիությունը կապված է Winbox արձանագրության DNS քեշի թունավորման հետ և թույլ է տալիս սարքի վրա բեռնել հնացած (լռելյայն գաղտնաբառի վերակայմամբ) կամ փոփոխված որոնվածը:
Խոցելիության մանրամասները
RouterOS տերմինալն աջակցում է DNS որոնման հրամանին:
Այս հարցումը մշակվում է երկուականի կողմից, որը կոչվում է լուծիչ: Resolver-ը բազմաթիվ երկուականներից մեկն է, որը միանում է RouterOS-ի Winbox արձանագրությանը: Բարձր մակարդակով Winbox նավահանգիստ ուղարկված «հաղորդագրությունները» կարող են ուղղորդվել դեպի տարբեր երկուականներ RouterOS-ում՝ զանգվածների վրա հիմնված համարակալման սխեմայի հիման վրա:
Լռելյայնորեն, RouterOS-ն անջատված է DNS սերվերի ֆունկցիան:
Այնուամենայնիվ, նույնիսկ երբ սերվերի գործառույթն անջատված է, երթուղիչը պահպանում է իր սեփական DNS քեշը:
Երբ մենք հարցում ենք անում՝ օգտագործելով winbox_dns_request օրինակ օրինակ.com-ը, երթուղիչը կքեշի արդյունքը:
Քանի որ մենք կարող ենք նշել DNS սերվերը, որի միջոցով պետք է անցնի հարցումը, սխալ հասցեներ մուտքագրելը աննշան է: Օրինակ, դուք կարող եք կարգավորել DNS սերվերի իրականացումը
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()
Այժմ, եթե որոնեք օրինակ.com-ը՝ օգտագործելով Winbox-ը, կարող եք տեսնել, որ երթուղիչի DNS քեշը թունավորված է:
Իհարկե, poisoning example.com-ը այնքան էլ օգտակար չէ, քանի որ երթուղիչը իրականում չի օգտագործի այն: Այնուամենայնիվ, երթուղիչին անհրաժեշտ է մուտք գործել upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com և download.mikrotik.com: Եվ մեկ այլ սխալի շնորհիվ հնարավոր է բոլորին թունավորել միանգամից։
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()
Երթուղիչը մեկ թույլտվություն է խնդրում, և մենք հինգը հետ ենք տալիս: Երթուղիչը ճիշտ չի պահում այս բոլոր պատասխանները:
Ակնհայտ է, որ այս հարձակումը նաև օգտակար է, եթե երթուղիչը գործում է որպես DNS սերվեր, քանի որ այն թույլ է տալիս հարձակվել երթուղիչի հաճախորդների վրա:
Այս հարձակումը նաև թույլ է տալիս օգտագործել ավելի լուրջ խոցելիություն՝ իջեցնել կամ ետ ուղարկել RouterOS-ի տարբերակը: Հարձակվողը վերստեղծում է թարմացման սերվերի տրամաբանությունը, ներառյալ փոփոխության լոգը, և RouterOS-ին ստիպում է հնացած (խոցելի) տարբերակը ընկալել որպես ընթացիկ: Այստեղ վտանգը կայանում է նրանում, որ երբ տարբերակը «թարմացվում է», ադմինիստրատորի գաղտնաբառը վերակայվում է լռելյայն արժեքին. հարձակվողը կարող է մուտք գործել համակարգ դատարկ գաղտնաբառով:
Հարձակումը բավականին աշխատունակ է, չնայած այն հանգամանքին, որ
պաշտպանություն
Պարզապես Winbox-ի անջատումը թույլ է տալիս պաշտպանվել այս հարձակումներից: Չնայած Winbox-ի միջոցով վարչարարության հարմարությանը, ավելի լավ է օգտագործել SSH արձանագրությունը:
Source: www.habr.com