Quasar Linux (QLNX): Точка входу в ланцюг постачання з повними можливостями RAT
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Quasar Linux (QLNX) – це вдосконалений троян для віддаленого доступу в Linux, який поєднує користувацький простір і руткіт eBPF з бекдором PAM та широкими можливостями збору облікових даних. Шкідлива програма підтримує безфайлове виконання, маскування імені процесу та кілька технік для збереження, які допомагають їй залишатися прихованою на інфікованих системах. Її зосередження на робочих станціях розробників робить її особливо небезпечною для атаки на ланцюжок постачання, оскільки вона може красти токени, SSH-ключі та хмарні облікові дані. Шкідливе ПЗ також використовує зашифровані комунікації та підтримує однорангову архітектуру для покращення стійкості та підтримання доступу.
Розслідування
Дослідники з Trend Micro отримали бінарний файл QLNX та провели як статичний, так і динамічний аналіз, виявивши вбудований вихідний код для компонентів руткіта і бекдора PAM. Їх розслідування документувало здатність шкідливої програми компілювати компоненти безпосередньо на цільовому хості, спектр механізмів стійкості, які вона використовує, і повний набір команд, які підтримує імплантат. Аналіз мережі також виявив призначений для користувача протокол на основі TLS та унікальний ідентифікатор, що використовується в комунікаціях. Внаслідок цієї роботи дослідники витягнули показники компрометації для підтримки полювання та виявлення.
Пом’якшення
Захисники повинні шукати QLNX, відстежуючи його унікальний файл блокування м’ютексу, підозрілі LD_PRELOAD записи і незвичайні gcc команди компіляції, що генерують шкідливі спільні об’єкти. Організації також повинні блокувати виконання невідомих двійкових файлів з назвою quasar-implant і обмежувати записування доступу до /etc/ld.so.preload. Автентифікація з кількома факторами повинна бути застосована для облікових записів розробників, а групи безпеки повинні ретельно стежити за спробами вивести з системи облікові дані та файли з чутливими токенами.
Відповідь
Якщо знайдено індикатори QLNX, негайно ізолюйте уражену систему, зберіть образи пам’яті та диска, та завершити шкідливий процес. Видаліть несанкціоновані записи з /etc/ld.so.preload, видаліть скомпільовані шкідливі .so файли, і очистіть файл блокування, який використовує імплантат. Усі потенційно компрометовані облікові дані, особливо токени хмар і реєстрів пакетів, повинні бути змінені без зволікання. Слідчі також мають оцінити, чи були якісь системи ланцюжка постачання, репозиторії або будівельні навколишні середовища забруднені під час проникнення.
graph TB %% Визначення класів classDef action fill:#99ccff classDef technique fill:#ffcc99 classDef malware fill:#ff9999 classDef tool fill:#cccccc classDef process fill:#ccffcc classDef persistence fill:#ffdd99 %% Вузол шкідливого ПЗ malware_qlnx[“<b>Шкідливе ПЗ</b> – <b>Назва</b>: QLNX<br/><b>Опис</b>: fileless Linux-імплант, що використовує rootkit-техніки”] class malware_qlnx malware %% Фаза виконання action_execution[“<b>Дія</b> – <b>Виконання</b>: запускає fileless-імплант через memfd_create та execveat, підробляє argv0 і назву процесу”] class action_execution action technique_process_spoof[“<b>Техніка</b> – T1564.010:<br/>Приховування артефактів – підміна аргументів процесу”] class technique_process_spoof technique technique_unix_shell[“<b>Техніка</b> – T1059.004:<br/>Інтерпретатор команд і скриптів – Unix shell”] class technique_unix_shell technique %% Фаза ескалації привілеїв action_priv_esc[“<b>Дія</b> – <b>Ескалація привілеїв</b>: намагається використати sudo або pkexec для отримання підвищених прав”] class action_priv_esc action technique_priv_esc[“<b>Техніка</b> – T1548.004:<br/>Зловживання механізмом контролю підвищення привілеїв – виконання з запитом підтвердження”] class technique_priv_esc technique %% Фаза персистентності action_persistence[“<b>Дія</b> – <b>Персистентність</b>: встановлює systemd-сервіси, cron @reboot, init.d-скрипти, автозапуск XDG та LD_PRELOAD-хук”] class action_persistence action technique_rc_scripts[“<b>Техніка</b> – T1037.004:<br/>Скрипти ініціалізації завантаження або входу – RC-скрипти”] class technique_rc_scripts technique technique_autostart[“<b>Техніка</b> – T1547:<br/>Автоматичний запуск під час завантаження або входу”] class technique_autostart technique technique_hijack[“<b>Техніка</b> – T1574:<br/>Перехоплення потоку виконання через LD_PRELOAD”] class technique_hijack technique class action_persistence persistence %% Фаза обходу захисту action_defense_evasion[“<b>Дія</b> – <b>Обхід захисту</b>: розгортає LD_PRELOAD rootkit, eBPF-контролер, ін’єкцію процесів та очищає журнали”] class action_defense_evasion action technique_rootkit[“<b>Техніка</b> – T1014:<br/>Rootkit – приховує файли, процеси та порти”] class technique_rootkit technique technique_thread_hijack[“<b>Техніка</b> – T1055.003:<br/>Ін’єкція процесів – перехоплення виконання потоків”] class technique_thread_hijack technique technique_process_hollow[“<b>Техніка</b> – T1055.012:<br/>Ін’єкція процесів – process hollowing”] class technique_process_hollow technique %% Фаза збору облікових даних action_credential_harvest[“<b>Дія</b> – <b>Збір облікових даних</b>: збирає дані з файлів, SSH-ключів, /etc/shadow, браузерів та PAM”] class action_credential_harvest action technique_creds_files[“<b>Техніка</b> – T1552.001:<br/>Незахищені облікові дані – у файлах”] class technique_creds_files technique technique_private_keys[“<b>Техніка</b> – T1552.004:<br/>Незахищені облікові дані – приватні ключі”] class technique_private_keys technique technique_shadow_dump[“<b>Техніка</b> – T1003.008:<br/>Вивантаження облікових даних ОС – /etc/passwd та /etc/shadow”] class technique_shadow_dump technique technique_cookies[“<b>Техніка</b> – T1550.004:<br/>Використання альтернативних матеріалів автентифікації – вебсесійні cookies”] class technique_cookies technique technique_pam[“<b>Техніка</b> – T1555:<br/>Облікові дані зі сховищ паролів – PAM-модуль”] class technique_pam technique %% Фаза збору action_collection[“<b>Дія</b> – <b>Збір</b>: захоплює дані буфера обміну та знімки екрана”] class action_collection action technique_clipboard[“<b>Техніка</b> – T1115:<br/>Дані буфера обміну”] class technique_clipboard technique technique_screenshot[“<b>Техніка</b> – T1113:<br/>Знімок екрана”] class technique_screenshot technique %% Фаза C2 action_c2[“<b>Дія</b> – <b>Командування та керування</b>: ексфільтрація даних через зашифрований TLS/HTTPS канал”] class action_c2 action technique_exfil[“<b>Техніка</b> – T1041:<br/>Ексфільтрація через C2-канал”] class technique_exfil technique %% Латеральний рух action_lateral[“<b>Дія</b> – <b>Латеральний рух</b>: використовує зібрані SSH-ключі для доступу до віддалених хостів”] class action_lateral action technique_remote_exploit[“<b>Техніка</b> – T1210:<br/>Експлуатація віддалених сервісів”] class technique_remote_exploit technique %% Зв’язки malware_qlnx –>|виконує| action_execution action_execution –>|використовує| technique_process_spoof action_execution –>|використовує| technique_unix_shell action_execution –>|призводить до| action_priv_esc action_priv_esc –>|використовує| technique_priv_esc action_priv_esc –>|призводить до| action_persistence action_persistence –>|використовує| technique_rc_scripts action_persistence –>|використовує| technique_autostart action_persistence –>|використовує| technique_hijack action_persistence –>|призводить до| action_defense_evasion action_defense_evasion –>|використовує| technique_rootkit action_defense_evasion –>|використовує| technique_thread_hijack action_defense_evasion –>|використовує| technique_process_hollow action_defense_evasion –>|призводить до| action_credential_harvest action_credential_harvest –>|використовує| technique_creds_files action_credential_harvest –>|використовує| technique_private_keys action_credential_harvest –>|використовує| technique_shadow_dump action_credential_harvest –>|використовує| technique_cookies action_credential_harvest –>|використовує| technique_pam action_credential_harvest –>|призводить до| action_collection action_collection –>|використовує| technique_clipboard action_collection –>|використовує| technique_screenshot action_collection –>|призводить до| action_c2 action_c2 –>|використовує| technique_exfil action_c2 –>|дозволяє| action_lateral action_lateral –>|використовує| technique_remote_exploit
Потік Атаки
Виявлення
Можлива спроба зв’язку домену IP-lookup (через dns)
Перегляд
Підозрілий автозапуск .desktop скинуто в профіль користувача (через file_event)
Перегляд
Прихований файл був створений на Linux хості (через file_event)
Перегляд
Індикатори компрометації (HashSha256) для виявлення: Quasar Linux (QLNX) – Невидимий плацдарм у ланцюжку постачання: Внутрішньо функціональний Linux RAT з руткітом, бекдором PAM, збором облікових даних та інше
Перегляд
Індикатори компрометації (HashSha1) для виявлення: Quasar Linux (QLNX) – Невидимий плацдарм у ланцюжку постачання: Внутрішньо функціональний Linux RAT з руткітом, бекдором PAM, збором облікових даних та інше
Перегляд
Індикатори компрометації (HashMd5) для виявлення: Quasar Linux (QLNX) – Невидимий плацдарм у ланцюжку постачання: Внутрішньо функціональний Linux RAT з руткітом, бекдором PAM, збором облікових даних та інше
Перегляд
Виявлення безфайлового виконання та впровадження коду QLNX [Створення процесу в Linux]
Перегляд
## Виконання симуляції
Передумова: Телеметрія та базову перевірку перед польотом необхідно успішно пройти.
Пояснення: У цьому розділі описується точне виконання техніки супротивника (TTP), призначеної для спрацьовування правила виявлення. Команди та описи МАЮТЬ безпосередньо відображати виявлені TTP та бути націленими на генерацію саме тієї телеметрії, яка очікується згідно логіки виявлення.
-
Опис атаки та команди:
- Етап 1 – Генерація корисного навантаження: Зловмисник пише мінімальний C-навантажувач, що викликає
memfd_createдля створення анонімного файлу у пам’яті, записує просту кодову оболонку (наприклад,execve("/bin/sh", …)), робить його виконуваним та запускає його черезexecveat. - Етап 2 – Компілювання на льоту: Використовуючи
gcc(видимий індикатор у правилі) зловмисник компілює джерело без звернення до диска (вихід спрямований на/dev/fd/3). - Етап 3 – Виконання та Впровадження: Скомпільований бінарний файл запускається, викликає
memfd_create, завантажує кодову оболонку, і нарешті викликаєexecveatдля виконання ELF у пам’яті. Опціональноptraceможе бути використано для впровадження коду у суміжний процес, що також задовольнить правило.
- Етап 1 – Генерація корисного навантаження: Зловмисник пише мінімальний C-навантажувач, що викликає
-
Скрипт регресійного тесту:
#!/usr/bin/env bash # # Симуляція безфайлового виконання QLNX‑ # Генерує ELF у пам'яті за допомогою memfd_create і запускає його з execveat. # Потребується: gcc, libcap2-bin (для демонстрації execveat) та auditd правила перед польотом. set -euo pipefail # 1️⃣ Створити C код, що здійснює маніпуляцію з memfd + execveat cat > /tmp/payload.c <<'EOF' #define _GNU_SOURCE #include <sys/mman.h> #include <sys/syscall.h> #include <unistd.h> #include <fcntl.h> #include <string.h> int main(void) { // Створити анонімний дескриптор файлу (memfd) int fd = syscall(SYS_memfd_create, "memfd_payload", MFD_CLOEXEC); if (fd == -1) _exit(1); // Простий ELF бінарний файл, що лише виконує execve /bin/sh const unsigned char elf[] = { 0x7f,0x45,0x4c,0x46,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, // ... (скорочено для стислості – мінімальний статично пов'язаний ELF для /bin/sh) }; write(fd, elf, sizeof(elf)); // Зробити його виконуваним fchmod(fd, 0755); // Використати execveat, щоб запустити бінарний файл у пам'яті syscall(SYS_execveat, fd, "", NULL, NULL, AT_EMPTY_PATH); _exit(0); } EOF # 2️⃣ Компілювати з gcc (це буде зафіксовано правилом виявлення) gcc -static -o /tmp/payload /tmp/payload.c # 3️⃣ Виконати шкідливий бінарний файл – це тригерує execveat /tmp/payload # 4️⃣ Очистка rm -f /tmp/payload /tmp/payload.c -
Команди очистки:
# Видалити залишкові файли і відключити потенційні правила аудиту (якщо тестове середовище є одноразовим) rm -f /tmp/payload /tmp/payload.c sudo auditctl -d -a always,exit -F arch=b64 -S execveat -k qlnx_execveat sudo auditctl -d -a always,exit -F arch=b64 -S memfd_create -k qlnx_memfd sudo auditctl -d -a always,exit -F arch=b64 -S ptrace -k qlnx_ptrace