Как стать автором
Обновить

Как я нашел умный дом во власти ботнета

Время на прочтение4 мин
Количество просмотров26K
В интернете очень часто встречаются вопросы вида «Как проверить, не находится ли мой роутер, компьютер, ip-камера или какое другое устройства в составе ботнета?». Это мотивировало меня рассказать об одном из немногих случаев столкновения с ботнетами из моей практики.

image


Изучая подозрительный трафик я наткнулся на IP-адрес маршрутизатора, с которого производилась неудачные попытки подключения по SSH к моему HONEYPOT. В /var/log/auth.log я увидел вот это:

...
Oct 9 23:52:04 dvrh sshd[3523]: Failed password for root from 129.***.***.29 port 35276 ssh2
Oct 9 23:52:04 dvrh sshd[3523]: Connection closed by authenticating user root 129.***.***.29 port 35276 [preauth]
Oct 9 23:52:05 dvrh sshd[3525]: Connection closed by authenticating user root 129.***.***.29 port 35278 [preauth]
Oct 9 23:52:06 dvrh sshd[3529]: Failed password for root from 129.***.***.29 port 35280 ssh2
Oct 9 23:52:06 dvrh sshd[3529]: Connection closed by authenticating user root 129.***.***.29 port 35280 [preauth]
Oct 9 23:52:06 dvrh sshd[3531]: Invalid user admin from 129.***.***.29 port 35282
Oct 9 23:52:07 dvrh sshd[3531]: Failed password for invalid user admin from 129.***.***.29 port 35282 ssh2
Oct 9 23:52:07 dvrh sshd[3531]: Connection closed by invalid user admin 129.***.***.29 port 35282 [preauth]
Oct 9 23:52:08 dvrh sshd[3533]: Invalid user test from 129.***.***.29 port 35286
Oct 9 23:52:11 dvrh sshd[3533]: Failed password for invalid user test from 129.***.***.29 port 35286 ssh2
Oct 9 23:52:11 dvrh sshd[3533]: Connection closed by invalid user test 129.***.***.29 port 35286 [preauth]
Oct 9 23:52:11 dvrh sshd[3535]: Invalid user test from 129.***.***.29 port 35288
Oct 9 23:52:12 dvrh sshd[3535]: Failed password for invalid user test from 129.***.***.29 port 35288 ssh2
Oct 9 23:52:12 dvrh sshd[3535]: Connection closed by invalid user test 129.***.***.29 port 35288 [preauth]
Oct 9 23:53:12 dvrh sshd[3537]: Invalid user admin from 129.***.***.29 port 35290
Oct 9 23:53:12 dvrh sshd[3537]: Connection closed by invalid user admin 129.***.***.29 port 35290 [preauth]
 ...

Вывод сделать было не сложно: кто-то пытался получить доступ на мой сервер используя набор стандартных логинов и паролей. Причем (судя по интервалам времени) делалось это в автоматическом режиме. А значит, что вероятнее всего это очередной роутер, являющийся участником бот-сети.
На самом деле такая картина типична для хостов с открытым 22 портом. Вы можете сами убедиться в этом: откройте ssh для доступа из внешнего интернета, разрешите вход по паролю, и боты не заставят себя ждать. При этом ~80% попыток будет из Китая.

К моему счастью, спустя некоторое время, мне удалось зайти на этот злополучный IP по ssh, используя один из стандартных логинов и паролей (Удивлены? Я — нет). Но оказалось, что это не обычный роутер, а некоторый девайс под названием Calix GigaSpire.
Calix GigaSpire представляет из себя систему управления умным домом под операционной системой EXOS. GigaSpire включает в себя следующий функционал:

  • Поддержка Wi-Fi 6 (802.11ax), с 8x8 @ 5 ГГц и 4x4 при 2,4 ГГц
  • Мульти-гигабитный сервис
  • Услуги уровня 2 и уровня 3
  • Управляется Calix Support Cloud
  • поддержку Интернета вещей (Bluetooth Low Energy, Zigbee 3.0 и Z-Wave Pro)
  • Голосовой ассистент Amazon Alexa

Первое что я сделал, зайдя в систему, я посмотрел список запущенных процессов, чтобы найти что-то интересное. И это «что-то интересное» выглядело так:

[router] / # ps
...
 2978 root      1444 S    {kkbs2l3mdqjq} ipjq2njq5qjq
 9729 root      1584 S    {kkbs2l3mdqjq} ipjq2njq5qjq
14871 root      5532 S    {hgoj42jadsjvebc} m6ojj5oj5gojj2h08b8l
19037 root       308 S    {hgoj42jadsjvebc} m6ojj5oj5gojj2h08b8l
19041 root       284 S    {hgoj42jadsjvebc} m6ojj5oj5gojj2h08b8l
...

Подозрения вызывает «рандомность» названий этих процессов. Чтобы понять, что это за процессы, я предлагаю вспомнить что такое файловая система /proc:
procfs — специальная файловая система, используемая в UNIX-подобных операционных системах. Позволяет получить доступ к информации из ядра о системных процессах. Необходима для выполнения таких команд как ps, w, top. Обычно её монтируют на /proc. Из этой директории можно получить любую информацию о вашей системе. Например сколько памяти подкачки сейчас используется, насколько велик размер кеша процессора, какие модули ядра загружены, сколько дисков или разделов доступно и т д.

Нас интересуют директории, содержащие информацию о найденных подозрительных процессах. Они имеют вид /proc/PID, где PID — ID процесса, информацию о котором содержит данная директория. Если посмотреть их содержимое, можно найти такие файлы:

  • cmdline — содержит команду с помощью которой был запущен процесс, а также переданные ей параметры
  • cwd — символическая ссылка на текущую рабочую директорию процесса
  • exe — ссылка на исполняемый файл
  • root — ссылка на папку суперпользователя
  • environ — переменные окружения, доступные для процесса
  • fd — содержит файловые дескрипторы, файлы и устройства, которые использует процесс
  • maps, statm, и mem — информация о памяти процесса
  • stat, status — состояние процесса

Что мы можем с этим сделать? Первое, что приходит в голову — это подсчитат0ь контрольную сумму одного из исполняемых файлов и поискать совпадения в интернете:

/ # md5sum /proc/2978/exe
d204e97ac15a6d0a3ed7e415edfa582e  /proc/2978/exe

Данный md5 я обнаружал в списке контрольных сумм Mirai, что говорит о природе происхождения файла. Но что мы можем теперь сделать? Чтобы избавить от бота Mirai достаточно просто перезагрузить роутер. Но в данном случае это бесполезно, так как на роутер с простым паролем вскоре залезет новая малварь, а менять чужой пароль — превышение сами знаете чего.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
+29
Комментарии19

Публикации

Изменить настройки темы

Истории

Работа

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн