"Это драйвер AMD". Нет, это руткит, который научился врать ядру, обманывать ss и выживать на любом Linux

VoidLink адаптировался под каждое обновление — четыре поколения за несколько лет.


6dxpg0zvy9dli8wk670duwgvc9ne3j0m.jpg

VoidLink оказался не просто еще одним Linux-фреймворком для скрытого управления зараженными системами. Утечка с исходниками, готовыми бинарными файлами и скриптами развертывания показала куда более тяжелую картину: внутри проекта развивали полноценную линейку руткитов для ядра Linux, которые подгоняли под разные поколения ядер и под реальные целевые системы. По составу дампа видно, что речь шла не о разовом эксперименте. В каталоге лежали версии для разных веток ядра, готовые .ko-модули под конкретные сборки, отдельные заголовки BTF и последовательные поколения кода. Значит, разработчики не просто писали руткит, а собирали, тестировали и дорабатывали его в боевых условиях.

Check Point раньше описывала VoidLink как модульный фреймворк командного управления на Zig с более чем 30 плагинами, поддержкой облачных сред и несколькими техниками маскировки, включая LD_PRELOAD, загружаемые модули ядра и eBPF . Новый дамп раскрыл самую опасную часть всей системы: подсистему скрытности на уровне ядра. По содержимому файлов видно, что разработчики не ограничились одним методом. Они собрали гибридную архитектуру, где классический загружаемый модуль ядра работал в паре с eBPF-программой. Такое сочетание в реальных Linux-руткитах встречается редко.

Главный модуль маскировался под vl_stealth, а в части версий еще и под amd_mem_encrypt. Выбор второго имени выглядит расчетливым. В Linux действительно существует легитимный модуль amd_mem_encrypt, связанный с поддержкой Secure Memory Encryption и Secure Encrypted Virtualization на платформах AMD. Если вредоносный модуль копирует его метаданные, поверхностная проверка через modinfo уже не выглядит надежной. В файле прямо показано, как руткит подменяет сведения о себе:

MODULE_LICENSE("GPL");  MODULE_AUTHOR("Advanced Micro Devices, Inc.");  MODULE_DESCRIPTION("AMD Memory Encryption Support");  MODULE_VERSION("3.0");
Такой прием особенно удобен в облачных средах и виртуальных машинах, где модули, связанные с AMD, никого не удивляют. В пятой версии разработчики пошли еще дальше и спрятали само имя модуля через простую XOR-обфускацию, чтобы оно не всплывало при банальном поиске строк по бинарному файлу: