시스템 보안 · 취약점 › H. 방어 회피 · 흔적 삭제 징후 · 29/50편 (전체 379/450)
학습 단계: 위장·난독화·흔적 분석
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
4단계는 위장·난독화를 다룹니다. 첫 번째는 정상 프로세스 위장(masquerading)입니다. 공격자는 악성 프로세스에 sshd·cron·[kworker] 같은 정상 이름을 붙여, ps 목록에서 정상처럼 보이게 합니다. ATT&CK T1036에 해당합니다.
정상 프로세스 위장(masquerading)
프로세스명 위장: argv[0]을 "sshd"로 설정(실제는 악성)
커널 스레드 위장: [kworker/0:1] 등 대괄호 이름
정상 경로 위장: /usr/sbin/sshd 흉내(실제는 /tmp)
특징: 이름은 정상 — exe 경로·계보·부모가 비정상
탐지: 이름 vs exe 경로 불일치, 비정상 부모·위치
핵심은 "이름은 정상인데 실체가 다른 것"입니다. comm/argv는 위장해도 exe 경로·부모 프로세스·실행 위치는 비정상이므로 교차하면 드러납니다.
| 위장 | 방식 | 실체 단서 |
|---|---|---|
| 이름 위장 | argv[0]=sshd | exe 경로 |
| 커널 스레드 | [kworker] 흉내 | exe 존재 |
| 경로 위장 | /usr/sbin 흉내 | 실제 /tmp |
| 부모 위장 | 정상 부모인 척 | 계보 불일치 |
| 정상 | 진짜 sshd | 일치 |
# 정상 프로세스 위장 탐지 (분석 방법)
# comm(이름) vs exe(경로) 불일치
for p in /proc/[0-9]*; do n=$(cat $p/comm 2>/dev/null); e=$(readlink $p/exe 2>/dev/null); case "$n" in sshd|cron|crond|systemd) echo "$n -> $e" | grep -vE '/usr/sbin|/usr/lib|/lib/systemd' && echo "의심: $p $n $e";; esac; done 2>/dev/null | head
# 정상 이름인데 비정상 위치 실행
sudo ausearch -k proc_exec -i --start recent 2>/dev/null | grep -E 'exe="/tmp/.*(sshd|cron|systemd)"' | tail
$ (이름 vs 경로) sshd -> /usr/sbin/sshd (일치, 정상)
$ (비정상 위치) (없음)
정상 이름 프로세스의 exe 경로가 정상 위치와 일치하고, 정상 이름을 쓴 비정상 위치 실행이 없는 상태가 정상입니다.
$ (이름 vs 경로)
comm="sshd" exe="/tmp/.x" (이름은 sshd, 실체는 /tmp 악성)
comm="[kworker/0:3]" exe="/dev/shm/.k" (커널 스레드 위장)
$ (부모 불일치)
"cron" 프로세스의 부모가 /tmp/.loader (정상 cron 아님)
정상 프로세스 위장 분석입니다(가상의 예시).
[공격자] /tmp/.x 악성 실행
argv[0]="sshd" 설정 (ps에서 sshd로 보임)
↕ (교차 탐지)
[분석가]
ps: sshd (정상처럼 보임)
/proc/PID/exe → /tmp/.x (실체 노출)
부모: /tmp/.loader (정상 sshd 부모 아님)
위치: /tmp (정상 /usr/sbin 아님)
↓
= 이름은 속여도 exe·부모·위치가 실체 → 정탐
| 관점 | 위장 | 실체 |
|---|---|---|
| comm/argv | sshd | 위조됨 |
| exe | /usr/sbin/sshd 흉내 | /tmp/.x |
| 부모 | 정상인 척 | /tmp/.loader |
이름과 exe·부모·위치 교차가 위장 탐지의 핵심입니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_h,defense_evasion,">
<rule id="107280" level="13">
<if_sid>107000</if_sid>
<field name="audit.comm" type="pcre2">^(sshd|cron|crond|systemd|init|bash)$</field>
<field name="audit.exe" type="pcre2">(/tmp/|/dev/shm/|/var/tmp/|/home/)</field>
<description>정상 프로세스명 + 비정상 실행 위치(masquerading)</description>
<mitre><id>T1036.004</id><id>T1036.005</id></mitre>
</rule>
</group>
정상 프로세스명과 정상 exe 경로의 매핑을 기준선화하고, 이름-경로 불일치를 탐지합니다. 커널 스레드명은 exe 존재 여부로 판별합니다.
| 위장 | 실체 단서 |
|---|---|
| 이름 위장 | exe 경로 |
| 커널 스레드 | exe 존재 |
| 경로 위장 | 실제 /tmp |
| 부모 위장 | 계보 불일치 |
| 면접 포인트 | "masquerading은 이름만 정상 — exe·부모·위치 교차로 실체 간파" |
다음 편 380. 방어 회피·흔적 삭제 — 파일명·확장자 위장 탐지 에서는 파일명·확장자 위장을 다루는 파일명·확장자 위장 탐지를 다룹니다.
이전 편: 378. 방어 회피·흔적 삭제 — 보안 기능 무력화 종합 분석
📚 시리즈 전체 보기: 시스템 보안 · 취약점