Устройства компании 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 сделайте несколько несложных шагов, чтобы обеспечить минимальную безопасность:
Убедитесь, что у Вас последняя прошивка.
Не стоит надеяться на отсутствие багов в новой прошивке и настройте фаервол:
2.1. В цепочке INPUT доступ к устройству разрешён, только с доверительных ip адресов. Например, диапазон домашней сети или ip адресами сетевых администраторов.
Обратите внимание на то, что цепочка INPUT применяется только для пакетов, адресованных непосредственно этому маршрутизатору. Транзитные пакеты относятся к цепочке FORWARD.
2.2. Дропайте все пакеты, которые не соответствуют разрешённым.
2.3. В случае, если Вам требуется периодически доступ с динамических адресов, то используйте "port knocking", чтобы добавить Ваш ip в разрешённые на определённое время.
Выключите все сервисы, которые Вы не используете (api,ssh,telnet etc.)
- После настройки фаервола и обновления прошивки смените пароль.
Если вы используете имя учётки "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)
osipov_dv
21.05.2018 21:32а чем смысл удалять пользователя admin и добавлять еще раз его руками?
willyd
22.05.2018 01:22Дополнительная защита, если вдруг окажется открыт порт, с большой вероятностью будут подбирать пароль для юзеров root и admin.
GDragon
22.05.2018 02:39Не его, любое другое название администратора.
т.е. создаём администратора Wasya
Заходим под ним, проверяем права.
И отрубаем/удаляем admin.
(Именно в таком порядке, то что в статье — высокий шанс выстрелить себе в ногу).
Зачем это нужно? Потому что admin — самая популярная цель для подбора пароля. А так надо ещё логин подбирать :)LMonoceros Автор
22.05.2018 02:51Заходим под ним, проверяем права.
И отрубаем/удаляем admin.
Как бы это и подразумевается.
Но я дописал в статье, так как люди могут и правда воспринять буквально.
POPSuL
22.05.2018 03:29Действительно, смысла никакого нет.
Есть эксплоит который через эту уязвимость позволяет получить логин и пароль.
Так что security through obscurity тут ничем не поможет...willyd
22.05.2018 06:26Причем тут security through obscurity? Это скорее общее правило, как и все остальные описанные в данной статье.
mammuthus
22.05.2018 07:52Смена имени админской учетки это именно security through obscurity, независимо от того, является это общим правилом или нет
willyd
22.05.2018 08:33Вопрос не в том, что это не security through obscurity. А в том, что это — стандартные правила для первичной защиты любой системы: открыть доступ только тем кому нужно, избегать использование стандартных системных учетных записей, повесить какой-нибудь fail2ban для затруднения брутфорса.
В данном конкретном случае, если порт открыт, то уже ничто не спасет, но если вы его открыли только для доверенных адресов, то возможность использования уязвимости падает многократно.osipov_dv
22.05.2018 09:10Гораздо полезнее было-б указать пример грейлога, насколько я знаю в микротике это делается внутренними средствами. и можно ничего не переименовывать.
POPSuL
22.05.2018 12:38Я имел ввиду только тот момент, который касается смена имени пользователя admin.
То что нужно устанавливать всякие сложные пароли, port knocking, fail2ban, обычную фильтрацию это вроде и так ясно.
paxlo
21.05.2018 21:49-4Всегда отрубаю и закрываю все сервисы кроме SSH. Авторизация по ключу длиной 8192. Winbox непонятная проприетарщина.
V1tol
22.05.2018 01:59Winbox непонятная проприетарщина.
Которая написана производителем роутера для своей проприетарной прошивки. Где здесь проблема?dinoth
22.05.2018 02:17-2Вероятно в том, что значительная часть RouterOS — это open source продукты, включая ssh.
Доверия им больше, чем winbox, который всегда был их внутренним продуктом.
webviktor
21.05.2018 21:49+2На данный момент последняя — 6.42.2 [current]
LMonoceros Автор
22.05.2018 02:43обновиться минимум до версий 6.42.1
Баг исправлен именно в этой версии.
А сколько версий выйдет после выхода статьи — мне не известно.
ser1al
21.05.2018 21:49+1А в чем собственно уязвимость? Был ли зарегистрирован CVE?
Интересно узнать в общих чертах, без примеров естественно.
ClearAirTurbulence
21.05.2018 23:35+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=yesLMonoceros Автор
23.05.2018 03:11С интернета у вас прилетают МАКи?
Актуально только внутри брудкаст домена.
avacha
23.05.2018 02:58Как верно заметили, этой уязвимости без малого месяц. Как капитан очевидность, отмечу, что сложность пароля — равно как и переименование/заведение другой учетки — не спасает.
62.183.*.*
support@hoi4~gmpK9
skrimer@SdFk1399SdFk
LMonoceros Автор
23.05.2018 02:59Поэтому перед сменой учётки надо настроить фаервол и сменить прошивку.
Eagle_NN
23.05.2018 03:00В данной статье количество настроек сильно меньше необходимого минимума для безопасного использования роутера. При работе с микротиком, в отличии от большинства домашних решений, обязательно необходимо корректно настроить firewall.
Еще до появления этой уязвимости я писал статью как правильно настроить роутер с самого начала и до продвинутой настройка firewall. Однако администрация ресурса решила что большая часть информации тонким слоем по разным статьям уже раскидана. Так что к публикации не приняли.
Желающим могу прислать инструкцию по настройке в личку. Остальные могут прочесть публикации по настройке микротика и сами разобраться как его настраивать.LMonoceros Автор
23.05.2018 03:10Скажите сценарий по которому с этими настройками ломанут микротик из вне?
Заметьте, что я не говорю о защите сети за микротиком.
Только сам микротик.
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=tcpLMonoceros Автор
23.05.2018 03:06Не вижу смысла в файл-ту-бан, т.к. он просто забивает адрес лист ненужными ip.
А если ботнет начнёт ддосить какой нибудь хап лайт? Каждый бот обратиться по три раза к твоему роутеру и у тебя кончится память.
enzain
23.05.2018 17:27+1И не слова о том, что так же желательно было б настроить IPv6 файрвол :)
LMonoceros Автор
24.05.2018 02:45Да. Верно. Ipv6 фаервол тоже надо настраивать.
Правила такие же.
Но обнаружить микротик в сети ipv6 в разы сложнее. Да и на большинстве РОС ipv6 модуль вообще не установлен как на том, с которого я снимал скриншот.enzain
24.05.2018 11:13ну у провайдеров с IPoE — достаточно мультикаст адрес пропинговать и все девайсы сами откликнутся, особо и не надо искать :)
AVZlobin
Если управляемых устройств в сети больше 1, то имеет смысл создать обособленный влан только для администрирования устройств.
LMonoceros Автор
Здесь приведён минимальный вариант защиты.
Но, к сожалению, большинство пользователей mikrotik делают большие глаза, когда слышат слово vlan.
achekalin
VLAN (аппаратный) на MT всегда был некой фичей, которая была «не как у всех» (см., напр., это и это, а потом 1, 2). Точнее, она была сделана, как «понятнее железу» (свичовым чипам; притом, что в разных роутерах он стоял разный, и фичи были чуть разные; если же без свич-чипа, то все просто, пилим интерфейс vlan, и вперед, но часто он будет обрабатываться процом, что совсем «небогато»), а не по аналогии с каким-о подходом из цисок, длинков и прочих свичей, часто встречающихся в природе.
Сейчас, когда MT занялся производством свичей как таковых, этому вопросу стали уделять время, описывать тему в wiki, да и броджи новые «поумнее» стали, так что, надеюсь, скоро не нужно будет ломать мозг, разбираясь в понятной интуитивно теме.