Как я нашел умный дом во власти ботнета
В интернете очень часто встречаются вопросы вида «Как проверить, не находится ли мой роутер, компьютер, ip-камера или какое другое устройства в составе ботнета?». Это мотивировало меня рассказать об одном из немногих случаев столкновения с ботнетами из моей практики.
Изучая подозрительный трафик я наткнулся на 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), с 8×8 @ 5 ГГц и 4×4 при 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 достаточно просто перезагрузить роутер. Но в данном случае это бесполезно, так как на роутер с простым паролем вскоре залезет новая малварь, а менять чужой пароль — превышение сами знаете чего.