PRO вирусы. Версия 4.0 (Холмогоров) - страница 67

Если авторизация прошла успешно, на взломанный хост отправляется команда wget, которая выкачивает с управляющего сервера и сохраняет в папку /tmp/ sh-скрипт. Он, в свою очередь, загружает из сети бинарный файл трояна, соответствующий архитектуре устройства. С помощью этого нехитрого алгоритма организуется автоматическое распространение Mirai и заражение новых умных устройств, из которых впоследствии формируется ботнет.


«Наследники» и модификации

Любой программный продукт эволюционирует со временем: его создатели устраняют выявленные ошибки и понемногу добавляют новые функции. Это в полной мере относится и к Mirai.

В следующей версии, распространявшейся летом 2016 года, создатели трояна отказались от динамического выделения памяти для хранения конфига в пользу статической области — видимо, чтобы повысить стабильность работы программы в целом. Поксоренные строки в конфиге после расшифровки и чтения зашифровывались обратно прямо в памяти. Наконец, был исправлен баг с пропуском имен убиваемых процессов, если те оказывались на границе блока данных, — теперь парсер научился обращаться к ним по индексу, совпадающему с позицией строки в массиве. Был полностью переписан генератор псевдослучайных значений, а при запуске Mirai определял IP-адрес зараженного устройства, постучавшись на DNS-сервер Google (раньше он обращался для этого к собственному управляющему серверу). Троян научился взаимодействовать с обработчиками сигналов и игнорировать SIGINT посредством sigprocmask с очевидной целью не дать пользователю принудительно остановить вредоносный процесс.

В новой версии Mirai была реализована функция смены адреса управляющего сервера с помощью SIGTRP, а поступающие команды стали обрабатываться строго по одной во избежание формирования очереди. Для удобства работы с сокетами в составе трояна появился собственный локальный сервер. Так, берклиевский сокет PF_INET биндился на порт 48101 локалхоста и переходил в режим ожидания входящего соединения. Если вредоносу не удавалось создать сокет и подключиться к нему, троян находил владеющий сокетом процесс и убивал его: таким образом исключалось зависание программы при циклических попытках установить связь посредством функции bind с занятым сокетом. Вот почему для защиты от Mirai некоторые специалисты по информационной безопасности рекомендовали заблокировать на устройстве TCP-порт 48101, если он не используется, — это нарушало нормальную работу встроенного в троян сервера. В обновленной версии была полностью пересмотрена самозащита: вместо костыля с файлом