시스템 보안 · 취약점 › F. 비정상 프로세스 · 지속성 징후 · 33/50편 (전체 283/450)
학습 단계: 백도어·C2·은닉 징후
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
프로세스 인젝션은 악성 코드를 정상 프로세스의 메모리에 주입해 실행하는 은닉 기법입니다. 자체 프로세스를 만들지 않고 정상 프로세스(sshd·nginx 등)에 숨어, 프로세스 목록 기반 탐지를 회피합니다.
프로세스 인젝션·후킹 기법
ptrace 주입: ptrace(PTRACE_ATTACH)로 타 프로세스 제어·코드 주입
/proc/<pid>/mem 쓰기: 메모리 직접 수정
LD_PRELOAD 후킹: 함수 가로채기(F24)
__libc_start 후킹: 실행 흐름 변경
특징: 정상 프로세스에 숨음 → ps에 안 보임, 탐지 회피
인젝션은 정상 프로세스(sshd 등)의 메모리에서 동작하므로 프로세스 목록에 악성 프로세스가 없습니다. ptrace·메모리 접근 감사로 주입 행위를 포착합니다.
| 인젝션 기법 | 메커니즘 | 위험 |
|---|---|---|
| ptrace 주입 | PTRACE_ATTACH | 높음 |
| /proc/pid/mem 쓰기 | 메모리 직접 수정 | 높음 |
| LD_PRELOAD 후킹 | 함수 가로채기(F24) | 높음 |
| process_vm_writev | 메모리 쓰기 | 높음 |
| 정상 디버거 | gdb·strace | 정상 |
# 프로세스 인젝션·후킹 탐지 (분석 방법)
# ptrace 시스템 콜 감사(디버거 외)
sudo ausearch -k proc_exec,proc_inject -i --start recent 2>/dev/null | grep -E 'ptrace' | grep -vE 'comm="(gdb|strace|ltrace)"' | tail
# /proc/pid/mem 쓰기 접근
sudo ausearch -k proc_inject -i --start recent 2>/dev/null | grep -E '/proc/[0-9]+/mem'
$ (ptrace) (없음 또는 정상 디버거만)
$ (/proc/pid/mem 쓰기) (없음)
ptrace가 정상 디버거(gdb·strace)에 그치고, /proc/pid/mem 쓰기 접근이 없는 상태가 정상입니다.
$ (ptrace)
comm="/tmp/.inj" syscall=ptrace a0=PTRACE_ATTACH target_pid=980(sshd)
$ (/proc/pid/mem 쓰기)
comm="/tmp/.inj" /proc/980/mem (쓰기)
프로세스 인젝션 분석입니다(가상의 예시).
[주입 도구] /tmp/.inj 실행
↓
[ptrace] PTRACE_ATTACH sshd(980)
↓
[메모리 쓰기] /proc/980/mem에 악성 코드 주입
↓
[실행] sshd 프로세스 안에서 악성 코드 동작
= ps엔 sshd만 보임(악성 프로세스 없음) → 은닉
[탐지] ptrace·메모리 쓰기 감사(프로세스 목록 우회)
| 요소 | 해석 |
|---|---|
| ptrace ATTACH | 타 프로세스 제어 |
| /proc/mem 쓰기 | 코드 주입 |
| sshd 대상 | 정상 위장 |
| ps 은닉 | 탐지 회피 |
프로세스 목록엔 안 보이므로 ptrace·메모리 접근 감사로 주입을 포착합니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_f,process,">
<rule id="105320" level="13">
<if_sid>105000</if_sid>
<field name="audit.syscall" type="pcre2">^(ptrace|process_vm_writev)$</field>
<field name="audit.comm" type="pcre2">^(?!(gdb|strace|ltrace|lldb))[a-zA-Z0-9._/-]+$</field>
<description>비디버거 프로세스의 ptrace·메모리 주입(프로세스 인젝션)</description>
<mitre><id>T1055</id></mitre>
</rule>
</group>
ptrace 감사와 정상 디버거 화이트리스트로 인젝션을 탐지합니다. yama ptrace_scope 설정으로 주입을 제한할 수도 있습니다.
| 인젝션 기법 | 메커니즘 |
|---|---|
| ptrace 주입 | PTRACE_ATTACH |
| /proc/pid/mem 쓰기 | 메모리 수정 |
| LD_PRELOAD 후킹 | 함수 가로채기 |
| process_vm_writev | 메모리 쓰기 |
| 면접 포인트 | "인젝션은 정상 프로세스에 숨음 — ps 우회, ptrace·메모리 감사로 탐지" |
다음 편 284. 프로세스·지속성 — 프로세스 은닉(rootkit·hiding) 탐지 에서는 프로세스 은닉을 다루는 프로세스 은닉(rootkit·hiding) 탐지를 다룹니다.
이전 편: 282. 프로세스·지속성 — 웹셸 실행 징후 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점