Способноста далечински да се деградираат уредите базирани на RouterOS (Mikrotik) става во опасност стотици илјади мрежни уреди. Ранливоста е поврзана со труење на кешот DNS на протоколот Winbox и ви овозможува да вчитате застарен (со стандардно ресетирање лозинка) или изменет фирмвер на уредот.
Детали за ранливост
Терминалот RouterOS ја поддржува командата за решавање за пребарување на DNS.
Со ова барање се справува бинарен наречен разрешувач. Resolver е еден од многуте бинарни датотеки што се поврзуваат со протоколот Winbox на RouterOS. На високо ниво, „пораките“ испратени до пристаништето Winbox може да се пренасочат до различни бинарни датотеки во RouterOS врз основа на шема за нумерирање базирана на низа.
Стандардно, RouterOS ја има оневозможена функцијата на серверот DNS.
Сепак, дури и кога функцијата на серверот е оневозможена, рутерот одржува сопствен DNS кеш.
Кога правиме барање користејќи winbox_dns_request на пример example.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()
Сега ако пребарувате на example.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.
Извор: www.habr.com