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



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


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

image

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

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

image

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

image

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

image

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

image

Конечно, отравление 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()

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

image

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

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


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

Защита


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

Комментарии (85)


  1. LumberJack
    29.10.2019 18:49
    +2

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

    По умолчанию правила файрвола разрешают доступ к роутеру только из локалки и запрещают из Интернета (включая порт 53). Таким образом «обновив» прошивку злодей уже не попадёт внутрь снаружи, а если сохранит правила, то и пароль админа не сбросит.
    Возможно я и ошибаюсь.


    1. MarvinD
      29.10.2019 18:54

      Если winbox прикрыт firewall, то до него не дойдет трафик. Если бы не так, то это был бы атас полный.


    1. AcidVenom
      29.10.2019 19:02

      Есть еще провайдер. Не у всех есть правило, блокирующее проникновении если пров пропишет маршрут в вашу сети.

      это правило
      chain=forward action=drop connection-state=invalid,new connection-nat-state=!dstnat in-interface-list=WAN log=no log-prefix=""

      в конфах по умолчанию оно есть, но было не всегда


    1. IgorPie
      29.10.2019 20:16

      Ошибаетесь. Запускаю винбокс и вижу открытые наружу микроты соседей по локалке.


      1. nApoBo3
        30.10.2019 00:43

        Не факт, что вы можете на них войти, там есть отдельный протокол для discovery. Плюс он ещё и по l2 умеет и это тоже отдельно нужно блокировать.


        1. AcidVenom
          30.10.2019 09:14

          Из коробки это можно только из бриджа.


        1. IgorPie
          30.10.2019 14:39

          опровергнуть не могу, нет паролей. Но и видеть я их тоже не должен, в таком случае. А микротов пара штук на 32 квартиры.


          1. Andrusha
            30.10.2019 15:22

            Ну так LumberJack вообще-то писал про правила по умолчанию, а у соседей, видимо, они уже не по умолчанию, раз видно.


          1. AcidVenom
            30.10.2019 19:47
            +1

            Возможно, обновляли со старых версий, оттуда и старая конфа. Сейчас по умолчанию конфа другая. Аналогично и MNDP.

            Заголовок спойлера


    1. hav0k
      30.10.2019 07:33

      По ssh нельзя сделать авторизацию только по ключу.


      1. DaemonGloom
        30.10.2019 08:00

        Можно, параметр always-allow-password-login (https://wiki.mikrotik.com/wiki/Manual:IP/SSH).


        1. hav0k
          31.10.2019 17:00

          Я делал кажись именно так, но он все равно просил пароль если ключа нет, хоть и пароль уже не принимал. Мне не много не понравилось это поведение.


      1. slonopotamus
        30.10.2019 09:02

        Это какой-то фундаментальный закон природы? Что мне помешает так сделать?


  1. MarvinD
    29.10.2019 18:49

    Если кому нужен winbox снаружи, то уж лучше VPN сделать и доступ к winbox только через него. Имхо, ssh не всем может заменить winbox.


    1. paxlo
      29.10.2019 22:29
      -1

      С трудом представляются случаи, когда мышковозенье в управлении роутером может быть лучше чем SSH. Грепать GUI нельзя, скриптинг нельзя, работать с сотнями устройств через какой-нибудь ansible или на крайняк pssh нельзя. Да есть какой-то костыль The Dude, но он ни с чем кроме микроты не работает, а хочется универсальности. Да и вообще протокол проприетарный и что там у него внутри непонятно. И уже не первый раз его рекомендуют отключать из-за проблем с безопасностью. Ну и нафиг он нужен такой несовместимый и непонятный. К томуже Winbox это всего лишь враппер над ssh по сути.


      1. MarvinD
        30.10.2019 02:16
        +1

        Лучше мышкой или хуже — дело субъективное, зависящее от задачи, регулярности работы с устройствами (не всем нужно работать с сотнями, скриптить и т.п.). Это дело привычки и времени. Можно отключить, а можно ограничить доступ, вы же не браузер из winbox запускаете, здесь нет таких угроз, как при пользовании IE с контроллера домена Windows ;)


        1. paxlo
          30.10.2019 14:21
          -1

          То что у вас нет навыков работы с консолью, совершенно не значит что вы сможете повторить все это мышкой, даже имея дофига времени и «опыта». Кому-то пешком ходить привычнее. Но добраться до места быстрее всего на машине/метро. И как бы вы ни были «привычны» и «опытны» к хождению пешком, эффективнее чем на машине у вас не получится.

          Насчет субъективности. Функциональность вполне объективна. И ее можно и нужно сравнивать. Я вам привел пункты по которым winbox мягко говоря всасывает. Жду от вас описания преимуществ winbox по сравнению с cli.

          По угрозам — ограничение доступа не обсуждается, это must have, но дыры в протоколе это не закроет.
          В IT вообще нечего делать без навыков работы с консолью.


          1. MarvinD
            30.10.2019 14:54

            Что касается меня, да, мне в Winbox удобнее, я настраиваю не так часто микротики. И чаще хвосты подметаю, winbox нагляднее. Хотя «export file» просто прекрасен и часто выручает, когда все-в-одном-файле. И в Windows удобнее графический интерфейс. А в Linux серверах мне графика не нужна, но я не говорю никому, что графика — отстой.


            1. paxlo
              30.10.2019 17:53

              Конкретно по микротику: гуйня разнесенная по сотням разных разделов, вкладок, селекторов, выпадашек и кнопочек, по определению не может быть нагляднее чем полотно конфига /exp t. Который к тому-же упорядочен по разделам.
              Про Windows и графический интерфейс вы расскажите создателям PowerShell, которые настолько устали от мышковозенья на своих серверах, что начали делать свою замену bash, чтобы выполнять нужные настройки единственным нажатием запуска скрипта.


          1. hokum13
            30.10.2019 16:57
            +1

            Иногда нужно перейти в соседний подъезд или дом, в пределах квартала. Можно конечно и через метро, но пешком удобнее. Так и с winbox. Настроить весь зоопарк удобнее через ssh, а выполнить какую-нибудь редкую команду — winbox.
            Опять же не все сидят на linux и/или постоянно настраивают 100500 микротиков. Иногда люди работают (и даже не работают, а играют!) на windows, а на роутере настраивают только пароль для wifi. В этом случае winbox и даже web гораздо удобнее.


            1. paxlo
              30.10.2019 17:45
              -1

              То что работает для 100500 микротиков прекрасно работает и для одного. Редкая команда отлично выполняется через ssh. Причем, даже в разы быстрее чем через WinBox, если настроить авторизацию по ключам (а это best practices) ибо никакие логины пароли вводить не нужно. Вопрос всегда в развитии. Развиваясь, каждый ищет способ сэкономить самый ценный ресурс — время, даже на выполнение рутинной или даже редкой работы. Тут важно насколько человек ленив/туп, чтобы освоить что-то новое, малопонятно, пугающее сложностью.


              1. maverickcy
                30.10.2019 18:14
                +1

                Все таки, winbox намного быстрее, чем консоль. И удобнее. И проще.


                1. Rivera
                  30.10.2019 23:00
                  +1

                  Во многом wb нагляднее и быстрее, согласен. Но некоторые действия, к примеру, управление 1000+ вланами, бриджами и интерфейсами туннелей даются винбоксу крайне тормозно. Для таких случаев всегда открываю терминал.


                  1. maverickcy
                    31.10.2019 10:06

                    У меня пока нет столько вланов))


                1. paxlo
                  30.10.2019 23:41
                  -1

                  вряд ли


              1. hokum13
                30.10.2019 18:58
                +1

                Если Вы уже освоили управление 100500 микротиков — да.

                Но что делать, если их у Вас <10 штук и больше ни когда еще не было? Вот прям серьезно нужно осваивать все примудрости тиковской консоли? Виндузятнику нужно осваивать работу с ssh?

                Это в linux rsa генерируется за 5 секунд, а в windows это несколько не удобно! И да, копировать ключ в mikrotik одинаково не удобно, как из linux, так и из windows!

                Но Вы так и не ответили: к соседу по лестничной площадке на бэхе поедете? Ведь это удобнее, чем пешком ходить!


                1. loki82
                  30.10.2019 23:11

                  Виндузятнику нужно осваивать работу с ssh?

                  Не нужно, но крайне рекомендовано. Но Согласен, когда у тебя 1000 VLAN у одного клиента, может и надо скриптами и SSH. А когда у тебя 100 клиентов? И каждый со своими настройками? Да еще и каждый из имеет 3-4 Mikrotik из разных линеек?


                1. paxlo
                  31.10.2019 00:25
                  +1

                  Человеку, который возомнил себя админом и собирается админить что-то большее чем 1 хост, нужно освоить консоль и средства автоматизации или валить из профессии, пока ссаными тряпками не закидали. Ибо консольный интерфейс и SSH в частности это железобетонный стандарт работающий еще с доGIU времен. И навык с ним должен быть иначе стыдно и приходиться придумывать глупости по GUI как «нашевсё». И ваше счастье что в микротике есть gui, и то не дай вам бох попадется коммутатор/роутер других известных и более крутых фирм, в которых голая консоль и ничего больше.

                  Насчет соседа: в моей аналогии, если до всех объектов включая соседа, другой конец города, другие города, есть удобная, качественная и прямая трасса ведущая прямо от дивана до места назначения, то естественно быстрее добраться на транспорте (SSH). А в вашей логике раз вам до соседа удобно дойти пешком (WinBox), то значит это вообще самый удобный способ перемещения, раз вы не осилили сдать на права или купить билет на сапсан.

                  SSH это инструмент вообще никак не коррелирующий с использованием ОС. Для всех ОС есть соответствующие клиенты ssh, которые неплохо было бы изучить.

                  Вот прям серьезно нужно осваивать все примудрости тиковской консоли?
                  Там нет прЕмудростей. Все команды автодополняются по табу (одиночному Карл, даже не двойному как в линуксах), или вообще включаете режим автодополнения (Ctrl+V) и RouterOS сама будет за вас дополнять команды и параметры. Есть ? — выдающий справку по всему. Или ещё круче — сокращения, которые не ребуют полные названия команд, например:
                  /sy p up ch

                  вместо
                  /system package update check-for-updates
                  


                  Я повторюсь, на низком уровне, WinBox это враппер над ssh. При нажатии на соответствующие кнопки мышкой он по сути исполняет те же ssh команды. Вы попробуйте. Изучить что-то новое это всегда полезно.

                  Это в linux rsa генерируется за 5 секунд, а в windows это несколько не удобно!
                  Вранье. puttygen. Пара кликов вашей любимой мышкой и ключик готов. Время генерации зависит от длины ключа.

                  копировать ключ в mikrotik одинаково не удобно, как из linux, так и из windows!
                  Опять вранье. pscp ./file mikrotik:. Или WinSCP для вашей любимой мышки.

                  Вообще не редкость наблюдать как адепты мифа о GUI как о якобы быстрой и удобной штуке, догло, муторно и с повторами водят мышкой в поисках нужно опции и не находят ее. В то время как с консоли тоже самое выполняется в разы быстрее за счет автодополнения табом и сокращений.


                  1. hokum13
                    31.10.2019 11:56
                    +1

                    собирается админить что-то большее чем 1 хост
                    А если он не возомнил себя админом? Если это одноразовое действие? У нас 90% оборудования настраивается 1, максимум 2 раза! Или для настройки интернета дома или в не_сетевом магазине нужно обязательно админа-сетевика нанимать?
                    Насчет соседа: в моей аналогии
                    Повторюсь! По лестничной клетке! До него по ней идти 4 шага! А Вы опять меняете среду, под инструмент.
                    Для всех ОС есть соответствующие клиенты ssh, которые неплохо было бы изучить.
                    Для всех видов транспорта есть соответствующие права, которые неплохо было бы получить,… но зачем?
                    которые не Требуют полные названия команд, например:
                    А еще можно писать прямо в машинных кодах, и исполняется быстрее, и места меньше занимает… Только вот совершенно не читаемо. В отрыве от контекста вот это вот "/sy p up ch" — полная абракадабра!
                    Вранье. puttygen. Пара кликов вашей любимой мышкой и ключик готов.
                    В linux мне достаточно ввести:
                    ssh-keygen

                    , а в windows для начала нужно этот самый putty скачать, да еще и чтобы вместе с ним всякие допы прилетели, а не только сам голый putty. А потом еще «долго, муторно и с повторами водить мышкой в поисках нужной опции»…
                    Опять вранье. pscp ./file mikrotik:
                    Или
                    ssh-copy-id username@linux_IP

                    последнее, как мне кажется проще. Ну и скопированый на тик ключ нужно еще в учетку импортировать. Хотя и согласен, что по сертификату в ssh ходить правильнее и удобнее.
                    адепты мифа о GUI как о якобы быстрой и удобной штуке, догло, муторно и с повторами водят мышкой в поисках нужно опции
                    Они долго ищут мышкой не потому что GUI не удобный, а потому что не знают что искать! Отсутсвие знаний интерфейсом не исправишь!
                    Хотя могут быть исключения: в 2012-м (сейчас не знаю, не пользуюсь) в тиковский hotspot (непосредственно в сам генератор паролей) можно было попасть только через web или через ssh, но ни как не через winbox.

                    Вообще это чистокровный holyWar. Он не имеет вообще ни какого отношения к удобству, а лишь к принадлежности к адептам TUI/GUI. При этом разработчики routerOS поддерживают оба инструмента, за что им огромное спасибо.


                    1. paxlo
                      31.10.2019 15:35

                      Повторюсь! По лестничной клетке! До него по ней идти 4 шага! А Вы опять меняете среду, под инструмент.
                      Вы сами извратили мою аналогию, введя расстояние и делая на нём акцент. Хорошо, вот вам другая. Что быстрее телепорт из вашей квартире в квартиру соседа и любую точку мира, или — 4 шага до своей двери, выход на лестничную клетку, звонок соседу, вход в его квартиру? Так то.

                      Для всех видов транспорта есть соответствующие права, которые неплохо было бы получить,… но зачем?
                      Вам уже даны универсальные права на все виды транспорта включая телепорт, но вы продолжаете ходить везде пешком тратя время.

                      А еще можно писать прямо в машинных кодах, и исполняется быстрее, и места меньше занимает
                      Демагогический прием под названием «ложная альтернатива». Утрирование до крайности. Используется когда аргументов не осталось.

                      В linux мне достаточно ввести… да еще и чтобы вместе с ним всякие допы прилетели, а не только сам голый putty
                      Сначала вы утверждаете что вам мышкой всё проще а потом сами же начинаете топить за консоль. Определитесь.


                      1. hokum13
                        31.10.2019 17:57
                        +1

                        Вам уже даны универсальные права на все виды
                        Как владелец водительского удостоверения на катер и авто скажу Вам следущее: это совсем не универсальные права. Аналогично и ssh — в mikrotik и в linux (я уже молчу про windows) они совсем разные. Да, утилита одна (на катере тоже руль), но вот шел за ssh совсем разный (одни габаритные огни чего стоят).
                        Утрирование до крайности. Используется когда аргументов не осталось.
                        Что быстрее телепорт из вашей квартире в квартиру соседа и любую точку мира, или — 4 шага до своей двери,
                        Вот только у меня дома нет телепорта. Гипотетически конечно я когда-нибудь, может быть его поставлю, но сейчас у меня его нет. И места под него нет. И желания особого ставить его нет. И денег на его покупку тоже нет. А до двери 4 шага. Думаете стоит заморачиваться с телепортом или прямо сейчас сходить за солью к соседу?
                        а потом сами же начинаете топить за консоль. Определитесь.
                        Зачем? В linux проще работать в shell, в windows GUI. Сотню mikrotik проще настроить скриптом через ssh, а домашний уж извините я настраиваю через winbox. Разные ситуации — разные инструменты. Я, как мне кажется, уже перерос тот возраст, когда ты людей делишь на своих и чужих (яблочники/андройдофилы/олды, линуксойды/виндузятники/яблочники/etc, интел/амд/извращенцы...), а инструменты на «те, которые знаю и неправильные».


                  1. MarvinD
                    31.10.2019 12:35
                    +1

                    Человеку, который возомнил себя админом и собирается админить что-то большее чем 1 хост, нужно освоить консоль и средства автоматизации или валить из профессии, пока ссаными тряпками не закидали. Ибо консольный интерфейс и SSH в частности это железобетонный стандарт работающий еще с доGIU времен.

                    Тому, кто админит что-то, нужны инструменты для работы с этим что-то. Если в хозяйстве 2-10 микротиков, к которым обращаются 1-2 раза в 6 месяцев, то зачем тратить свое время на то, чтобы привыкать к консоли? Консоль/терминал/winbox (не важно) — это инструмент. Надо выполнять поставленные задачи. Как-то давно мне пришлось настраивать Catalyst, 2950 вроде, давно уже. Ну да, там консоль, ну да, изучил команды, настроил и через пол-года зыбал команды, потому как разово работал с оборудованием. Был бы gui, не копался бы терминале.


                    1. paxlo
                      31.10.2019 15:49

                      Как я уже писал выше, если у вас более чем 1 устройство и вы продолжаете делать однотипные действия ручками на каждом, да еще и мышкой, то вы уже убиваете свое время.

                      Консоль/терминал/winbox (не важно) — это инструмент.
                      У каждого инструмента есть показатель эффективности. Главные параметры эффективности — время выполнения и функциональность. WinBox проигрывает по обеим пунктам.

                      Соглашусь, что каждый как хочет так и др… т, но я лучше освобожу время и уйду пораньше с работы за счет более эффективных методов работы.


                  1. Sonic55rus
                    31.10.2019 13:52

                    Испытываю острое желание прочитать статью о микротах от гуру TUI.
                    Сам-то я водитель маршрутки и не разу не админ, но уж больно хорошо вы себя рекламируете, молодой пчеловек — захотелось поставить домой 120 микротов цепочкой и настраивать их каждое утро.
                    Научите, поделитесь мудростью адепта железобетонного стандарта Эпохи ДоГуёвья, молю!


                  1. IndiraGandhi
                    31.10.2019 14:00

                    вы упускаете ключевой момент — с некоторых пор микротик выпускает оборудование и для дома тоже. и вот как раз домашним пользователям совсем не с руки использовать ssh.
                    тем более, свои тонкости там имеются. Насколько я помню, там не работают команды ls, cd, top итд.
                    и домашнему пользователю все-таки проще потратить 15-20 минут, настроив все один раз через гуй, чем потратить несколько часов на изучение микротивского терминала, только ради того, чтобы забыть это через два дня, т.к. роутер уже настроен и применять знания негде.


                  1. MarvinD
                    31.10.2019 15:26

                    Я повторюсь, на низком уровне, WinBox это враппер над ssh. При нажатии на соответствующие кнопки мышкой он по сути исполняет те же ssh команды. Вы попробуйте. Изучить что-то новое это всегда полезно.

                    Кстати, здорово бы было, если бы при исполнении команды в Winbox, она где-либо дублировалась в терминальном варианте, как будто ее из сессии ssh выполнили. Было бы супер полезно.


                    1. paxlo
                      31.10.2019 16:13

                      Всё в ваших руках. Пишете фичреквест в микротик.


    1. squabbler
      30.10.2019 08:39
      +1

      А можно настроить Port knocking


      1. Chupakabra303
        30.10.2019 11:57

        Я кроме Port knocking еще список разрешенных ip держу, которые резолвятся из ddns имен. У меня получается как бы приватная сеть доступа к маршрутизаторам, и все имеют ddns имена (я не использую статические ip как правило). И можно находясь за любым из этих маршрутизаторов подключать winbox к любому другому.
        Но, если удаленная машина за NAT провайдера, то разрешенный ip — будет целым ip nat провайдера со множеством других клиентов. Но меня такой уровень надежности устраивает, т.к. у меня за nat только 1 маршрутизатор.


  1. MarvinD
    29.10.2019 18:52

    Но бывают трудные случаи. Недавно заказчик настоял на открытии winbox наружу, хотя я до последнего упирался. Сейчас и pptp много где используется. Хорошо хоть провы этот траф часто блочат и народ порой вынужден соглашаться на ipsec или ovpn :)


    1. Mur81
      29.10.2019 19:25

      L2TP/IPsec же.
      Достаточно легко настраивается на самом Микротике. Особенно если не вдаваться в настройки шифрования и использовать дефолтные, то вообще элементарно.
      Со стороны клиента есть поддержка из коробки в Windows, Android, iOS, Mac OS — точно. Кажется есть (но это не точно) в Chrome OS. Вот насчёт Линукса не знаю (не специалист). В Ubuntu кажется надо что-то руками доставить.
      PPTP давно признан не надёжным в и той же iOS выпилен уже несколько лет назад.
      А открывать что-то наружу без VPN это такое себе я считаю.


    1. IgorPie
      29.10.2019 20:17

      Ovpn тоже блочат только в путь, считая его udp пакеты торрентами


      1. MarvinD
        29.10.2019 23:15

        В микротике он tcp, о udp уже не мечтаем, и давно.


        1. nApoBo3
          30.10.2019 00:45

          В 7 udp добавили.


          1. MarvinD
            30.10.2019 02:06

            Дорогой мой человек! В который раз убеждаюсь, что в комментариях на хабре пользы часто больше, чем в статье! Хоть и бета еще 7-ка, но beta != null.


          1. lamer84
            30.10.2019 19:32

            Уже 7 есть?! Ну наконец-то, разродились! Пусть бета, но круто же!


  1. Mur81
    29.10.2019 19:10
    +1

    Всё что нужно знать о защите от этой уязвимости это то, что вчера вышла ROS 6.45.7 где среди прочего:
    !) package — accept only packages with original filenames (CVE-2019-3976);
    !) package — improved package signature verification (CVE-2019-3977);
    !) security — fixed improper handling of DNS responses (CVE-2019-3978, CVE-2019-3979);

    PS И да, открыл напрямую WinBox наружу — жди что тебя поимеют.
    PPS При этом конечно надо понимать, что и внутренняя сеть не всегда 100% доверенная.


    1. zlo1
      29.10.2019 22:20
      +1

      … жди что тебя поимеют..

      тысячи устройств «изнасилованных» более года назад, продолжают «радовать» публичными проксями (socks4 на порту 4145)


  1. DrMefistO
    29.10.2019 19:28

    Переводить переменные в питоне на русские — сильно!


    1. LukaSafonov Автор
      29.10.2019 19:30

      My bad, fixed :)


      1. Mur81
        29.10.2019 19:36

        Ни номеров CVE, ни информации о том, что уязвимость закрыта, ни нормального совета по защите.
        И я уже молчу, что на КДПВ изображён роутер TP-Link.


        1. GuessWho
          30.10.2019 11:50

          CVE-2019-3978, CVE-2019-3979 как я понял, в 6.45.7 закрыли


          1. Mur81
            30.10.2019 11:55

            Там целая комбинация из 4-х уязвимостей. Отравление кеша и обход проверки подписи пакетов (либо вообще её там не было — проверки).
            См. мой вчерашний комент.


  1. justhabrauser
    29.10.2019 23:03

    "!) security — fixed improper handling of DNS responses (CVE-2019-3978, CVE-2019-3979);"
    Уже исправлено.
    А шуму-то, шуму… Хайп — наше всё? :-)


  1. slashd
    29.10.2019 23:06

    А каким образом происходит отравление DNS-кэша?


    1. Chupaka
      30.10.2019 00:14

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


      1. Chupakabra303
        30.10.2019 08:49

        Где это запрос делается? На сторонней машине или в консоле mikrotik?
        Я так понимаю это только при отключеной опции remote requests происходит.


        1. Chupaka
          30.10.2019 10:17

          Запрос делается на самом роутере через открытый порт WinBox без аутентификации, опция Allow remote requests ни на что не влияет.


          1. Chupakabra303
            30.10.2019 11:43

            Не совсем понял. Это выполняется часть api протокола связи между ПК и Winbox, не требующая аутентификации? Вот winbox_dns_request — это что вообще такое?


            1. Mur81
              30.10.2019 12:07
              +1

              Как я понял — winbox_dns_request какая-то штука, которая позволяла резолвнуть домен указав при этом DNS-сервер через который резолвить. И именно извне (а не с консоли устройства) через порт винбокса и не проходя авторизацию. И даже при выключенных внешних DNS запросах.
              Как это работает хорошо видно на видео.
              Номера CVE известны. Если нужны подробности можно почитать описание.


          1. Baralgin380
            30.10.2019 11:43

            Т.е. если у меня в конфиге сервисов на винбокс повешены трастед нетворкс, то мне такое не грозит?


            1. Mur81
              30.10.2019 12:02

              Лучше это всё же делать файрволом, а не через available from в сервисах.
              И даже если у нас WinBox не торчит наружу, то надо понимать, что внутренняя сеть тоже не всегда доверенная. А в более общем смысле у нас может вообще не быть «внешних» и «внутренних» сетей. Поэтому уповать на какую-то доверенность не стоит.
              А вообще набор уязвимостей, используемый в этой атаке, уже закрыт в последней прошивке. Всегда обновляйтесь и будем вам счастье. Загрузчик кстати тоже не забывайте обновлять при этом.


              1. Baralgin380
                30.10.2019 12:13

                так и есть — стоит ссr-1036 и по сути там нет внутренней и внешней сети, да и во внутренней «кулибиных» хватает. А почему лучше фаерволом, а не в сервисах?


                1. Mur81
                  30.10.2019 12:42

                  Я вот прям железные аргументы не приведу. Вообще про это говорили на обучении, а вот чем мотивировали как-то подзабыл.
                  Но от себя могу сказать так:
                  Во-первых так советует сам MikroTik («As usual, we recommend to protect your router administration interface with VPN and firewall.»).
                  Во-вторых иметь всю конфигурацию в одном месте (т.е. в файрволе) это банально удобнее. Так файрвол открыл и всё перед глазами. А если в сервисах ограничение настроил, то скажем про это можно банально забыть. И если потом что-то поменяется, то может получится неприятный сюрприз.
                  В-третьих firewall filter банально раньше по traffic flow. Зачем нам не нужный трафик пускать дальше по цепочке аж до локальных процессов?


                1. zuek
                  01.11.2019 11:07

                  А почему лучше фаерволом, а не в сервисах?

                  Например, недавно здесь была статья, в которой упоминалось, что некоторые роутеры настроены отвечать на некоторые запросы только в "домашнююю" сеть… но для IPv6 такое ограничение для сервисов прописать забыли, и они бодро отвечают на внешнем интерфейсе. Думаю, можно придумать и иные сценарии...


              1. DaemonGloom
                30.10.2019 12:19

                С надеждами на файрволл надо быть аккуратнее, потому что он работает на L3, а winbox-mac живёт уровнем ниже. У микротика уже были моменты, когда часть вещей не блокировалась файрволлом, поскольку обрабатывалась до него (dhcp точно работал|работает так).


                1. Mur81
                  30.10.2019 12:32

                  Это да. Но в данном случае available from address всё равно ведь на L3 работает.


            1. Chupaka
              30.10.2019 12:41

              Да, Trusted Networks обрывают соединение сразу же, запросы делать нельзя, поэтому обсуждаемый эксплойт не сработает.


        1. FpcFrag
          30.10.2019 14:51

          Обычно отравление хеша не требует запроса, достаточно просто прислать ответ на запрос (даже при отсутствии запроса) и не всегда даже надо соблюсти правильный IP отправителя ответа.
          В редких случаях, когда алгоритм умеет проверять наличие запроса и соответствие характеристик при обработке ответа (реализации можно пересчитать по пальцам одной руки электрика), злоумышленникам приходится постоянно бомбить ответами в надежде что когда-нибудь произойдёт запрос и их ответ придёт раньше чем легитимный.

          Как от этого уберечься?
          Использовать (где это возможно) TCP транспорт для DNS запросов идущих по публичным и прочим не доверенным сетям. UDP при этом просто запрещать на уровне МСЭ.

          Сейчас модно делать всякие DoH и DoT, они тоже от этого защищают, но там угрозы иного типа: вы полностью отдаёте паттерн своего поведения не очень чистоплотным провайдерам (как и в случае прописывания всех 4-х восьмёрок или единиц).


  1. sigmatik
    30.10.2019 16:50

    Тот самый случай когда заголовок поста об уязвимости громче самой уязвимости. Любой адекватный админ никогда не станет выставлять встроенный dns север за пределы локальной сети. И уж тем более он не станет светить винбокс. Так что вместо рекомендации перейти на ssh имхо можно было посоветовать просто дождаться исправления и обновиться…


  1. Luxo
    30.10.2019 18:30

    Оо, а вот и мой шанс вернуть под своё управление «потерянный» из-за предыдущей уязвимости роутер без физического сброса до заводских установок.
    Кстати, вот подумал. В настройках микротика по-моему есть галочка, которая может не позволить его сбросить даже при физическом доступе. Бяда.


  1. mikeus
    30.10.2019 19:55

    У меня было сделано давно, что уже забыл, и сейчас по случаю этой заметки (спасибо, Лука) пришлось освежить следующие моменты: для того чтобы убрать доступ по MAC-Telnet и MAC-Winbox с WAN-интерфейсов необходимо удалить (или сделать disable) соответствующие интерфейсы из списков mactel и mac-winbox — путь к команде: /interface list member. Также можно ограничить IP-префиксы с которых доступны различные сервисные службы Микротика — путь к команде: /ip service.


  1. shUUm
    30.10.2019 23:01

    What's new in 6.45.7 (2019-Oct-24 08:44):

    MAJOR CHANGES IN v6.45.7:
    — !) lora — added support for LoRaWAN low-power wide-area network technology for MIPSBE, MMIPS and ARM;
    !) package — accept only packages with original filenames (CVE-2019-3976);
    !) package — improved package signature verification (CVE-2019-3977);
    !) security — fixed improper handling of DNS responses (CVE-2019-3978, CVE-2019-3979);


  1. Sergey-S-Kovalev
    31.10.2019 10:01

    Я вот смотрю видосы с эксплуатацией уязвимости и не могу понять, нафига её использовать, если там все заходят под админом через винбокс?
    1. Актуальных дыр в винбоксе на текущий момент нет.
    2. Открытый доступ в винбокс в инет без минимальной фильтрации по ип и/или впн — нормальные человеки не делают.
    3. Смешно бояться что оттрекается изменение конфига, те кто делает алерты на изменения конфига всегда контролят и входы на оборудование.
    3. Галку раздавать днс без прав админа не поставить, если заходить под readonly учеткой.
    4. С клиентской тачки запросами кэш на микротике не отравить.

    Вектор атаки только один: имея доступ к вышестоящему днс серверу для уязвимого микротика — там подменять ип сервера обновлений, что типа «отравит» кэш днс и свято верить что на микротике произойдет автоапгрейд пакетов, что не делается по умолчанию.

    По факту уязвимость только в том, что не проводится корректная проверка подписи пакетов.

    Чего то многовато ЕСЛИ что бы выполнить атаку и сделать downgrade, что бы захватить доступ.

    Чего хайпим то? Или я упустил чтото?


    1. Mur81
      31.10.2019 11:20

      Упустил, и много чего. Выше в коментах всё написано. Если сильно вкратце — достаточно доступа к порту WinBox, всё.
      Уязвимости уже закрыты.
      Но в одном Вы совершенно правы — слишком заморочено, что бы стать массовой проблемой. Как раз именно потому, что нужно каком-то образом инициировать обновление пакетов в нужный момент.


      1. Luxo
        31.10.2019 11:44

        Насколько я понял, это не совсем так. Отравить кеш может неавторизованный пользователь. А вот провести апгрейд/даунгрейд — только авторизированный.


        1. Mur81
          31.10.2019 11:48

          Совершенно верно. В тот момент когда Вы это писали я расширил свой комментарий, добравшись до компа (предыдущий писал по быстрому с мобилы).


        1. Mur81
          31.10.2019 11:57

          Тут просто в самом изначальном посте всё смешалось.
          На самом-то деле тут сразу несколько уязвимостей было, позволяющих отравить кеш не авторизованному пользователю и позволяющих заливать неподписанные пакеты.
          Вектор атаки показанный на видео в жизни конечно маловероятен. Разве что ещё социальную инженерию сюда подключить. Типа «Алло, это сисадмин? Я ваш кеш отравил, накатите плиз свежую прошивочку по быстрому!».
          Но и по отдельности эти уязвимости тоже мало приятны.


  1. whiteodmin
    31.10.2019 17:54

    Все равно на уязвимость, по сравнению с апрельсой 0day 2018 это меркнет, но если хотябы 1% всех 'горе владельцев' уберут эту чертову галочу с allow remote request уже будет отлично.


  1. HiroX
    01.11.2019 01:15

    Толи я дурак толи лыжи не едут.

    Теперь если с помощью Winbox поискать example.com то можно увидеть что DNS-кеш маршрутизатора отравлен.

    Ок, допустим. Для клиентов сети нехорошо будет, но в целом не смертельно с учетом https и т.д.
    Атакующий воссоздает логику сервера обновлений, включая changelog и заставляет RouterOS воспринять устаревшую (уязвимую) версию как актуальную.

    Допустим да, сможет обмануть контроль версий микротика, но
    произвести даунгрейд или бэкпортирование версии RouterOS.

    С какой стати микротик будет сам «обновляться»? Такого функционала никогда там не было. Чтобы «обновить» прошивку нужно залогиниться и ручками прописать «update» или кликнуть по одноименной кнопке.


    1. loki82
      01.11.2019 10:24

      Не помню точно. По моему с 6.43 появился. System — Auto upgrade.
      Upd. Оказывает обязательно выполнить или скрипт или команду.


    1. Andrusha
      01.11.2019 13:14

      Прямо встроенного выделенной функцией нету, но есть планировщик и скрипты:
      /system scheduler
      add interval=1d name=autoupdate on-event="/system package update\r\
      \ncheck-for-updates once\r\
      \n:delay 1s;\r\
      \n:if ( [get status] = \"New version is available\") do={ install }" policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive start-time=04:00:00
      /system routerboard settings
      set auto-upgrade=yes silent-boot=yes

      Но в местах, где нужна работа 24/7, я бы всё-таки вручную обновлял — на случай, если выпустят кривое обновление.


      1. loki82
        01.11.2019 14:14

        Так там же можно указать с какого источника брать обнову. Оттестил залил. И все микроты сами растащили все.


      1. AcidVenom
        01.11.2019 14:22

        Для обновления бутлодера вы предлагаете дождаться следующей перезагрузки?


  1. q12305
    01.11.2019 09:18

    Так можно же не обновляться с кнопки, а скачать прошивку и закинуть на микрот руками