T1547.006 Модулі ядра та розширення у MITRE ATT&CK – Пояснення
Detection stack
- AIDR
- Alert
- ETL
- Query
Резюме
Стаття пояснює, як зловмисники використовують завантажувані модулі ядра Linux і розширення ядра macOS для досягнення постійності та підвищення привілеїв. Вона зосереджується на техніці MITRE ATT&CK T1547.006 та наводить приклади, такі як руткіт Snapekit. Ключова перевага цього методу полягає в можливості ін’єкції шкідливого коду безпосередньо в ядро без необхідності перезавантаження. Ця техніка особливо небезпечна, оскільки загрози рівня ядра дуже приховані та важкодоступні для виявлення.
Розслідування
У звіті розглядається сценарій, у якому атакуючий із привілеями root компілює шкідливий LKM, зберігає його в каталозі /lib/modules/ і використовує для досягнення постійності, використовуючи Snapekit як представницький приклад. Також описується, як можуть створюватися шкідливі kexts для macOS, компілюватися за допомогою xcodebuild, і завантажуватися через kextload. Аналіз відзначає, що суперники можуть маскувати свою діяльність підробкою імен процесів, таких як kworker.
Пом’якшення
Захисники повинні забезпечити застосування Secure Boot і політики підписування модулів, моніторинг подій завантаження модулів ядра та строго обмежувати доступ до директорій модулів. Регулярні перевірки цілісності модулів ядра та аудити можуть допомогти виявити несанкціоновані додавання. На macOS підтримка включеного System Integrity Protection і вимога підписаних kexts знижують ризик. Правила виявлення, засновані на відомих хешах шкідливих модулів, також можуть поліпшити захист. /lib/modules/ can help surface unauthorized additions. On macOS, keeping System Integrity Protection enabled and requiring signed kexts lowers the risk. Detection rules based on known malicious module hashes can also improve defense.
Реакція
Коли виявлено несподіване завантаження ядра модуля, ізолюйте хост, розвантажте підозрілий модуль та зберіть артефакти пам’яті та диску для криміналістичного аналізу. Розслідувачі повинні потім шукати методи досягнення постійності та ознаки бокового руху. Застосовуйте патчі безпеки, посилюйте контроль найменших привілеїв та продовжуйте моніторинг наступної діяльності. Будь-які новознайдені індикатори повинні бути додані до сигнатур виявлення.
Хід атаки
Ми все ще оновлюємо цю частину. Підпишіться, щоб отримати сповіщення
Повідомити менеВиявлення
Можливо шкідливий файл MacOS Kext був завантажений (через cmdline)
Переглянути
IOC (Emails) для виявлення: T1547.006 Kernel Modules and Extensions в MITRE ATT&CK Explained
Переглянути
IOC (HashSha256) для виявлення: T1547.006 Kernel Modules and Extensions в MITRE ATT&CK Explained
Переглянути
Виявлення компіляції шкідливого завантажуваного модуля ядра з доступом root [Linux Process Creation]
Переглянути
Виявлення вставки руткіта Snapekit в ядро [Linux File Event]
Переглянути
Виконання моделювання
Передумова: Перевірка телеметрії та базової лінії перед польотом має бути успішною.
Розуміння: У цьому розділі детально описується точне виконання техніки нападника (TTP), призначеного для запуску правила виявлення. Команди та наратив повинні безпосередньо відображати ідентифіковані TTP та прагнути згенерувати саме ту телеметрію, яку очікує логіка виявлення.
-
Нападницька розповідь та команди:
Атакуючий, вже працюючи якroot, створює шкідливий вихідний файл LKM, компілює його за допомогоюgccвключаючи заголовки ядра (рядок “kernel header” з’являється в командному рядку), і нарешті завантажує модуль зinsmod. Наявністьrootпривілеїв, використання/usr/bin/gcc, і inclusion заголовків ядра задовольняє умовам виявлення (якщо вони були правильно співвіднесені з полями аудиту Linux).- Створіть шкідливий вихідний файл (
evil.c), що виводить повідомлення при завантаженні. - Компіліруйте з заголовками ядра:
gcc -Wall -c evil.c -I /lib/modules/$(uname -r)/build/include -o evil.ko– зауважте, що-I .../includeшлях містить фразу “kernel header” у детальному вираженні командою. - Завантажте модуль:
insmod evil.ko. - Перевірте виконання ядра (наприклад, перевірте
dmesgдля знайденого повідомлення).
- Створіть шкідливий вихідний файл (
-
Скрипт для регресійного тестування:
Скрипт нижче автоматизує всю послідовність компіляції та завантаження шкідливого модуля. Він повинен запускатися якrootі передбачає, що заголовки ядра встановлені.#!/usr/bin/env bash set -euo pipefail # ---------- Підготовка ---------- WORKDIR="/tmp/malicious_lkm" SRC="${WORKDIR}/evil.c" OBJ="${WORKDIR}/evil.ko" KERNEL_HEADERS="/lib/modules/$(uname -r)/build/include" rm -rf "${WORKDIR}" mkdir -p "${WORKDIR}" # ---------- Джерело шкідливого LKM ---------- cat < "${SRC}" #include #include MODULE_LICENSE("GPL"); static int __init evil_init(void) { printk(KERN_INFO "Evil LKM loaded!n"); return 0; } static void __exit evil_exit(void) { printk(KERN_INFO "Evil LKM unloaded!n"); } module_init(evil_init); module_exit(evil_exit); EOF # ---------- Компіляція (містить "kernel header" у командному рядку) ---------- echo "[*] Компіляція шкідливого LKM..." gcc -Wall -c "${SRC}" -I "${KERNEL_HEADERS}" -o "${WORKDIR}/evil.o" -DDEBUG -D'KERNEL_HEADER_PATH="${KERNEL_HEADERS}"' -Wl,--build-id=none -nostdinc -nostdlib -fno-pic -fno-pie -static -o "${OBJ}" echo "[+] Компіляція завершена." # ---------- Завантаження модуля ---------- echo "[*] Завантаження шкідливого LKM..." insmod "${OBJ}" echo "[+] Модуль завантажено. Перевірте з допомогою dmesg | tail." # ---------- Залиште модуль завантаженим для спостереження ---------- sleep 30 # ---------- Очищення ---------- echo "[*] Розвантаження шкідливого LKM..." rmmod evil || true rm -rf "${WORKDIR}" echo "[+] Очищення завершено." -
Очищення команд:
Якщо ви віддаєте перевагу ручному очищенню, виконайте наступне після перевірки:# Видалити модуль (якщо ще завантажений) sudo rmmod evil || true # Видалити робочу директорію sudo rm -rf /tmp/malicious_lkm