Ранливоста на заднината во 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

Додадете коментар