Linux 시스템 보안 기초 · 27/50편
이 글은
리눅스 시스템 기초·파일 · 권한 · 사용자 관리·서비스 · 프로세스 관리시리즈를 선행 학습으로 두고, 동일한 개념을 보안관제(SOC) 관점에서 한 단계 확장합니다.
공격자는 자신의 프로세스를 숨기거나 정상처럼 위장합니다. 이번 편은 ps, /proc, readlink로 위장·은닉 프로세스를 벗겨내는 구체적 기법을 정리합니다.
의심 프로세스의 대표 징후:
comm이 [kworker]처럼 커널 스레드를 흉내/proc/PID/exe가 (deleted) — 디스크에서 지워졌지만 메모리에서 실행 중/tmp, /dev/shm, 홈 디렉터리에서 실행겉보기: ps에 [kworker/0:2] 처럼 보임 (정상 커널 스레드 흉내)
│ readlink /proc/PID/exe
▼
실제: /tmp/.x (deleted) ← 삭제된 바이너리가 /tmp에서 실행 중
│
└ 위장 + 은닉 + 비정상 경로 = 강한 악성 지표
커널 스레드는 exe 링크가 비어 있고 대괄호 이름([kthreadd])을 갖습니다. 악성 프로세스가 대괄호 이름을 흉내 내도, /proc/PID/exe를 읽으면 실제 파일 경로가 드러납니다. 진짜 커널 스레드는 exe가 없지만, 위장 프로세스는 실제 바이너리(종종 /tmp/... 또는 (deleted))를 가리킵니다.
'실행 파일 삭제'는 흔한 은닉 기법입니다. 공격자는 실행 후 바이너리를 지워 디스크 흔적을 없애지만, 프로세스가 살아 있는 한 /proc/PID/exe로 그 사실((deleted))과 메모리 이미지를 확보할 수 있습니다.
# 삭제된 실행 파일로 도는 프로세스 (강한 의심)
sudo ls -l /proc/*/exe 2>/dev/null | grep -i deleted
# 비정상 경로에서 실행 중인 프로세스
sudo ls -l /proc/*/exe 2>/dev/null | grep -E '/tmp/|/dev/shm/|/var/tmp/'
# 프로세스의 실제 실행 파일과 인자 확인
sudo readlink /proc/<PID>/exe; cat /proc/<PID>/cmdline | tr '\0' ' '; echo
삭제 바이너리 탐지의 형식입니다. (예시 출력 — 은닉 프로세스 가정)
$ sudo ls -l /proc/*/exe 2>/dev/null | grep -i deleted
lrwxrwxrwx 1 root root 0 Sep 25 14:40 /proc/8123/exe -> '/tmp/.x (deleted)'
$ sudo cat /proc/8123/cmdline | tr '\0' ' '; echo
./.x -c 203.0.113.10:4444
PID 8123이 /tmp/.x(이미 삭제됨)로 실행 중이고 인자에 외부 IP:포트가 보입니다 — C2 연결 정황입니다. (참고: 본 실습 컨테이너에는 이런 악성 프로세스가 없어 위는 형식 예시입니다.)
(deleted) 실행 파일/tmp·/dev/shm 실행여러 징후가 겹칠수록 신뢰도가 높습니다. 단일 징후는 오탐일 수 있으니 조합으로 판단합니다.
(deleted) exe 스캔(핵심)이 징후들은 MITRE ATT&CK의 T1036(Masquerading), T1055/실행 은닉 등에 대응합니다. Wazuh는 auditd execve와 rootcheck로 임시 디렉터리 실행·은닉 프로세스를 탐지하고, EDR은 (deleted) 실행을 강한 IOC로 봅니다. 탐지 시 프로세스 메모리 덤프·네트워크 연결(38편)을 함께 확보해 증거로 남깁니다.
[ ] (deleted) 실행 파일 스캔
[ ] 임시 디렉터리 실행 프로세스 확인
[ ] cmdline의 외부 IP/포트 확인
[ ] 커널 스레드 위장 여부 점검
다음 편에서는 28. 프로세스 트리 기반 침해 분석 를 다룹니다. 개별 프로세스를 넘어, 프로세스 '트리' 전체로 침해 흐름을 읽는 법을 봅니다.
본 실습은 격리된 테스트 VM(Rocky Linux / Ubuntu, VMware) 및 테스트 계정 환경을 기준으로 하며, 운영 서버를 대상으로 하지 않습니다. 실행 결과는 실제 캡처와 예시 출력을 명확히 구분해 표기합니다.