Новая вредоносная программа для Linux, известная как RedTail, распространяется сразу в нескольких сборках. Помимо версий для распространённых 64-разрядных и 32-разрядных процессоров, злоумышленники подготовили варианты для ARM, ARM64 и RISC-V. Сборки различаются только форматом исполняемого файла, а логика работы у них общая. Поэтому под удар попадают не только серверы, но и одноплатные компьютеры, сетевые устройства и промышленные контроллеры. Вредоносный набор обнаружили после того, как его загрузили на ловушку-приманку (honeypot) - сервер, специально выставленный в интернет для наблюдения за действиями атакующих.
Описание
Загруженный набор включал исполняемые файлы под каждую архитектуру, а также скрипты развёртывания и очистки. Скрипт развёртывания определяет тип процессора жертвы и выбирает подходящую сборку. Затем он ищет каталог, доступный для записи, копирует туда файл под случайным скрытым именем, выдаёт ему права на запуск и стартует с определённым аргументом. После запуска исходные, легко опознаваемые файлы удаляются. Такая схема затрудняет поиск следов заражения.
Как показало исследование, образец запускали в изолированной виртуальной машине. Сеть была настроена так, что выход в интернет отсутствовал. Вместо реальных серверов откликались имитаторы сетевых служб. Наблюдение велось на нескольких уровнях одновременно: записывались системные вызовы, изменения файлов, сетевые пакеты и снимки оперативной памяти. Однако вредоносная программа вела себя так, будто работает на обычном узле.
После запуска программа скрывала своё истинное имя. В списке процессов она выглядела как рабочий процесс веб-сервера PHP. Проверка фактического исполняемого файла при этом показывала исходный код RedTail. В другом запуске маскировка велась под службу базы данных PostgreSQL. Такое поведение повторялось от запуска к запуску, менялись лишь выбранные имена служб. Простой просмотр списка процессов может создать ложное впечатление, что на узле нет ничего лишнего.
Одновременно программа целенаправленно мешала наблюдению. Она просматривала запущенные процессы, изучала их командные строки и принудительно завершала выбранные. Среди завершённых процессов оказались средства слежения за файловой системой и инструменты, отслеживающие работу программы шаг за шагом. При запуске с правами обычного пользователя часть попыток завершилась отказом. С правами администратора те же действия увенчались успехом. Это указывает на прямую попытку сорвать анализ.
Закрепление в системе выполнялось через планировщик заданий. Программа удаляла существующее расписание и добавляла собственную задачу на автоматический запуск после перезагрузки. Механизм не зависит от уровня прав: запись создаётся от имени того пользователя, под которым работает вредоносная программа. Кроме того, она пыталась ослабить встроенный межсетевой экран, чтобы открыть доступ к собственному сетевому порту. Номер порта менялся от запуска к запуску, то есть выбирается случайным образом.
Сетевую активность удалось выявить на уровне журналов операционной системы. Из-за отсутствия маршрута в интернет все внешние подключения обрывались. Поэтому в перехваченном трафике следов не осталось. Программа обращалась к адресам крупных публичных сервисов DNS (системы, которая переводит понятные имена в сетевые адреса). Соединения шли через порт, который обычно используют для защиты DNS-запросов шифрованием. Два адреса принадлежали сетям немецких операторов связи и не были похожи на общедоступные серверы имён. Их роль установить не удалось. Поэтому адреса отнесли к аномальным, а не к подтверждённой инфраструктуре злоумышленников.
Перед основной активностью программа собирала подробные сведения о заражённом узле. Её интересовали характеристики процессора, объём и топология памяти, конфигурация кэша, поддержка больших страниц памяти, параметры ядра и идентификаторы оборудования. Попутно она получила явные признаки того, что работает внутри виртуальной машины. Тем не менее выполнение не прервалось. Программа продолжила создавать закрепление, сетевой порт и сетевые подключения. Сбор данных шёл одинаково и при обычных правах, и при правах администратора; различался лишь объём доступной информации. Это говорит о том, что одного факта виртуализации уже недостаточно для распознавания исследовательской среды.
Отдельного внимания заслуживает скрипт очистки. Он удаляет задачи планировщика, правки в файлах автозапуска оболочки и содержимое временных каталогов. Он также останавливает службу, связанную с добычей криптовалют, и завершает процессы с подозрительными именами. Иными словами, автор набора заранее готовит чужую систему к дальнейшему использованию. В ходе экспериментов этот скрипт не запускался, поэтому его возможности описаны отдельно от подтверждённого поведения.
Для организаций такой набор функций означает несколько рисков одновременно. Заражённый сервер может пережить перезагрузку и остаться под контролем злоумышленника. Сбор сведений о процессоре и памяти намекает на подготовку к вычислительно тяжёлой задаче, например к скрытой добыче криптовалюты или подбору паролей. Маскировка под служебные процессы усложняет ручной поиск. Защита строится на общих мерах: своевременное обновление системы, ограничение прав служб, двухфакторная аутентификация для доступа к серверам, контроль изменений в планировщике заданий и файлах автозапуска.
RedTail остаётся показательным примером того, как обычная серверная система становится целью без единого действия пользователя. Устойчивость к перезагрузке, изменчивые сетевые порты и противодействие средствам наблюдения заметно повышают требования к мониторингу. Проверки одного лишь списка процессов уже недостаточно. Значение имеет сопоставление имени процесса с реальным исполняемым файлом, а также контроль журналов на предмет обращений к внешним серверам имён и правок в межсетевом экране.