Kerentanan backport dalam RouterOS meletakkan ratusan ribu peranti berisiko

Kerentanan backport dalam RouterOS meletakkan ratusan ribu peranti berisiko

Keupayaan untuk menurunkan taraf peranti dari jauh berdasarkan RouterOS (Mikrotik) meletakkan ratusan ribu peranti rangkaian berisiko. Kerentanan dikaitkan dengan keracunan cache DNS protokol Winbox dan membolehkan anda memuatkan yang sudah lapuk (dengan tetapan semula kata laluan lalai) atau perisian tegar yang diubah suai ke peranti.

Kerentanan backport dalam RouterOS meletakkan ratusan ribu peranti berisiko

Butiran kerentanan

Terminal RouterOS menyokong perintah menyelesaikan untuk carian DNS.

Kerentanan backport dalam RouterOS meletakkan ratusan ribu peranti berisiko

Permintaan ini dikendalikan oleh binari yang dipanggil penyelesai. Penyelesai adalah salah satu daripada banyak binari yang bersambung ke protokol Winbox RouterOS. Pada tahap yang tinggi, "mesej" yang dihantar ke port Winbox boleh dialihkan ke pelbagai binari dalam RouterOS berdasarkan skema penomboran berasaskan tatasusunan.

Secara lalai, RouterOS mempunyai ciri pelayan DNS dilumpuhkan.

Kerentanan backport dalam RouterOS meletakkan ratusan ribu peranti berisiko

Walau bagaimanapun, walaupun apabila fungsi pelayan dilumpuhkan, penghala mengekalkan cache DNSnya sendiri.

Kerentanan backport dalam RouterOS meletakkan ratusan ribu peranti berisiko

Apabila kami membuat permintaan menggunakan winbox_dns_request sebagai contoh.com, penghala akan cache hasilnya.

Kerentanan backport dalam RouterOS meletakkan ratusan ribu peranti berisiko

Memandangkan kita boleh menentukan pelayan DNS di mana permintaan itu harus pergi, memasukkan alamat yang salah adalah remeh. Sebagai contoh, anda boleh mengkonfigurasi pelaksanaan pelayan DNS daripada Philip Klausuntuk sentiasa membalas dengan rekod A yang mengandungi 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 boleh melihat bahawa cache DNS penghala telah diracuni.

Kerentanan backport dalam RouterOS meletakkan ratusan ribu peranti berisiko

Sudah tentu, meracuni example.com tidak begitu berguna kerana penghala sebenarnya tidak akan menggunakannya. Walau bagaimanapun, penghala perlu mengakses upgrade.mikrotik.com, cloud.mikrotik.com, cloud2.mikrotik.com dan muat turun.mikrotik.com. Dan terima kasih kepada kesilapan lain, adalah mungkin untuk meracuni mereka semua 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()

Penghala meminta satu kebenaran, dan kami memberikan lima kembali. Penghala tidak cache semua respons ini dengan betul.

Kerentanan backport dalam RouterOS meletakkan ratusan ribu peranti berisiko

Jelas sekali, serangan ini juga berguna jika penghala bertindak sebagai pelayan DNS, kerana ia membolehkan pelanggan penghala diserang.

Serangan ini juga membolehkan anda mengeksploitasi kelemahan yang lebih serius: turun taraf atau backport versi RouterOS. Penyerang mencipta semula logik pelayan kemas kini, termasuk log perubahan, dan memaksa RouterOS untuk melihat versi lapuk (terdedah) sebagai semasa. Bahaya di sini terletak pada fakta bahawa apabila versi "dikemas kini", kata laluan pentadbir ditetapkan semula kepada nilai lalai - penyerang boleh log masuk ke sistem dengan kata laluan kosong!


Serangan itu cukup berkesan, walaupun pada hakikatnya pengarang melaksanakan beberapa lagi vektor, termasuk yang berkaitan dengan membenamkan pintu belakang ke dalam perisian tegar, tetapi ini sudah menjadi teknik yang berlebihan dan penggunaannya untuk tujuan yang tidak sah adalah haram.

perlindungan

Hanya melumpuhkan Winbox membolehkan anda melindungi diri anda daripada serangan ini. Walaupun kemudahan pentadbiran melalui Winbox, lebih baik menggunakan protokol SSH.

Sumber: www.habr.com

Tambah komen