Специалисты ESET активно отслеживают деятельность вредоносных программ, которые используются злоумышленниками для компрометации встраиваемых устройств (embedded devices), например, роутеров. Недавно мы обнаружили IRC-бот, который содержит в себе функции нескольких уже известных вредоносных программ для Linux: Linux/Tsunami (a.k.a Kaiten) и Linux/Gafgyt. Вредоносная программа получила название Linux/Remaiten и оснащена новыми функциями, которые отличают ее от этих вредоносных программ.
Мы наблюдали три версии Linux/Remaiten – 2.0, 2.1 и 2.2. На основе обнаруженных артефактов в коде мы установили, что сами авторы назвали это вредоносное ПО как «KTN-Remastered» или «KTN-RM». В нашем исследовании мы опубликуем данные анализа Remaiten, а также расскажем о его уникальном механизме распространения, который был выбран злоумышленниками. Этот механизм различается в разных версиях бота.
Характерной особенностью семейства других вредоносных программ под названием Linux/Gafgyt является сканирование различных IP-адресов на предмет подключения на порт с номером 23 (Telnet). В случае обнаружения такой жертвы, вредоносная программа попытается подобрать учетные данные из списка, зашитого в тело вредоносной программы. В случае успешного входа, бот отправит жертве команды на загрузку исполняемых файлов вредоносной программы для различных архитектур микропроцессоров.
Вредоносная программа Linux/Remaiten улучшила используемый Gafgyt подход. Вместо загрузки исполняемых файлов всех поддерживаемых архитектур в память устройства, туда загружается только специальный загрузчик (downloader), который подтягивает за собой компонент соответствующей архитектуры: MIPS или ARM. Загрузчик обращается к удаленному C&C-серверу для загрузки файла бота соответствующей архитектуры с его последующим исполнением.
Технический анализ загрузчика
Загрузчик Linux/Remaiten представляет из себя небольшой исполняемый ELF-файл, который внедрен в файл самого бота. При исполнении файлов на сервере жертвы, загрузчик и бот подключаются к одному и тому же C&C-серверу, но на различные порты. При этом туда будет отправлена одна из нижеуказанных команд:
На эти команды управляющий C&C-сервер ответит исполняемым ELF-файлом для запрашиваемой платформы.
Рис. 1. Загрузчик запрашивает ELF-файл с управляющего C&C-сервера для микропроцессора архитектуры MIPS.
Рис. 2. Код подключения загрузчика к C&C-серверу.
Загрузчик отправляет сигнатуру «mips» на C&C-сервер и отправляет ответ в поток stdout.
Рис. 3. Загрузчик запрашивает файл бота с C&C-сервера.
Сам бот работает в системе по умолчанию как сервис или демон. Запуск бота с ключом «–d» инструктирует его на активность в качестве обычного приложения (foreground). После своего запуска в таком режиме, название его процесса будет изменено на название какого-либо стандартного легитимного процесса, например, «-bash» или «-sh». Мы наблюдали использование названия «-bash» в версии 2.1 и «-sh» в версии 2.2.
Рис. 4. Код запуска бота.
Функция под названием create_daemon создает имя файла под названием «.kpid» в одном из предопределенных директорий этого демона и записывает туда идентификатор (PID) своего процесса.
Рис. 5. Файловые директории бота.
В случае присутствия файла «.kpid», вредоносная программа считывает оттуда идентификатор PID, при этом процесс с таким идентификатором завершается, а сам файл удаляется.
Рис. 6. Создание файла демона с идентификатором PID.
Взаимодействие с C&C-сервером
Затем бот случайным образом подбирает адрес управляющего C&C-сервера из жестко зашитого списка IP-адресов и подключается к определенному порту.
Рис. 7. Процесс подключения бота к C&C-серверу.
Затем бот регистрируется на IRC-сервере и получает от него приветственное сообщение с дальнейшими инструкциями. Эти инструкции будут проанализированы ботом и исполнены на зараженном устройстве.
Рис. 8. Приветственное сообщение, которое отправляет боту C&C-сервер.
Команды
Бот может отвечать управляющему C&C-серверу на различные IRC-команды. Они указаны в специальном массиве в теле вредоносной программы вместе с их обработчиками.
Рис. 9. IRC-команды, поддерживаемые ботом.
Наиболее интересной среди приведенных команд является команда «PRIVMSG». Она используется C&C-сервером для инструктирования бота на выполнение различных вредоносных действий, таких как флудинг (flooding), загрузка файлов, сканирование IP-адресов с целью подключения по telnet, и т. д. Поддерживаемые по «PRIVMSG» команды находятся также находятся в специальном массиве в теле вредоносной программы.
Рис. 10. Команды злоумышленников, которые поддерживает бот.
Как видно, большинство вышеперечисленных функций бота были заимствованы у вредоносной программы Linux/Tsunami, а также у Linux/Gafgyt. Ниже на скриншоте представлены примеры строк в файле вредоносной программы, которые выдают ее злонамеренное поведение. Строки развернуто описывают выполняемые ботом функции, что облегчает их понимание.
Рис. 11. Возможности флудинга.
Рис. 12. Строки, относящиеся к функциям сканирования открытых портов telnet, загрузки файлов, а также убийства других ботов.
Загрузчик
Как мы упоминали выше, бот Linux/Remaiten использует уникальный метод заражения других устройств. Его исполняемый файл содержит в себе несколько компактных загрузчиков для различной архитектуры, каждый из которых будет использоваться для заражения жертвы соответствующей архитектуры. После своего запуска на устройстве, загрузчик пытается загрузить с C&C-сервера исполняемый файл бота.
Рис. 13. Указатели на загрузчики различной архитектуры для встраиваемых устройств.
Рис. 14. Структура в теле бота, которая описывает свойства хранимых загрузчиков.
Сканер telnet
Для активации сканера telnet, злоумышленники посылают боту команду «QTELNET». Сканер является улучшенной версией того же компонента, который используется во вредоносном ПО Gafgyt. Процесс сканирования разделяется на несколько этапов:
Рис. 15. Процесс подбора ботом пары логин/пароль для входа в аккаунт telnet.
Для выполнения последнего этапа используется команда «cat $SHELL», которая выполняется на скомпрометированном устройстве, далее происходит анализ полученного результата. Переменная окружения SHELL содержит путь к исполняемому ELF-файлу, который маскируется под процесс интерпретатора командной строки. Бот анализирует заголовок ELF-файла для определения его архитектуры.
Рис. 16. Восьмой и девятый кейсы отвечают за определение платформы жертвы и проверяют доступность загрузчика для нее.
Рис. 17. Часть кода функции, которая специализируется на разборе ELF-заголовка.
Далее бот выбирает подходящую для жертвы полезную нагрузку.
Рис. 18. Функция бота, которая специализируется на выборе полезной нагрузки для соответствующей архитектуры.
Мы наблюдали три версии Linux/Remaiten – 2.0, 2.1 и 2.2. На основе обнаруженных артефактов в коде мы установили, что сами авторы назвали это вредоносное ПО как «KTN-Remastered» или «KTN-RM». В нашем исследовании мы опубликуем данные анализа Remaiten, а также расскажем о его уникальном механизме распространения, который был выбран злоумышленниками. Этот механизм различается в разных версиях бота.
Характерной особенностью семейства других вредоносных программ под названием Linux/Gafgyt является сканирование различных IP-адресов на предмет подключения на порт с номером 23 (Telnet). В случае обнаружения такой жертвы, вредоносная программа попытается подобрать учетные данные из списка, зашитого в тело вредоносной программы. В случае успешного входа, бот отправит жертве команды на загрузку исполняемых файлов вредоносной программы для различных архитектур микропроцессоров.
Вредоносная программа Linux/Remaiten улучшила используемый Gafgyt подход. Вместо загрузки исполняемых файлов всех поддерживаемых архитектур в память устройства, туда загружается только специальный загрузчик (downloader), который подтягивает за собой компонент соответствующей архитектуры: MIPS или ARM. Загрузчик обращается к удаленному C&C-серверу для загрузки файла бота соответствующей архитектуры с его последующим исполнением.
Технический анализ загрузчика
Загрузчик Linux/Remaiten представляет из себя небольшой исполняемый ELF-файл, который внедрен в файл самого бота. При исполнении файлов на сервере жертвы, загрузчик и бот подключаются к одному и тому же C&C-серверу, но на различные порты. При этом туда будет отправлена одна из нижеуказанных команд:
- «mips»
- «mipsel»
- «armeabi»
- «armebeabi»
На эти команды управляющий C&C-сервер ответит исполняемым ELF-файлом для запрашиваемой платформы.
Рис. 1. Загрузчик запрашивает ELF-файл с управляющего C&C-сервера для микропроцессора архитектуры MIPS.
Рис. 2. Код подключения загрузчика к C&C-серверу.
Загрузчик отправляет сигнатуру «mips» на C&C-сервер и отправляет ответ в поток stdout.
Рис. 3. Загрузчик запрашивает файл бота с C&C-сервера.
Сам бот работает в системе по умолчанию как сервис или демон. Запуск бота с ключом «–d» инструктирует его на активность в качестве обычного приложения (foreground). После своего запуска в таком режиме, название его процесса будет изменено на название какого-либо стандартного легитимного процесса, например, «-bash» или «-sh». Мы наблюдали использование названия «-bash» в версии 2.1 и «-sh» в версии 2.2.
Рис. 4. Код запуска бота.
Функция под названием create_daemon создает имя файла под названием «.kpid» в одном из предопределенных директорий этого демона и записывает туда идентификатор (PID) своего процесса.
Рис. 5. Файловые директории бота.
В случае присутствия файла «.kpid», вредоносная программа считывает оттуда идентификатор PID, при этом процесс с таким идентификатором завершается, а сам файл удаляется.
Рис. 6. Создание файла демона с идентификатором PID.
Взаимодействие с C&C-сервером
Затем бот случайным образом подбирает адрес управляющего C&C-сервера из жестко зашитого списка IP-адресов и подключается к определенному порту.
Рис. 7. Процесс подключения бота к C&C-серверу.
Затем бот регистрируется на IRC-сервере и получает от него приветственное сообщение с дальнейшими инструкциями. Эти инструкции будут проанализированы ботом и исполнены на зараженном устройстве.
Рис. 8. Приветственное сообщение, которое отправляет боту C&C-сервер.
Команды
Бот может отвечать управляющему C&C-серверу на различные IRC-команды. Они указаны в специальном массиве в теле вредоносной программы вместе с их обработчиками.
Рис. 9. IRC-команды, поддерживаемые ботом.
Наиболее интересной среди приведенных команд является команда «PRIVMSG». Она используется C&C-сервером для инструктирования бота на выполнение различных вредоносных действий, таких как флудинг (flooding), загрузка файлов, сканирование IP-адресов с целью подключения по telnet, и т. д. Поддерживаемые по «PRIVMSG» команды находятся также находятся в специальном массиве в теле вредоносной программы.
Рис. 10. Команды злоумышленников, которые поддерживает бот.
Как видно, большинство вышеперечисленных функций бота были заимствованы у вредоносной программы Linux/Tsunami, а также у Linux/Gafgyt. Ниже на скриншоте представлены примеры строк в файле вредоносной программы, которые выдают ее злонамеренное поведение. Строки развернуто описывают выполняемые ботом функции, что облегчает их понимание.
Рис. 11. Возможности флудинга.
Рис. 12. Строки, относящиеся к функциям сканирования открытых портов telnet, загрузки файлов, а также убийства других ботов.
Загрузчик
Как мы упоминали выше, бот Linux/Remaiten использует уникальный метод заражения других устройств. Его исполняемый файл содержит в себе несколько компактных загрузчиков для различной архитектуры, каждый из которых будет использоваться для заражения жертвы соответствующей архитектуры. После своего запуска на устройстве, загрузчик пытается загрузить с C&C-сервера исполняемый файл бота.
Рис. 13. Указатели на загрузчики различной архитектуры для встраиваемых устройств.
Рис. 14. Структура в теле бота, которая описывает свойства хранимых загрузчиков.
Сканер telnet
Для активации сканера telnet, злоумышленники посылают боту команду «QTELNET». Сканер является улучшенной версией того же компонента, который используется во вредоносном ПО Gafgyt. Процесс сканирования разделяется на несколько этапов:
- на первом этапе произвольно выбирается IP-адрес и бот пытается подключиться к порту с номером 23;
- на втором бот пытается подобрать правильную связку логин/пароль для успешного входа на сервис;
- на третьем определяется микропроцессорная архитектура устройства жертвы.
Рис. 15. Процесс подбора ботом пары логин/пароль для входа в аккаунт telnet.
Для выполнения последнего этапа используется команда «cat $SHELL», которая выполняется на скомпрометированном устройстве, далее происходит анализ полученного результата. Переменная окружения SHELL содержит путь к исполняемому ELF-файлу, который маскируется под процесс интерпретатора командной строки. Бот анализирует заголовок ELF-файла для определения его архитектуры.
Рис. 16. Восьмой и девятый кейсы отвечают за определение платформы жертвы и проверяют доступность загрузчика для нее.
Рис. 17. Часть кода функции, которая специализируется на разборе ELF-заголовка.
Далее бот выбирает подходящую для жертвы полезную нагрузку.
Рис. 18. Функция бота, которая специализируется на выборе полезной нагрузки для соответствующей архитектуры.
Комментарии (3)
Klukonin
31.03.2016 03:02«Затем бот случайным образом подбирает адрес управляющего C&C-сервера из жестко зашитого списка IP-адресов»
Огласите весь список, пожалуйста.
h31
31.03.2016 14:35А бывают ли инструменты для поиска подобной заразы? Вот есть у меня дома роутер на OpenWRT и пара одноплатников, как их можно проверить?
MamOn
Благодаря МГТС и его субподрядчикам (няз, именно на них валят ответственность), устанавливающим GPON с оборудованием ZTE, я успешно познал что такое Linux/Gafgyt, после того, как заказал «белый» IP. Заботливые китайцы оставили себе бекдор в роутере в виде открытого телнета с известным паролем. А при локализации, по всей видимости в недрах МГТС, там задачу несколько упростили, сменив китайский пароль к телнету на root/root. При чём самое интересное то, что через веб-интерфейс пароль не меняется, а после каждой перезагрузки настройки файрвола, которыми можно было прикрыть телнет, сбрасываются.
Обнаружил случайно, после того, как внезапно перестала отвечать веб-морда роутера. Далее после поднятия honeypot стало понятно почему такое было поведение, один из вариантов скрипта проникновения просто kill'ял всё что ни поподя.
В общем спасибо МГТС за весело проведённое время.