T1547.006 커널 모듈 및 확장: MITRE ATT&CK 해설
Detection stack
- AIDR
- Alert
- ETL
- Query
요약
이 기사는 공격자가 Linux의 로드 가능한 커널 모듈과 macOS 커널 확장을 남용하여 지속성을 얻고 권한을 상승시키는 방법을 설명합니다. MITRE ATT&CK 기법 T1547.006을 중심으로 Snapekit 루트킷과 같은 예를 참조합니다. 이 방법의 주요 이점은 재부팅 없이 악성 코드를 커널에 직접 주입할 수 있는 능력입니다. 커널 수준의 위협은 매우 은밀하고 탐지가 어려워 이 기법은 특히 위험합니다.
조사
이 보고서는 root 권한을 가진 공격자가 악성 LKM을 컴파일하여 /lib/modules/ 디렉토리에 저장하고 이를 지속성에 활용하는 시나리오를 검토하며, Snapekit을 대표적인 예로 사용합니다. 또한 악성 macOS kexts가 어떻게 생성되고 xcodebuild로 컴파일되며 kextload를 통해 로드될 수 있는지를 설명합니다. 분석에 따르면 공격자는 kworker와 같은 프로세스 이름을 위장하여 활동을 숨길 수 있습니다.
완화
방어자는 Secure Boot 및 모듈 서명 정책을 시행하고, 커널 모듈 로딩 이벤트를 모니터링하며 모듈 디렉토리에 대한 권한 있는 접근을 엄격히 제한해야 합니다. 커널 모듈의 정기적인 무결성 검증 및 /lib/modules/ 의 감사는 승인되지 않은 추가 사항을 발견하는 데 도움이 될 수 있습니다. macOS에서는 시스템 무결성 보호를 활성화하고 서명된 kext를 요구함으로써 위험을 낮출 수 있습니다. 알려진 악성 모듈 해시를 기반으로 한 탐지 규칙도 방어를 개선할 수 있습니다.
대응
예상치 못한 커널 모듈 로드가 탐지되면, 호스트를 격리하고 의심스러운 모듈을 언로드하며 포렌식 분석을 위한 메모리 및 디스크 아티팩트를 수집하십시오. 조사자는 지속성 방법 및 횡적 이동의 징후를 찾아야 합니다. 보안 패치를 적용하고 최소 권한 제어를 강화하며 추가 활동을 계속 모니터링하십시오. 새로 발견된 인디케이터는 탐지 서명에 추가되어야 합니다.
공격 흐름
이 부분은 아직 업데이트 중입니다. 알림을 받으려면 가입하세요.
알림 받기탐지
악성 가능성이 있는 MacOS Kext 파일 로드됨 (cmdline 경로)
보기
탐지할 IOC (이메일): MITRE ATT&CK에서 T1547.006 커널 모듈 및 확장 설명
보기
탐지할 IOC (HashSha256): MITRE ATT&CK에서 T1547.006 커널 모듈 및 확장 설명
보기
Root Access [Linux 프로세스 생성]로 악성 로드 가능한 커널 모듈 컴파일 탐지
보기
Snapekit 루트킷 커널 모듈 삽입 탐지 [Linux 파일 이벤트]
보기
시뮬레이션 실행
전제 조건: 텔레메트리 & 베이스라인 프리 플라이트 체크가 통과되어야 합니다.
근거: 이 섹션은 탐지 규칙을 트리거하도록 설계된 적의 기술(TTP)의 정확한 실행을 자세히 설명합니다. 명령어와 설명은 식별된 TTP를 직접 반영해야 하며, 탐지 로직이 예상하는 정확한 텔레메트리를 생성하는 것을 목표로 합니다.
-
공격 내러티브 및 명령:
공격자는 이미root로 활동하면서 악성 LKM 소스 파일을 생성하고gcc커널 헤더를 명령어 라인에 명시적으로 포함하여 컴파일하며insmod로 모듈을 최종적으로 로드합니다. 이때root권한의 존재,/usr/bin/gcc의 사용 및 커널 헤더 포함은 의도한 탐지 조건을 충족시킵니다 (Linux 감사 필드에 올바르게 매핑된 경우).- 악성 소스 생성 (
evil.c) 로드될 때 메시지를 출력합니다. - 컴파일 커널 헤더와 함께:
gcc -Wall -c evil.c -I /lib/modules/$(uname -r)/build/include -o evil.ko– 명령어 라인에서 명시적으로 표현할 때-I .../include경로가 ‘커널 헤더’라는 문구를 포함합니다. - 모듈 로드 :
insmod evil.ko. - 커널 실행 확인 (예: 에서 출력된 메시지 확인).
에서 출력된 메시지 확인).for the printed message).
- 악성 소스 생성 (
-
회귀 테스트 스크립트:
아래 스크립트는 악성 컴파일 및 로드 연속 작업을 자동화합니다. 이 스크립트는root로 실행되어야 하며 커널 헤더가 설치되어 있다고 가정합니다.#!/usr/bin/env bash set -euo pipefail # ---------- Preparation ---------- 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}" # ---------- Malicious LKM source ---------- cat <<'EOF' > "${SRC}" #include <linux/module.h> #include <linux/kernel.h> 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 # ---------- Compilation (contains "kernel header" in command line) ---------- echo "[*] Compiling malicious 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 "[+] Compilation finished." # ---------- Load the module ---------- echo "[*] Loading the malicious LKM..." insmod "${OBJ}" echo "[+] Module loaded. Verify with dmesg | tail." # ---------- Keep the module loaded for observation ---------- sleep 30 # ---------- Cleanup ---------- echo "[*] Unloading the malicious LKM..." rmmod evil || true rm -rf "${WORKDIR}" echo "[+] Cleanup complete." -
정리 명령어:
수동 정리를 선호하신다면 검증 후 다음을 실행하세요:# 모듈 제거 (여전히 로드되어 있는 경우) sudo rmmod evil || true # 작업 디렉토리 삭제 sudo rm -rf /tmp/malicious_lkm