[ << ALL_FEED ]

«Прикрепляю данные во вложении» 💌

Ещё в группе «Общее»

«Прикрепляю данные во вложении» 💌

У нас в гостях сегодня небольшой, но от этого не менее интересный и экспериментальный реверс-шелл для Linux. Хотя реверс-шеллом сейчас сложно удивить, этот образец все-таки смог привлечь к себе наше внимание.

Примечателен он следующим:

• Его «дистрибутив» содержит в своем составе модуль ядра.
• Управление реализовано через электронную почту.

Рассмотрим его детальнее: все файлы объединены в один дроппер, который извлекает и запускает основные компоненты шелла. Всего их три:

1️⃣ messenger.py — транспорт. Этот скрипт получает команды от злоумышленника и отправляет на С2-сервер результат их выполнения, используя IMAP и SMTP.

2️⃣ agent.elf — основной агент. Постоянно опрашивает транспорт для получения команд, исполняет их в интерпретаторе командной строки, сохраняя вывод для последующей передачи на С2-сервер.

3️⃣ maldrv.ko — LKM-руткит. Используется для повышения привилегий агента.

int __cdecl main(int argc, const char **argv, const char **envp)
{
  if ( getuid() )
  {
    fwrite("Agent must be run as root\n", 1uLL, 0x1AuLL, stderr);
    return 1;
  }
  else
  {
    extract_file("/root/.agent.elf", agent_elf, 30400uLL);
    extract_file("/lib/modules/5.15.0-67-generic/kernel/drivers/misc/maldrv.ko", maldrv_ko, 446880uLL);
    extract_file("/root/.messenger.py", messenger, 5295uLL);
    inject(shellcode_out, 136uLL);
    call_all_plugins("/root/.agent.elf");
    return 0;
  }
}
Code language: JavaScript (javascript)


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

🙌 Модуль maldrv.ko перехватывает системный вызов execve. При передаче определенного аргумента он повышает привилегии вызывающего процесса через commit_creds, после чего агент активирует транспорт для приема команд и передачи их результатов (см. скриншот).

📧 Транспорт messenger.py использует заданный в скрипте почтовый ящик. Для получения команд он раз в 10 секунд забирает из папки inbox письма с темой Command, полученные не ранее текущей даты, забирая таким образом только свежие команды. Саму команду он ищет в части письма с MIME-типом text или plain, записывая ее в файл /root/.output/.output.txt. После получения письмо с командой удаляется из почтового ящика.

Результаты выполнения команд, которые записываются отдельными файлами в каталог /root/.output/, архивируются в ZIP‑файл, который шифруется AES в режиме CBC. Затем «частями» по 40 КБ этот файл отправляется на заданный почтовый ящик. Если в списке почтовых аккаунтов несколько учетных записей — отправление каждой из частей зашифрованного архива распределяется между ними.

👨‍🎓 Очевидно, что наш гость — это некий учебный проект, proof of concept такой вредоносной программы. Да и ограничения IMAP и SMTP не позволяют быстро обмениваться большими объемами данных с С2-сервера. Однако почтовые протоколы довольно часто использовались и в реальных вредоносных кампаниях — достаточно вспомнить активное применение SMTP в Agent Tesla в кампании SteganoAmor.

По каким признакам можно распознать такую активность? Стоит обратить внимание на периодичность коммуникации с почтовым сервером, а также на объем данных с узла, передаваемых по указанным протоколам.

IoCs:

SHA-256:
40BB351F8B5AC6A02CD2A31D1683CC1ADB4C0C949346F51C2746F023004C5361
E908E1F4B799E1B5F38FCC8E6B1300E3604A101CF367D3431D82EEDDD1A02A05
68B3C2E7EF26C0432D7DEBFEB8CBCEE2F557A52B5662B3B3B49DCE21E0B288A4Code language: YAML (yaml)


#ti #malware #tips #ioc
@ptescalator

Ещё от ti_author

Ещё от ti_author

Ещё в группе «Общее»