Backport уразлівасць у RouterOS ставіць пад пагрозу сотні тысяч прылад

Backport уразлівасць у RouterOS ставіць пад пагрозу сотні тысяч прылад

Магчымасць выдаленага даунгрейда прылад на базе RouterOS (Mikrotik) ставіць пад пагрозу сотні тысяч сеткавых прылад. Уразлівасць злучана з атручваннем DNS-кэша Winbox пратаколу і дазваляе загрузіць састарэлую (са скідам пароля "па-змаўчанні") або мадыфікаваную прашыўку на прыладу.

Backport уразлівасць у RouterOS ставіць пад пагрозу сотні тысяч прылад

Дэталі ўразлівасці

Тэрмінал RouterOS падтрымлівае каманду дазволу для пошуку DNS.

Backport уразлівасць у RouterOS ставіць пад пагрозу сотні тысяч прылад

Гэты запыт апрацоўваецца двайковым файлам з імем resolver. Resolver з'яўляецца адным са шматлікіх двайковых файлаў, якія падлучаныя да пратаколу Winbox ад RouterOS. На высокім узроўні "паведамленні", якія адпраўляюцца на порт Winbox, могуць маршрутызавацца ў розныя двайковыя файлы ў RouterOS на аснове схемы нумарацыі на аснове масіва.

Па змаўчанні ў RouterOS адключаная функцыя DNS-сервера.

Backport уразлівасць у RouterOS ставіць пад пагрозу сотні тысяч прылад

Аднак нават пры адключанай функцыі сервера маршрутызатар падтрымлівае ўласны кэш DNS.

Backport уразлівасць у RouterOS ставіць пад пагрозу сотні тысяч прылад

Калі мы робім запыт, выкарыстоўваючы winbox_dns_request, напрыклад, example.com, маршрутызатар будзе кэшаваць вынік.

Backport уразлівасць у RouterOS ставіць пад пагрозу сотні тысяч прылад

Паколькі мы можам пазначыць DNS-сервер, праз які павінен прайсці запыт, уводзіць няправільныя адрасы трывіяльна. Напрыклад, можна наладзіць рэалізацыю DNS-сервера ад Піліпа Клаўса, каб заўсёды адказваць запісам A, утрымоўвальнай 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()

Цяпер калі з дапамогай Winbox пашукаць example.com то можна ўбачыць што DNS-кэш маршрутызатара атручаны.

Backport уразлівасць у RouterOS ставіць пад пагрозу сотні тысяч прылад

Вядома, атручванне 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()

Маршрутызатар запытвае адно дазвол, а мы даем пяць назад. Маршрутызатар няправільна кэшуе ўсе гэтыя адказы.

Backport уразлівасць у RouterOS ставіць пад пагрозу сотні тысяч прылад

Відавочна, што гэтая атака таксама карысная, калі маршрутызатар дзейнічае як DNS-сервер, паколькі ён дазваляе атакаваць кліентаў маршрутызатара.

Таксама гэты напад дазваляе праэксплуатаваць больш сур'ёзную ўразлівасць: вырабіць даунгрейд або бэкпартаванне версіі RouterOS. Атакуючы узнаўляе логіку сервера абнаўленняў, уключаючы changelog і прымушае RouterOS успрыняць састарэлую (уразлівую) версію як актуальную. Небяспека тут крыецца ў тым, што пры "абнаўленні" версіі пароль адміністратара скідаецца ў значэнне "па-змаўчанні" - зламыснік можа ўвайсці ў сістэму з пустым паролем!


Атака цалкам працоўная, нягледзячы на ​​??тое, што аўтар рэалізоўвае яшчэ некалькі вектараў, злучаных у тым ліку і з убудаваннем бэкдора ў прашыўку, але гэта ўжо залішняя тэхніка і ўжыванне яе ў нелігітымных мэтах супрацьзаконна.

абарона

Простае адключэнне Winbox дазваляе абараніцца ад гэтых нападаў. Нягледзячы на ​​выгоду адміністравання праз Winbox лепш скарыстацца пратаколам SSH.

Крыніца: habr.com

Дадаць каментар