Вредоносное ПО Linux/Shishiga использует скрипты Lua

от автора

Среди образцов вредоносного ПО для Linux, получаемых ежедневно, мы заметили подозрительный экземпляр, который детектировал только Dr.Web – как Linux.LuaBot. Довольно странно, поскольку наша частота обнаружений малвари семейства Luabot как правило выше.

Выполнив анализ, мы выяснили, что программа написана на Lua и относится к новому семейству, не связанному с уже известным Luabot. Малварь получила название Linux/Shishiga. Она использует четыре протокола (SSH – Telnet – HTTP – BitTorrent) и Lua-скрипты.

image

Среда обитания Shishiga

Linux/Shishiga атакует системы GNU/Linux. Вектор заражения типичен – брутфорс слабых паролей из списка. Малварь работает примерно как Linux/Moose, но также может брутфорсить SSH. Вот полный список паролей на момент написания отчета:

image

image

Мы также обнаружили несколько бинарных файлов Linux/Shishiga для различных архитектур, включая MIPS (от старшего к младшему и наоборот), ARM (armv4l), i686, а также PowerPC. Они часто используются в устройствах интернета вещей. Мы предполагаем, что могут поддерживаться и другие архитектуры, такие как SPARC, SH-4 или m68k, но об этом позже.

Возможности Shishiga

Linux/Shishiga — бинарный файл, упакованный с помощью UPX 3.91 (упаковщик исполняемых файлов). Но у UPX возникнут сложности с распаковкой, поскольку Shishiga добавляет данные в конец запакованного файла.

После распаковки файла мы видим, что он статично скомпонован с библиотекой рабочих программ Lua, а код удален.

image

При исполнении бинарный файл запускает модуль малвари Lua следующими методами:

image

Метод getmods возвращает архивированный blob, о чем подробнее расскажем позже. Затем жестко запрограммированный код Lua (malware.lua) исполняется через функции luaL_loadstring и lua_pcall. Код Lua довольно простой, вот краткое описание исходного кода без изменений от нас.

image
(1) открывает файл exe-файл малвари из /proc/self/exe и возвращает его содержимое;
(2) восстанавливает архив zlib посредством метода getmods, распаковывает, а затем парсит его при помощи тэгов и хранит в массиве Lua;
(3) вызывает модуль main.lua.

Есть обширный список всех скриптов Lua, найденных в секции показателей компрометации. У большинства из них названия говорят за себя, но мы все равно кратко опишем некоторые из них.

callhome.lua

  • получает файл конфигурации server.bt или servers из config.lua;
  • при невозможности связаться с текущим дефолтным сервером, меняет его на другой;
  • пересылает файлы (отчеты или аккаунты, оба в формате JSON);
  • исполняет задачи из списка задач, полученного с C&C-сервера.

bfssh.lua / bftelnet.lua

  • модуль для брутфорса SSH- и Telnet-логинов;
  • проверяет, дает ли команда echo -en "\\x31\\x33\\x33\\x37" на выходе 1337; если нет — выйти, иначе — продолжить;
  • архитектура устройства определяется файлом из /bin/ls запуском cat /bin/ls и парсингом заголовка ELF, об этом ниже;
  • распространение малвари (.lm и .dm файлов) согласно архитектуре устройства;
  • сохранение успешных комбинаций пользовательских параметров.

Код проверки архитектуры выглядит так:

bfssh.lua, метод getArchELF
image
(1) каждый файл ELF должен начинаться с \x7fELF;
(2) ftype, который представляет e_type (тип файла ELF = исполнимый, расшариваемый, итд.) не используется;
(3) bits представляет e_ident[EI_CLASS] (32 или 64 бита), denc представляет e_ident[EI_DATA] (от старшего к младшему, и наоборот), и farch представляет e_machine в заголовке ELF.

bfssh.lua, метод getArchName
image
(1) bits не используется
(2) проверяет принадлежность файла к MIPS (от младшего) (e_machine == EM_MIPS и e_ident[EI_DATA] == ELFDATA2LSB)
(3) проверяет принадлежность файла Intel 80386 или Intel 80860 или AMD x86-64 (e_machine == EM_386 или e_machine == EM_860 или e_machine == EM_X86_64)

