Устройства компании Mikrotik стали широко распространены из-за своей цены по отношению к функционалу. Но и ошибки в программном обеспечении никто не отменял. И на этот раз вылез серьёзный баг.


25 марта один из пользователей форума Mikrotik сообщил об обнаружении подозрительной активности маршрутизаторов mikrotik с применением портов telnet (TCP port 23), TR-069 (TCP port 7547) и WINBOX (TCP 8291).


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


Несмотря на то, что компания довольно оперативно выпустила bugfix, устройства, подверженные уязвимости в сети исчисляются тысячами.




Всем пользователям RouterOS рекомендую обновиться минимум до версий 6.40.8 [bugfix] или 6.42.1 [current]

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


Ввиду последних событий я предлагаю всем пользователям устройств Mikrotik и CHR произвести хотя бы минимальную настройку.


Минимальные настройки безопасности


Анализируя устройства с багом, я обратил внимание, что практически все пренебрегают настройками фаервола, несмотря на то, что это самый эффективный инструмент защиты Вашей сетевой инфраструктуры. И 90% устройств имеют учётную запись "admin" с полными правами. Прям мечта для брудфорсеров.


В отношении защиты RouterOS сделайте несколько несложных шагов, чтобы обеспечить минимальную безопасность:


  1. Убедитесь, что у Вас последняя прошивка.


  2. Не стоит надеяться на отсутствие багов в новой прошивке и настройте фаервол:
    2.1. В цепочке INPUT доступ к устройству разрешён, только с доверительных ip адресов. Например, диапазон домашней сети или ip адресами сетевых администраторов.
    Обратите внимание на то, что цепочка INPUT применяется только для пакетов, адресованных непосредственно этому маршрутизатору. Транзитные пакеты относятся к цепочке FORWARD.
    2.2. Дропайте все пакеты, которые не соответствуют разрешённым.
    2.3. В случае, если Вам требуется периодически доступ с динамических адресов, то используйте "port knocking", чтобы добавить Ваш ip в разрешённые на определённое время.


  3. Выключите все сервисы, которые Вы не используете (api,ssh,telnet etc.)


  4. После настройки фаервола и обновления прошивки смените пароль.

Если вы используете имя учётки "admin" так же создайте свою учётку, например, "Vasya". Зайдите под ней, проверьте права доступа и заблокируйте "админа".


FireWall


С использование терминала.
Создайте список адресов, которым будет разрешено подключаться к маршрутизатору
/ip firewall address-list
add address=192.168.1.0/24 list=allow-ip
add address=192.168.88.10/32 list=allow-ip


Добавляем правило, которое разрешает все действия с этих адресов


/ip firewall filter
add action=accept chain=input comment="Allow Address List" src-address-list=allow-ip


В случае если нужен доступ с неизвестных адресов я делаю ожидание icmp пакета (ping) определённого размера. Если такой пакет прилетает, то адрес источника добавляется в список allow-ip со временем в 1 час. При желании можно сделать каскад из таких пакетов.


/ip firewall filter
add action=add-src-to-address-list address-list=allow-ip address-list-timeout=1h chain=input packet-size=783 protocol=icmp


Обратие внимание на размер пакета packet-size 783 байт. Но при пинговании Вы должны указывать на 28 байт меньше. В данном случае пинг из windows:


ping -l 755 myhostname.domain


Запрещаем доступ ко всем портам, которые не разрешены выше:


/ip firewall filter add action=drop chain=input


Сервисы,


которые Вы не используете тоже надо выключить ибо это лишние точки отказа.
/ip service
set api disabled=yes
set api-ssl disabled=yes
и так далее.


Тоже самое при помощи винбокс.


Разрешаем в нашем адрес листе.












Правило добавления в адрес лист по пингу







Правило запрета всего и вся ставится самым последним





То есть это должно выглядеть так



Сервисы настраиваем здесь





Пользователей добавить и удалить "admin", а также сменить пароль можно здесь





Заключение


