RouterOS இல் உள்ள பேக்போர்ட் பாதிப்பு நூறாயிரக்கணக்கான சாதனங்களை ஆபத்தில் ஆழ்த்துகிறது

RouterOS இல் உள்ள பேக்போர்ட் பாதிப்பு நூறாயிரக்கணக்கான சாதனங்களை ஆபத்தில் ஆழ்த்துகிறது

Возможность удаленного даунгрейда устройств на базе RouterOS (Mikrotik) ставит под угрозу сотни тысяч сетевых устройств. Уязвимость связана с отравлением DNS-кеша Winbox протокола и позволяет загрузить устаревшую (со сбросом пароля «по-умолчанию») или модифицированную прошивку на устройство.

RouterOS இல் உள்ள பேக்போர்ட் பாதிப்பு நூறாயிரக்கணக்கான சாதனங்களை ஆபத்தில் ஆழ்த்துகிறது

Детали уязвимости

Терминал RouterOS поддерживает команду разрешения для поиска DNS.

RouterOS இல் உள்ள பேக்போர்ட் பாதிப்பு நூறாயிரக்கணக்கான சாதனங்களை ஆபத்தில் ஆழ்த்துகிறது

Этот запрос обрабатывается двоичным файлом с именем resolver. Resolver является одним из многих двоичных файлов, которые подключены к протоколу Winbox от RouterOS. На высоком уровне «сообщения», отправляемые на порт Winbox, могут маршрутизироваться в различные двоичные файлы в RouterOS на основе схемы нумерации на основе массива.

По умолчанию в RouterOS отключена функция DNS-сервера.

RouterOS இல் உள்ள பேக்போர்ட் பாதிப்பு நூறாயிரக்கணக்கான சாதனங்களை ஆபத்தில் ஆழ்த்துகிறது

Однако даже при отключенной функции сервера маршрутизатор поддерживает собственный кэш DNS.

RouterOS இல் உள்ள பேக்போர்ட் பாதிப்பு நூறாயிரக்கணக்கான சாதனங்களை ஆபத்தில் ஆழ்த்துகிறது

Когда мы делаем запрос, используя winbox_dns_request, например, example.com, маршрутизатор будет кэшировать результат.

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-кеш маршрутизатора отравлен.

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

Маршрутизатор запрашивает одно разрешение, а мы предоставляем пять обратно. Маршрутизатор неправильно кэширует все эти ответы.

RouterOS இல் உள்ள பேக்போர்ட் பாதிப்பு நூறாயிரக்கணக்கான சாதனங்களை ஆபத்தில் ஆழ்த்துகிறது

Очевидно, что эта атака также полезна, если маршрутизатор действует как DNS-сервер, поскольку он позволяет атаковать клиентов маршрутизатора.

Также эта атака позволяет проэксплуатировать более серьезную уязвимость: произвести даунгрейд или бэкпортирование версии RouterOS. Атакующий воссоздает логику сервера обновлений, включая changelog и заставляет RouterOS воспринять устаревшую (уязвимую) версию как актуальную. Опасность здесь кроется в том, что при «обновлении» версии пароль администратора сбрасывается в значение «по-умолчанию» — злоумышленник может войти в систему с пустым паролем!


Атака вполне рабочая, несмотря на то что ஆசிரியர் реализовывает еще несколько векторов, связанных в том числе и с встраиванием бэкдора в прошивку, но это уже избыточная техника и применение ее в нелигитимных целях противозаконно.

பாதுகாப்பு

Простое отключение Winbox позволяет защититься от этих атак. Несмотря на удобство администрирования через Winbox лучше воспользоваться протоколом SSH.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்