Содержание
Ошибки в прошивках популярных роутеров обнаруживают регулярно. Однако просто найти баг недостаточно, его еще нужно обезвредить. Сегодня мы поговорим о том, как обезопасить себя от уже известных уязвимостей в RouterOS и защититься от тех, которые выявят в будущем.
INFO
Подробный рассказ об известных на сегодняшний день багах в RouterOS ты можешь найти в статье «Опасный MikroTik. Разбираемся в уязвимостях популярных роутеров».
Обновления
Несмотря на страшные описания и действительно большую опасность, которую таят в себе уязвимости, стоит отдать должное разработчикам MikroTik: они в кратчайшие сроки выпускают патчи. Многие дыры закрываются еще до их утечки в паблик, оставшиеся — в течение дня-двух. Поэтому первое, на что нужно обратить внимание, — актуальность версии RouterOS на твоем девайсе. Автоматически система не обновляется, поэтому за появлением новых версий нужно следить вручную. В разделе Software на сайте MikroTik лежат актуальные версии операционной системы и отдельных пакетов. Простейший способ обновиться: System → Packages → Check For Updates → Download and Install.
Те же действия можно выполнить, набрав в консольной строке роутера следующую команду: /system package update install
.
Рекомендуем почитать:
Xakep #264. NFT
Доступны четыре ветки разработки: Long-term, Stable, Testing и Development. Для критичных систем рекомендуется ставить Long-term. Железка, которая может полежать пару минут в процессе обновления, достойна Stable, остальные ветки оставь для экспериментов на домашнем роутере. Перед обновлением внимательно читай Changelog. Иногда полностью перерабатываются некоторые части ОС, после чего они не способны работать со старой конфигурацией (так было, например, с bridge в 6.41).
Если ты счастливый владелец нескольких роутеров MikroTik, помни, что массовый апгрейд стандартными средствами невозможен, но можно воспользоваться The Dude или самописными скриптами.
Packages
Следующее, за что можно взяться для повышения безопасности, — отключить ненужную функциональность. Не используешь IPv6 — отключай, не нужен Wi-Fi — отключи весь модуль, отвечающий за него (все в том же меню System → Packages). Обрати внимание, что полностью удалить из системы можно только дополнительные пакеты, то есть те, что не входят в routeros-platformname.
Службы
Все угрозы для MikroTik работают, только если админ заранее не позаботился о безопасности. При элементарных настройках служб и файрвола роутер проработает годы без обновлений. В меню IP → Services отключи ненужные службы. Рекомендую открывать только SSH и Winbox с определенных адресов, остальное — disable. Того же самого эффекта можно добиться командой /ip service disable ftp
.
Также проверь, не включены ли службы IP: Web Proxy, IP → UPnP, IP → Socks. Если они включены без твоего ведома, у меня для тебя плохие новости. Вот команды для отключения этих служб из командной консоли: /ip proxy
, /ip upnp
, /ip socks
.
RouterOS имеет работающий по протоколу MNDP механизм обнаружения соседей. Знать соседей в своей сети — отличная идея, но вот светить моделью роутера и версией софта в окружающее пространство вряд ли хорошо с точки зрения безопасности.
Функция обнаружения соседей, как и многие другие фичи в RouterOS, использует в работе списки интерфейсов. В дефолтной конфигурации уже есть списки LAN, WAN, dynamic, all и none, но можно создать и свои списки со сложной структурой. Допускаются вложенные списки (include) и исключения (exclude). Настраиваются они в меню Interface → Interface Lists. Сначала создаем сам список (кнопка Lists), затем в основном меню добавляем в него интерфейсы. Команда для работы со списками выглядит так: /interface list
.
INFO
В список dynamic
входят динамические интерфейсы, такие как VPN-интерфейсы, PPPoE. None означает «ни одного», all — «все». В дефолтной конфигурации «домашних» роутеров в списке WAN будет ether1
, в LAN — от ether2
до ether5
, все Wireless-интерфейсы и bridge
.
Как известно, подключиться к RouterOS можно не только по IP-адресу, но и по MAC. Также работает ping по MAC-адресу. За работу этих служб отвечает Tools → MAC Server. Он тоже использует в настройках списки интерфейсов. Стоит выделить отдельную группу интерфейсов под управление, а затем разрешить обнаружение соседей и MAC Server только ей.
Не отключай MAC Winbox и MAC Telnet совсем: однажды наступит момент, когда ты сломаешь себе доступ по Winbox и нужно будет воспользоваться подключением по MAC, поэтому лучше держать такой бэкдор для себя. К тому же MAC Telnet полезен, когда в сети появляется новая железка, у которой еще нет IP-адреса. Тогда ее удобно настраивать из консоли соседнего роутера.
WWW
На сайте производителя представлен полный список доступных сервисов. Можно пройтись по нему и проверить, не включено ли у тебя что-то лишнее.
Дефолтная конфигурация RouterOS с описанными выше дополнениями повысит безопасность роутера. Вообще, разработчики постарались сделать Default Configuration максимально универсальной и учли многие нюансы безопасности. Дальше мы рассмотрим дополнительный харденинг RouterOS.
Пользователи и группы
Если ИТ-отдел в твоей компании большой, в нем наверняка есть разделение ролей и обязанностей. К примеру, сотруднику техподдержки ни к чему права на создание VPN-соединений или просмотр пароля Wi-Fi, в то время как сетевики, естественно, должны иметь к ним доступ. RouterOS имеет достаточно гибкий механизм распределения прав. Права назначаются в группах, затем в нужную группу добавляется юзер. Управление группами доступно в меню System → Users, а также с помощью команды /user group
.
Рассмотрим права групп подробнее:
- telnet, ssh, ftp, winbox, web, api, romon, dude, tikapp — понятны по названию. Разрешают юзеру подключаться по указанным протоколам;
- local — открывает доступ к роутеру через консоль. При отключении также заберет право открывать терминал внутри Winbox;
- reboot — право на перезагрузку;
- read, write — права на чтение или запись;
- sniff — права на исполнение встроенного аналога tcpdump (tools → sniffer);
- test — запуск инструментов траблшутинга (ping, traceroute, bandwidth-test, wireless scan, snooper);
- password — право менять собственный пароль;
- policy — право управлять учетными записями и группами.
Чувствительные данные
На группе настроек sensitive остановимся чуть подробнее. В RouterOS определены так называемые чувствительные данные. К ним относятся ключи Wi-Fi, IPSec, SNMP, пароли VPN-интерфейсов и серверов, пароли протоколов маршрутизации и другая информация, влияющая на безопасность.
В меню окна Winbox в разделе Settings есть флажок Hide Sensitive. Когда он включен, эта чувствительная информация закрыта звездочками и в терминале ее тоже не видно. Эдакая защита от разглашения паролей. С отключенной опцией Sensitive в настройках группы этот чекбокс не снимается, то есть право Sensitive разрешает пользователю видеть введенные пароли.
Port Knocking
Чуть выше мы говорили об ограничении доступа к управляющим службам роутера только с определенных адресов. Это очень важно: протокол Winbox далек от идеала и есть вероятность, что в нем еще будут находить дыры. Но часто приходится подсоединяться к роутеру из гостиниц или кафе, и невозможно предусмотреть все адреса, с которых подключишься.
Среди админов распространена техника Port Knocking. Изначально порт закрыт для всех. Но стоит снаружи выполнить какую-то последовательность действий, как для твоего IP открываются все порты для управления. Этот набор действий может быть очень сложным, и подобрать его нереально. Рассмотрим пример:
- изначально все порты управления закрыты для всех, кроме списка разрешенных;
- если на порт роутера 1234 попадает TCP-сегмент, затем два на порт 4321 и один на порт 5678, то адрес источника заносится в список разрешенных на сутки.
Реализовать эту последовательность действий поможет следующий скрипт.
/ip firewall filter add action=accept chain=input dst-port=22,8291 protocol=tcp src-address-list=mgmt_allow add action=drop chain=input dst-port=22,8291 protocol=tcp add action=add-src-to-address-list address-list=mgmt_stage1 address-list-timeout=1m chain=input connection-state=new dst-port=1234 protocol=tcp add action=add-src-to-address-list address-list=mgmt_stage2 address-list-timeout=1m chain=input connection-state=new dst-port=4321 protocol=tcp src-address-list=mgmt_stage1 add action=add-src-to-address-list address-list=mgmt_stage3 address-list-timeout=1m chain=input connection-state=new dst-port=4321 protocol=tcp src-address-list=mgmt_stage2 add action=add-src-to-address-list address-list=mgmt_allow address-list-timeout=1d chain=input connection-state=new dst-port=5678 protocol=tcp src-address-list=mgmt_stage3
Правила 3–6 (action=add-src-to-address-list
) выполняют описанную выше логику. Первое правило разрешает доступ к управлению роутером только адресам из списка mgmt_allow
, который заполняется на этапах 3–6. Второе правило запрещает доступ всем. Первые два правила вынесены наверх для того, чтобы избежать ненужного прохождения менеджмента трафика по четырем правилам с логикой и тем самым снизить нагрузку на CPU.
Но провернуть подобную операцию с Windows не так просто: из стандартного набора программ выпилили Telnet, а качать сторонний софт не всегда возможно. Зато любая ОС позволяет менять размер ICMP-пакета при пинге. Этим мы и воспользуемся. Изменим условия:
- изначально все порты управления закрыты для всех, кроме списка разрешенных;
- если на роутер попадает ICMP Request размером 345 байт, затем два размером 543 и один 678 байт, то адрес источника заносится в список разрешенных на сутки.
Для этого всего лишь поменяем предыдущие правила:
- Установим прокол ICMP.
- На вкладке Advanced зададим размер Packet Size.
INFO
Не забывай, что размер пакета, указанный в пинге, и размер пакета, долетевшего до роутера, — это разные значения. В Linux к ICMP прибавляется 28 байт заголовков, то есть, чтобы отправить пакет размером 345 байт, нужно в пинге указать размер 317. У Windows цифры другие — она по-своему считает заголовки.
Wireless
RouterOS поддерживает белые и черные списки Wi-Fi. Для этого есть список Wireless Access List. Просто добавь туда устройства, которые не имеют права подключаться к сети, а потом сними флажки Authentication и Forwarding. Еще для этих целей можно использовать команду /interface wireless access-list add
.
Описанный выше случай будет работать как Blacklist. Чтобы преобразовать его в Whitelist, нужно поставить указанные флажки и изменить тип работы интерфейса Wireless с помощью команды /interface wireless set 0 default-authentication=no
.
Флажок Authentication отвечает за аутентификацию клиентов. Если он установлен для определенного интерфейса, аутентификация разрешена всем, кроме тех устройств, которые перечислены в списке доступа без флажка. Если на интерфейсе флажок не установлен, то подключиться к сети могут лишь те, кто присутствует в списке доступа с флажком.
Настройка Forwarding отвечает за передачу данных между клиентами одной подсети. Обычно ее не стоит трогать, но, если ты строишь, к примеру, hotspot-сеть, клиенты которой будут ходить только во внешние сети (то есть внутреннее взаимодействие им не нужно), отключи данную опцию — это улучшит качество связи.
С помощью Wireless Access List можно настроить сложную логику работы клиентов: по уровню сигнала, времени суток, ограничить скорость каждого клиента или загнать его в определенный VLAN без дополнительных телодвижений. Очень рекомендую познакомиться с этим инструментом поближе.
INFO
А еще MikroTik умеет делать SSID в виде эмодзи, например так: 💀👽💲. Для этого нужно перевести символы в Unicode с помощью инструмента вроде такого и вставить полученную строку в SSID.
Заключение
Мы рассмотрели минимум действий, которые помогут роутеру стать безопаснее, а админу спать спокойнее. Но у RouterOS под капотом еще очень много возможностей, и если не включать мозг при их настройке, то никакие статьи не уберегут тебя от взлома. Вообще, мозг — отличный инструмент. Им нужно пользоваться регулярно.
← Ранее Современная оперативная память по-прежнему уязвима перед атаками RowhammerДалее → Из-за опасного бага Avast отключает JavaScript-движок в своем антивирусе
Выбираем System-Reset Configuration.Нажимаем кнопку Reset Configuration. Микротик автоматически перезагрузится.Подключаемcя к нему снова. Микротик скажет нам, что он применил стандартную конфигурацию, нажмите кнопку Remove Configuration. Никакая конфигурация нам не нужна.2. Создаем бридж и включаем в него все порты, кроме Ether1.Выбираем Bridge. Нажимаем на синий плюс. Затем ОК.Переходим на вкладку Ports.Нажимаем на синий плюс. В появившемcя окне в поле Interface выбираем ether2, в поле Bridge выбираем bridge1. Нажимаем ОК. Проделываем эту операцию для всех портов, кроме Ether1.3. Назначаем Микротику IP адрес.Выбираем IP-Addresses. Нажимаем на синий плюс.В открывшемся окне в поле Address вбиваем 192.168.77.1/24. Поле Network заполнится автоматически.В поле Interface выбираем bridge1.Нажимаем ОК. Микротик должен начать пинговатся по адресу 192.168.77.1, а также он теперь по IP доступен из WinBox.4. Навастриваем DNS сервер.Выбираем IP-DNS. Я не использую DNS провайдера, хотя Микротик может получать эти данные автоматическиот подключения PPPoE. В поля Servers вбиваем желаемые DNS. У меня DNS от Yandex.Самые известные — это Google 8.8.8.8, 8.8.4.4. Не забываем поставить галочкуAllow Remote Requests.5. Навастриваем DHCP сервер.Выбираем IP-DHCP Server. Микротик позволяет очень тонко настроить параметры вашего DHCP и иметь их несколько, но мы воспользуемся мастером настройки. Нажмите кнопку DHCP Setup.Выбираем интерфейс bridge1. Нажимаем Next.Вводим подсеть. В нашем случае 192.168.77.0/24.Нажимаем Next.Далее — это шлюз, который будет отдаваться вашим клиентам — это IP вашего Микротика.В моем случае 192.168.77.1. Нажимаем Next. И еще раз Next (DHCP Relay нам не требуется).Далее настраиваем диапазон адресов, которые будет выдавать Микротик клиентам.Диапазон вводим вручную. В моем случае 192.168.77.2-192.168.77.254.Нажимаем Next.Теперь Микротик спрашивает нас о DNS сервере. Здесь вводим IP адрес Микротика. У меня это 192.168.77.1.Нажимаем Next. Время аренды оставляем то, какое стоит по-умолчанию и нажимаем Next.Микротик сообщает нам, что DHCP сервер успешно создан.Если вы все сделали правильно, то стока с новым DHCP сервером в списке будет черная, а если будут ошибки, то она будет красная.6.Настройка PPPoE.Выбираем Interface. В окне нажимаем на синий плюс и выбираем PPPoE Client.На вкладке General в поле Interface выбираем Ether1. На вкладке Dial Out в поле User вбиваем логин, который выдал провайдер, в поле Password — пароль.Нажимаем OK.Особое внимание удаляем галочкам: Dial on Diamond — стоять не должна, Use Peer DNS — стоять не должна (мы настроили свой DNS сервер), Add Default Route — обязательно должна стоять.Щелкаем по соединению в списке интерфейсов дважды мышкой.Снова открывается окно настроек, выбираем вкладку Status.За время, пока мы щелкали, если все данные были введены правильно, то Микротик долженбыл уже подключиться к провайдеру. На вкладке Status вы можете видеть свой IP адрес, выданный провайдером (Local Address).7. Контрольный выстрел.Проверим наличие интернета. Выберите New Terminal. В окрывшемся окне терминаланаберите «ping 8.8.8.8». И если интернет есть, вы получите ответ от сервера.8. Последний шаг.Нам осталось поднять NAT.Для этого выбираем IP-Firewall. Вкладка NAT.Нажимаем на синий плюс.На вкладке General в поле Chain выбираем srcnat.В поле Src. Address вбиваем 192.168.77.0/24.Переходим на вкладку Action.В поле Action выбираем masquerade.Нажимаем ОК.Все! Интернет будет доступен на клиентах. Возможно потребуется переподключить клиента к сети,в самых тяжелых случаях перезагрузка клиента.Проверям интернет на клиенте.
- Лёгкий вред: после проведенной атаки был изменён Identity, закрыты порты 8192, 80, 443, зато открыт порт 22, пароль администратора оставлены без изменений;
- Средний вред: все перечисленные выше порты открыты, но пароль администратора изменён;
- Тяжёлый вред: пароль администратора изменён, закрыты порты ssh, www, www-ssl Winbox. Доступ только через serial-port и MAC-Winbox.
Я столкнулся со всеми тремя проблемами. Взломаны были как обычные маршрутизаторы на платформе MIPS так и серьезные на PowerPC (ppc).
Легкий взлом
Последствия такой атаки быстро устраняются. Для этого подключаемся к оборудованию по ssh, и введя команду /ip service print, видим, что сервисы, просто-напросто, отключены (Disable).
Следующей командой выключаем сервис winbox.
/ip service enable winbox
Остальные подключаются по аналогии или с помощью winbox’а. Убедитесь, что выполнение предыдущей команды прошло успешно.
/ip service print
После этого можно подключаться к оборудованию через Winbox, поменять все пароли, выполнить резервное копирование конфигурации и обновить RouterOS.
Средний
Последствия среднего взлома без сторонней программы устранить нельзя. Если интерфейс webfig остается доступным, а пароль злоумышленник изменил, то для восстановления доступа понадобится загрузить программу RouterScan. Официальный сайт: http://stascorp.com/load/1-1-0-56 Скачиваем на компьютер, распаковываем и запускаем. Откроется окно программы. Найдите строку Enter IP Ranges to scan. Справа от этой фразы кликаем по кнопке [E]. Затем в открывшемся диалоговом окне стираем всё и вводим IP-адрес своего роутера. После этого нажимаем кнопку Start Scan.
После сканирования прога выведет связку «Login-Password»
После чего необходимо, как и в первом случае, подключаться к оборудованию, изменить пароли доступа к маршрутизатору, сохранить на компьютер резервную копию конфигурации и установить update.
Тяжелый
Уязвимость, которая эксплуатируется для восстановления паролей описал в статье на своей страничке специалист по кибербезопасности Alireza Mosajja, с ником n0p. https://n0p.me/winbox-bug-dissection/. Он же является автором скрипта для чтения паролей с роутера бездеструктивным методом.
Итак, в RouterOS начиная с версии 6.29 и заканчивая 6.42 с помощью скрипта написанного на Python’е и размещенного в общем доступе на Github, возможно увидеть текущий пароль админа при условии, если порт для подключения с помощью Winbox открыт.
для RouterOS bugfix 6.40.8 и current 6.42.5 и данный метод не подходит
Для запуска понадобится Python с pwntools. Я воспользовался уже установленной версией Ubuntu 16.04 LTS, где скрипт заработал, что называется, «из коробки» — сразу, не потребовав до установить pwntools. Для более ранних дистрибутивов без pwntools воспользуйтесь инструкцией, приведенной в официальной документации к pwntools. В примере скачиваем в домашнюю директорию пользователя:
owner@mikrotik:~$cd /home/owner/ owner@mikrotik:~$ wget -r https://github.com/BigNerd95/WinboxExploit/archive/master.zip
после завершения скачивания у Вас появится вложенные папки github.com/BigNerd65/WinboxExploit/archive/master.zip . Далее распаковываем скаченный архив.
owner@mikrotik:~$ unzip /home/owner/github.com/BigNerd95/WinboxExploit/archive/master.zip
на выходе получится директория WinboxExploit, в которой содержится, интересующий нас скрипт WinboxExploit.py. Запускается всего с одним параметром — IP-адресом, либо MAC-адрес роутера. И если все пройдет успешно, вы увидите историю паролей, применявшихся на роутере, где последний текущий. Важно! Перед применением обязательно удостоверьтесь, что указываемый в параметре скрипта адрес принадлежит вашему собственному роутеру!
После того как вы вернули доступ к управлению роутером задайте новые пароли, выполните резервное копирование конфигурации, скачайте с сайта производителя обновленную прошивку.
Очень надеюсь, что данная статья поможет вам сохранить часы жизни и нервные клетки.
Используемые источники:
- https://xakep.ru/2020/03/12/good-mikrotik/
- https://blog.telecom-sales.ru/minimalnye-nastrojki-pppoe-na-oborudovanii-mikrotik/
- https://marketlines.ru/%d1%81%d0%b1%d1%80%d0%be%d1%81-%d0%bf%d0%b0%d1%80%d0%be%d0%bb%d1%8f-%d0%bd%d0%b0-mikrotik-%d1%81-%d1%81%d0%be%d1%85%d1%80%d0%b0%d0%bd%d0%b5%d0%bd%d0%b8%d0%b5%d0%bc-%d0%ba%d0%be%d0%bd%d1%84%d0%b8%d0%b3/