Очень надеюсь, что моя краткая инструкция поможет вашему устройству не попасть под контроль любой ботнет сети, в том числе Hajim.

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


  1. AVZlobin
    21.05.2018 21:31

    Если управляемых устройств в сети больше 1, то имеет смысл создать обособленный влан только для администрирования устройств.


    1. LMonoceros Автор
      22.05.2018 02:45

      Здесь приведён минимальный вариант защиты.
      Но, к сожалению, большинство пользователей mikrotik делают большие глаза, когда слышат слово vlan.


      1. achekalin
        22.05.2018 07:23

        VLAN (аппаратный) на MT всегда был некой фичей, которая была «не как у всех» (см., напр., это и это, а потом 1, 2). Точнее, она была сделана, как «понятнее железу» (свичовым чипам; притом, что в разных роутерах он стоял разный, и фичи были чуть разные; если же без свич-чипа, то все просто, пилим интерфейс vlan, и вперед, но часто он будет обрабатываться процом, что совсем «небогато»), а не по аналогии с каким-о подходом из цисок, длинков и прочих свичей, часто встречающихся в природе.

        Сейчас, когда MT занялся производством свичей как таковых, этому вопросу стали уделять время, описывать тему в wiki, да и броджи новые «поумнее» стали, так что, надеюсь, скоро не нужно будет ломать мозг, разбираясь в понятной интуитивно теме.


  1. osipov_dv
    21.05.2018 21:32

    а чем смысл удалять пользователя admin и добавлять еще раз его руками?


    1. willyd
      22.05.2018 01:22

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


    1. GDragon
      22.05.2018 02:39

      Не его, любое другое название администратора.
      т.е. создаём администратора Wasya
      Заходим под ним, проверяем права.
      И отрубаем/удаляем admin.
      (Именно в таком порядке, то что в статье — высокий шанс выстрелить себе в ногу).

      Зачем это нужно? Потому что admin — самая популярная цель для подбора пароля. А так надо ещё логин подбирать :)


      1. LMonoceros Автор
        22.05.2018 02:51

        Заходим под ним, проверяем права.
        И отрубаем/удаляем admin.

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


      1. zikasak
        22.05.2018 07:04

        а почему просто не переименовать?


        1. GDragon
          22.05.2018 13:18

          Раньше внутренний IDшник сохранялся, как сейчас — не знаю.


    1. POPSuL
      22.05.2018 03:29

      Действительно, смысла никакого нет.
      Есть эксплоит который через эту уязвимость позволяет получить логин и пароль.
      Так что security through obscurity тут ничем не поможет...


      1. willyd
        22.05.2018 06:26

        Причем тут security through obscurity? Это скорее общее правило, как и все остальные описанные в данной статье.


        1. mammuthus
          22.05.2018 07:52

          Смена имени админской учетки это именно security through obscurity, независимо от того, является это общим правилом или нет


          1. willyd
            22.05.2018 08:33

            Вопрос не в том, что это не security through obscurity. А в том, что это — стандартные правила для первичной защиты любой системы: открыть доступ только тем кому нужно, избегать использование стандартных системных учетных записей, повесить какой-нибудь fail2ban для затруднения брутфорса.
            В данном конкретном случае, если порт открыт, то уже ничто не спасет, но если вы его открыли только для доверенных адресов, то возможность использования уязвимости падает многократно.


            1. osipov_dv
              22.05.2018 09:10

              Гораздо полезнее было-б указать пример грейлога, насколько я знаю в микротике это делается внутренними средствами. и можно ничего не переименовывать.


            1. POPSuL
              22.05.2018 12:38

              Я имел ввиду только тот момент, который касается смена имени пользователя admin.
              То что нужно устанавливать всякие сложные пароли, port knocking, fail2ban, обычную фильтрацию это вроде и так ясно.


  1. paxlo
    21.05.2018 21:49
    -4

    Всегда отрубаю и закрываю все сервисы кроме SSH. Авторизация по ключу длиной 8192. Winbox непонятная проприетарщина.


    1. V1tol
      22.05.2018 01:59

      Winbox непонятная проприетарщина.

      Которая написана производителем роутера для своей проприетарной прошивки. Где здесь проблема?


      1. dinoth
        22.05.2018 02:17
        -2

        Вероятно в том, что значительная часть RouterOS — это open source продукты, включая ssh.
        Доверия им больше, чем winbox, который всегда был их внутренним продуктом.


      1. paxlo
        22.05.2018 02:59

        Типичная проблема этой закрытой проприетарщины описана в статье выше.


  1. webviktor
    21.05.2018 21:49
    +2

    На данный момент последняя — 6.42.2 [current]


    1. LMonoceros Автор
      22.05.2018 02:43

      обновиться минимум до версий 6.42.1

      Баг исправлен именно в этой версии.
      А сколько версий выйдет после выхода статьи — мне не известно.


  1. ser1al
    21.05.2018 21:49
    +1

    А в чем собственно уязвимость? Был ли зарегистрирован CVE?
    Интересно узнать в общих чертах, без примеров естественно.


  1. ClearAirTurbulence
    21.05.2018 23:35
    +1

    Кажется логичным ещё сменить дефолтные порты, вдобавок к перечисленному?


    1. TimsTims
      22.05.2018 10:09

      +1
      Смена дефолтного порта решает 99% попыток дефолтного брутфорса на 8291.


  1. SadSid
    22.05.2018 11:24

    Так CVE был или нет? Тоже хотелось бы почитать…


  1. bopoh13
    22.05.2018 22:06

    А что, если фильтровать входящий трафик на мосту по MAC-у?
    /interface bridge filter
      add action=drop chain=input comment="drop DE:AD:BE:AF:DE:AD" in-bridge=\
      bridge-local src-mac-address=DE:AD:00:00:00:00/FF:FF:00:00:00:00 log-prefix=DEAD log=yes


    1. LMonoceros Автор
      23.05.2018 03:11

      С интернета у вас прилетают МАКи?
      Актуально только внутри брудкаст домена.


      1. bopoh13
        23.05.2018 15:20
        +1

        Понял. Только внутри коммутатора (


  1. avacha
    23.05.2018 02:58

    Как верно заметили, этой уязвимости без малого месяц. Как капитан очевидность, отмечу, что сложность пароля — равно как и переименование/заведение другой учетки — не спасает.

    62.183.*.*
    support@hoi4~gmpK9
    skrimer@SdFk1399SdFk


    1. LMonoceros Автор
      23.05.2018 02:59

      Поэтому перед сменой учётки надо настроить фаервол и сменить прошивку.


  1. Eagle_NN
    23.05.2018 03:00

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


    1. LMonoceros Автор
      23.05.2018 03:10

      Скажите сценарий по которому с этими настройками ломанут микротик из вне?
      Заметьте, что я не говорю о защите сети за микротиком.
      Только сам микротик.


  1. LAZst
    23.05.2018 03:01

    ИМХО неполохой способ защиты порта winbox:
    add action=drop chain=input dst-port=8291 protocol=tcp src-address-list=winbox_blacklist
    add action=add-src-to-address-list address-list=winbox_blacklist address-list-timeout=1w3d chain=input connection-state=new dst-port=8291 protocol=tcp src-address-list=winbox_stage3
    add action=add-src-to-address-list address-list=winbox_stage3 address-list-timeout=1m chain=input connection-state=new dst-port=8291 protocol=tcp src-address-list=winbox_stage2
    add action=add-src-to-address-list address-list=winbox_stage2 address-list-timeout=1m chain=input connection-state=new dst-port=8291 protocol=tcp src-address-list=winbox_stage1
    add action=add-src-to-address-list address-list=winbox_stage1 address-list-timeout=1m chain=input connection-state=new dst-port=8291 protocol=tcp
    add action=accept chain=input-WAN comment="Open MNGT ports" dst-port=8291 protocol=tcp


    1. LMonoceros Автор
      23.05.2018 03:06

      Не вижу смысла в файл-ту-бан, т.к. он просто забивает адрес лист ненужными ip.
      А если ботнет начнёт ддосить какой нибудь хап лайт? Каждый бот обратиться по три раза к твоему роутеру и у тебя кончится память.


  1. enzain
    23.05.2018 17:27
    +1

    И не слова о том, что так же желательно было б настроить IPv6 файрвол :)


    1. LMonoceros Автор
      24.05.2018 02:45

      Да. Верно. Ipv6 фаервол тоже надо настраивать.
      Правила такие же.

      Но обнаружить микротик в сети ipv6 в разы сложнее. Да и на большинстве РОС ipv6 модуль вообще не установлен как на том, с которого я снимал скриншот.


      1. enzain
        24.05.2018 11:13

        ну у провайдеров с IPoE — достаточно мультикаст адрес пропинговать и все девайсы сами откликнутся, особо и не надо искать :)