config.lua

  • содержит открытый ключ publicKey для проверки подписи бинарника (.lm или .dm);
  • содержит список компонентов загрузчика;
  • содержит имена .bt файлов, номера портов серверов SOCKS и HTTP;
  • содержит IP-адреса сервера (возможно, С&C).

persist.lua

  • метод сохранения, в зависимости от прав пользователя (рут или юзер)

scanner.lua

  • используется для генерации случайных / 16 сетей, которые не являются локальными

worm.lua (этот скрипт убрали в последней версии Linux/Shishiga)

  • разрешает сканирование заданного порта;
  • разрешает загрузку;
  • получает информацию с нового зараженного сервера.

Содержание файла readme.lua оценят русскоговорящие:
image

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

Основной бинарный файл называется .lm, но мы также смогли получить файл под названием .dm – простой бэкдор, прослушивающий 0.0.0.0 (все IPv4 адреса) порта 2015. Изменилось название файла бэкдора – с dl на dm.

Коммуникации Shishiga

Linux/Shishiga может обмениваться данными с помощью любого из модулей httpproto.lua, btloader.lua или server.lua. Модуль httpproto.lua имеет функции, позволяющие кодировать и декодировать информацию и делать запросы HTTP POST и GET. Исходный код ниже показывает процесс кодирования.

httpproto.lua
image

btloader.lua использует модуль torrent.lua (враппер для функций BitTorrent) для сохранения и загрузки узлов из файла nodes.cfg. Он также получает его конфигурацию из файлов {server,update,script}.bt (в формате Bencode) и использует протокол BitTorrent для проверки обновлений этих файлов. script.bt позволяет исполнить скрипт Lua, а update.bt разрешает исполнение бинарника .lm. Ниже примеры декодированных файлов .bt, показанных в виде словарей Python.

script.bt
image
(1) подпись
(2) открытый ключ

update.bt
image

server.bt
image

Наконец, основная функция модуля server.lua — создание HTTP сервера с портом, прописанным в config.lua. Во всех образцах, которые мы на данный момент изучили, это был порт 8888.

Сервер отвечает только на запросы /info и /upload. Ниже показана «причесанная» версия ответа сервера к пути /info. Все файлы ниже могут быть легко загружены с зараженного устройства.

image
(1) скрипты Lua
(2) бэкдор (старое имя: .dl)
(3) скрипты BitTorrent
(4) версия малвари
(5) загрузчик модулей

Запрос в рут / по порту 8888 в результате даст HTTP/1.0 404 OK, что является простым показателем компрометации (IoC).

Функция ответа http.lua
image

На этом этапе исследования мы попросили команду Censys провести массированное сканирование интернета по TCP-порту 8888. Они обнаружили около десяти IP-адресов, по которым совпадал ответ HTTP. Эти адреса принадлежат потенциально зараженным машинам.

Вывод

На первый взгляд, Linux/Shishiga может показаться похожей на другие вредоносные программы, которые распространяются через слабозащищенные Telnet и SSH, но ее выделяет использование протокола BitTorrent и модулей Lua. BitTorrent в черве Hajime, вдохновленном Mirai, был обнаружен в прошлом году, и мы можем только предполагать, станет ли он популярнее в будущем.

Возможно, что Shishiga эволюционирует и будет более распространенной. Пока незначительное число жертв, изменения компонентов, комментарии в коде и информация по устранению багов указывают, что работа над малварью в процессе. Чтобы предотвратить заражение ваших устройств малварью Shishiga и похожими червями, не стоит использовать стандартные учетные данные Telnet и SSH.

Благодарим команду Censys за сотрудничество.

Индикаторы заражения (IoC)

Командный сервер
93.117.137.35

SHA-1 (.lm)
image

SHA-1 (.dl)
image

Имена файлов скриптов Lua
image

Файлы, которые потенциально могут указывать на заражение
image

Напоминаем про 50%-ную скидку при миграции на корпоративные решения ESET NOD32 с продуктов других производителей.
ссылка на оригинал статьи https://habrahabr.ru/post/327824/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *