Kerentanan backport di RouterOS membahayakan ratusan ribu perangkat



Kemampuan untuk menurunkan perangkat dari jarak jauh berdasarkan RouterOS (Mikrotik) menempatkan ratusan ribu perangkat jaringan dalam bahaya. Kerentanan terkait dengan keracunan cache DNS dari protokol Winbox dan memungkinkan pengunduhan yang ketinggalan zaman (dengan mengatur ulang kata sandi secara default) atau modifikasi firmware pada perangkat.



Detail Kerentanan


Terminal RouterOS mendukung perintah resolusi untuk pencarian DNS.

gambar

Permintaan ini diproses oleh biner bernama resolver. Resolver adalah salah satu dari banyak binari yang terhubung ke protokol RouterOS Winbox. Pada tingkat tinggi, "pesan" yang dikirim ke port Winbox dapat dialihkan ke berbagai binari di RouterOS berdasarkan skema penomoran berbasis array.

Secara default, RouterOS menonaktifkan fitur server DNS.

gambar

Namun, bahkan dengan fungsi server dinonaktifkan, router mempertahankan cache DNS-nya sendiri.

gambar

Ketika kami membuat permintaan menggunakan winbox_dns_request, misalnya, example.com, router akan menyimpan hasilnya.

gambar

Karena kita dapat menentukan server DNS yang melaluinya permintaan harus dimasukkan, memasukkan alamat yang salah adalah sepele. Misalnya, Anda dapat mengkonfigurasi implementasi server DNS dari Philip Klaus untuk selalu merespons dengan catatan A yang berisi alamat IP 192.168.88.250.

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() 

Sekarang, jika Anda mencari example.com menggunakan Winbox, Anda dapat melihat bahwa cache DNS router telah diracuni.

gambar

Tentu saja, keracunan example.com tidak terlalu berguna karena router tidak akan menggunakannya. Namun, router memerlukan akses untuk meningkatkan.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com dan unduh.mikrotik.com. Dan berkat kesalahan lain, dimungkinkan untuk meracuni semuanya sekaligus.

 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 meminta satu izin, dan kami memberikan lima kembali. Perute menyimpan semua respons ini dengan tidak benar.

gambar

Jelas, serangan ini juga berguna jika router bertindak sebagai server DNS, karena memungkinkan menyerang klien dari router.

Serangan ini juga memungkinkan mengeksploitasi kerentanan yang lebih serius: menurunkan versi atau mendukung versi RouterOS. Penyerang membuat ulang logika dari server pembaruan, termasuk changelog, dan memaksa RouterOS untuk menerima versi yang sudah usang (rentan) seperti saat ini. Bahaya di sini terletak pada kenyataan bahwa ketika "memperbarui" versi, kata sandi administrator diatur ulang ke nilai default - penyerang dapat masuk ke sistem dengan kata sandi kosong!


Serangan itu cukup berhasil, meskipun fakta bahwa penulis mengimplementasikan beberapa vektor lagi, termasuk yang terkait dengan menanamkan backdoor di firmware , tetapi ini sudah merupakan teknik yang berlebihan dan ilegal untuk menggunakannya untuk tujuan tidak sah.

Perlindungan


Cukup menonaktifkan Winbox melindungi terhadap serangan ini. Meskipun kemudahan administrasi melalui Winbox, lebih baik menggunakan protokol SSH.

Source: https://habr.com/ru/post/id473676/


All Articles