Могућност даљинског уклањања уређаја заснованих на РоутерОС-у (Микротик) доводи у опасност стотине хиљада мрежних уређаја. Рањивост је повезана са тровањем ДНС кеша Винбок протокола и омогућава вам да учитате застарели (са подразумеваним ресетовањем лозинке) или модификовани фирмвер на уређај.
Детаљи рањивости
РоутерОС терминал подржава команду решавања за ДНС тражење.
Овим захтевом обрађује бинарни систем који се зове разрешивач. Ресолвер је један од многих бинарних датотека које се повезују на РоутерОС-ов Винбок протокол. На високом нивоу, „поруке“ које се шаљу на Винбок порт могу се усмерити на различите бинарне датотеке у РоутерОС-у на основу шеме нумерисања засноване на низу.
Подразумевано, РоутерОС има онемогућену функцију ДНС сервера.
Међутим, чак и када је функција сервера онемогућена, рутер одржава сопствену ДНС кеш меморију.
Када направимо захтев користећи винбок_днс_рекуест на пример екампле.цом, рутер ће кеширати резултат.
Пошто можемо да наведемо ДНС сервер преко којег треба да иде захтев, унос погрешних адреса је тривијалан. На пример, можете да конфигуришете имплементацију ДНС сервера из
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()
Сада ако тражите екампле.цом користећи Винбок, можете видети да је ДНС кеш рутера затрован.
Наравно, тровање екампле.цом није од велике користи јер га рутер заправо неће користити. Међутим, рутер треба да приступи упграде.микротик.цом, цлоуд.микротик.цом, цлоуд2.микротик.цом и довнлоад.микротик.цом. А захваљујући још једној грешци, могуће их је све одједном отровати.
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()
Рутер тражи једну дозволу, а ми враћамо пет. Рутер не кешира све ове одговоре исправно.
Очигледно, овај напад је такође користан ако рутер делује као ДНС сервер, јер омогућава напад на клијенте рутера.
Овај напад вам такође омогућава да искористите озбиљнију рањивост: надоградите или вратите верзију РоутерОС-а. Нападач поново креира логику сервера за ажурирање, укључујући дневник промена, и приморава РоутерОС да застарелу (рањиву) верзију сматра актуелном. Опасност овде лежи у чињеници да када се верзија „ажурира“, администраторска лозинка се ресетује на подразумевану вредност – нападач се може пријавити на систем са празном лозинком!
Напад је прилично ефикасан, упркос чињеници да
заштита
Једноставно онемогућавање Винбок-а омогућава вам да се заштитите од ових напада. Упркос погодности администрације преко Винбок-а, боље је користити ССХ протокол.
Извор: ввв.хабр.цом