시스템 보안 · 취약점 › H. 방어 회피 · 흔적 삭제 징후 · 24/50편 (전체 374/450)
학습 단계: 보안 기능 무력화·은닉
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
커널 모듈 루트킷(LKM rootkit)은 커널에 악성 모듈을 적재해, 사용자 영역 도구(ps·ls·ss)가 보는 결과를 커널 수준에서 조작합니다. 프로세스·파일·네트워크 연결·모듈 자신을 숨겨, 일반 탐지를 근본적으로 무력화합니다.
커널 루트킷 은닉 패턴
모듈 적재: insmod/modprobe 악성.ko
은닉 대상: 프로세스(ps)·파일(ls)·연결(ss)·모듈(lsmod)
방식: syscall 테이블 후킹, VFS 후킹
자기 은닉: lsmod에서 자신을 숨김
특징: 사용자 도구 결과를 조작 — 도구 간 불일치 발생
탐지: 비정상 모듈 적재·도구 간 결과 불일치·커널 무결성
핵심은 "커널이 거짓말을 한다"입니다. ps/ls가 숨겨도 /proc 직접 조회·커널 자료구조와 결과 불일치로 드러나며, 모듈 적재 자체가 핵심 신호입니다.
| 은닉 대상 | 조작 | 탐지 |
|---|---|---|
| 프로세스 | ps 조작 | /proc vs ps |
| 파일 | ls 조작 | inode vs ls |
| 네트워크 | ss 조작 | /proc/net vs ss |
| 모듈 | lsmod 조작 | /sys vs lsmod |
| 적재 | insmod | 모듈 감사 |
# 커널 모듈·루트킷 은닉 탐지 (분석 방법)
# 비정상 커널 모듈 적재
sudo ausearch -k proc_exec,kmod -i --start recent 2>/dev/null | grep -E 'insmod|modprobe|finit_module' | tail
# 적재 모듈 vs 서명·정상 목록(비정상 모듈)
lsmod 2>/dev/null | head; echo '---'; sudo cat /proc/modules 2>/dev/null | wc -l
# 도구 간 불일치(ps vs /proc)
ps -eLf 2>/dev/null | wc -l; ls /proc | grep -E '^[0-9]+$' | wc -l
$ (모듈 적재) (없음 또는 서명된 정상 모듈)
$ (ps vs /proc) 일치
비정상 커널 모듈 적재가 없고, ps와 /proc 등 도구 간 결과가 일치하는(은닉 없음) 상태가 정상입니다.
$ (모듈 적재)
proctitle="insmod /tmp/.hide.ko" (악성 커널 모듈 적재)
$ (도구 간 불일치)
ps: PID 6666 안 보임 / /proc/6666 존재
ss: 203.0.113 연결 안 보임 / /proc/net/tcp 존재
→ 커널 루트킷이 ps·ss 결과 조작
커널 루트킷 은닉 분석입니다(가상의 예시).
[공격자] insmod /tmp/.hide.ko (악성 커널 모듈)
↓ (커널 후킹)
syscall 후킹: ps/ls/ss 호출 결과에서 악성 항목 제거
→ ps: 악성 PID 숨김
→ ls: /tmp/.payload 숨김
→ ss: C2 연결 숨김
↕ (불일치 탐지)
[분석가] 커널 직접 조회 vs 사용자 도구
/proc/6666 존재 but ps 없음 → 은닉 발각
/proc/net/tcp에 연결 but ss 없음 → 은닉 발각
↓
= 커널이 조작해도 /proc 직접 조회와 불일치로 탐지
| 도구 | 조작됨 | 교차 |
|---|---|---|
| ps | 악성 PID 숨김 | /proc |
| ls | 악성 파일 숨김 | inode |
| ss | 연결 숨김 | /proc/net |
도구 간 결과 불일치가 커널 루트킷 탐지의 핵심입니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_h,defense_evasion,">
<rule id="107230" level="14">
<if_sid>107000</if_sid>
<field name="audit.comm" type="pcre2">^(insmod|modprobe)$</field>
<field name="audit.exe" type="pcre2">(/tmp/|/dev/shm/|/var/tmp/)</field>
<description>비정상 경로 커널 모듈 적재(LKM 루트킷 은닉)</description>
<mitre><id>T1014</id><id>T1562.001</id></mitre>
</rule>
</group>
커널 모듈 적재를 감사(kmod)하고, 서명되지 않은·비정상 경로 모듈을 경보합니다. 도구 간 불일치 점검을 주기적으로 수행해 은닉을 탐지합니다.
| 은닉 대상 | 탐지 |
|---|---|
| 프로세스 | /proc vs ps |
| 파일 | inode vs ls |
| 네트워크 | /proc/net vs ss |
| 모듈 | /sys vs lsmod |
| 면접 포인트 | "커널 루트킷은 도구 결과를 조작 — /proc 직접 조회와 불일치로 탐지" |
다음 편 375. 방어 회피·흔적 삭제 — LD_PRELOAD·syscall 후킹 은닉 탐지 에서는 LD_PRELOAD·syscall 후킹 은닉을 다루는 LD_PRELOAD·syscall 후킹 은닉 탐지를 다룹니다.
이전 편: 373. 방어 회피·흔적 삭제 — EDR·백신 우회·종료 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점