서버 관리자에게 시스템 해킹은 가장 긴급하고 중대한 위협입니다. 공격자는 침투 후 자신의 활동을 숨기기 위해 정상적인 시스템 프로세스인 것처럼 위장한 백도어나 악성 스크립트를 실행합니다. 이때 단순히 ps
명령어로 프로세스 목록만 확인해서는 이상 징후를 놓치기 쉽습니다.
이번 글에서는 리눅스의 강력한 진단 도구인 pstree를 활용하여 프로세스 간의 부모-자식 관계를 분석하고, 교묘하게 숨어있는 악성 프로세스를 효과적으로 탐지하는 실전 방법을 알아보겠습니다.
pstree
는 이름 그대로 실행 중인 프로세스를 트리(Tree) 구조로 시각화하는 명령어입니다. 모든 프로세스의 시작점인 systemd
(또는 init
)부터 어떤 프로세스가 다른 프로세스를 파생시켰는지 한눈에 파악할 수 있습니다.
ps aux
와 같은 명령어는 모든 프로세스를 평면적인 목록으로 보여주기 때문에 관계를 파악하기 어렵습니다. 하지만 pstree
를 사용하면 정상적인 부모-자식 관계에서 벗어난 의심스러운 흐름을 직관적으로 찾아낼 수 있습니다. 예를 들어, 웹서버(httpd
) 프로세스가 셸(/bin/bash
)을 실행하는 것은 웹쉘 공격의 명백한 증거이며, pstree
는 이런 구조를 즉시 드러내 줍니다.
기본 명령어 pstree
만으로도 유용하지만, 아래 옵션을 함께 사용하면 훨씬 더 많은 정보를 얻을 수 있습니다.
# 가장 추천하는 조합: PID(-p), 사용자(-u), 전체 인수(-a) 표시
pstree -pau
-p
(PID): 각 프로세스의 고유 ID(Process ID)를 함께 표시합니다. 의심스러운 프로세스를 특정하여 kill
명령어로 종료할 때 필수입니다.-u
(User): 프로세스를 실행한 사용자 계정을 표시합니다. 특히 apache
나 nginx
같은 시스템 계정이 소유하지 않아야 할 프로세스를 실행했다면 해킹을 의심할 수 있습니다.-a
(Arguments): 프로세스 실행 시 사용된 전체 명령행 인수를 보여줍니다. 이를 통해 정상적인 프로세스로 위장한 악성 스크립트의 실체를 파악할 수 있습니다.아래는 정상적인 서버와 웹쉘에 감염된 서버의 pstree -u
출력 일부를 비교한 예시입니다.
sshd(2188)───sshd(3015)───bash(3020)───pstree(4510)
httpd(2380)─┬─httpd(2500,apache)
├─httpd(2501,apache)
├─httpd(2502,apache)
└─httpd(2503,apache)
httpd
메인 프로세스가 apache
사용자로 여러 개의 자식 프로세스를 생성하여 웹 요청을 처리하는 정상적인 구조입니다.
httpd(2380)─┬─httpd(2500,apache)
├─httpd(3110,apache)───sh(3112)───kworkerds(3115)
├─httpd(2502,apache)
└─httpd(2503,apache)
위 예시에서는 httpd
프로세스(PID 3110)가 셸(sh
)을 실행했고, 이 셸이 다시 kworkerds
라는 의심스러운 프로세스를 실행했습니다. 이는 전형적인 웹쉘 공격 패턴으로, 공격자가 웹 취약점을 통해 서버에 명령을 내리고 악성코드(주로 암호화폐 채굴기)를 실행한 상황입니다. ps
명령어로는 kworkerds
만 단독으로 보여 놓치기 쉽지만, pstree
는 이 관계를 명확하게 보여줍니다.
pstree
로 의심스러운 프로세스를 발견했다면, 다음 단계에 따라 즉시 대응해야 합니다.
lsof
또는 /proc
파일시스템을 이용해 프로세스가 사용 중인 파일과 네트워크 연결을 확인합니다.# PID로 열고 있는 파일과 네트워크 포트 확인
lsof -p [의심스러운_프로세스_PID]
# 어떤 파일이 실행되었는지 확인
ls -l /proc/[의심스러운_프로세스_PID]/exe
netstat
또는 ss
명령어로 외부와 통신하는 C2 서버(공격 서버) IP를 파악합니다.
# PID와 함께 네트워크 연결 상태 확인
netstat -antp | grep [의심스러운_프로세스_PID]
kill
명령어로 악성 프로세스를 종료합니다. 관련 부모 프로세스까지 함께 종료하여 재실행을 막는 것이 중요합니다.
# 먼저 정상 종료 시도
kill [의심스러운_프로세스_PID]
# 말을 듣지 않으면 강제 종료
kill -9 [의심스러운_프로세스_PID]
.php
, .jsp
파일을 찾고, cron
에 등록된 악성 작업이 있는지 확인하여 원인을 제거합니다.사후 대응도 중요하지만, 예방은 더 중요합니다. 아래 보안 수칙을 반드시 적용하세요.
/sbin/nologin
).공격자는 항상 시스템의 약한 고리를 노립니다. pstree
는 단순한 명령어처럼 보이지만, 프로세스의 관계를 분석하여 공격의 흐름을 파악하는 강력한 첫걸음입니다. 이 도구를 정기적으로 사용하여 서버의 상태를 점검하는 습관을 들인다면, 해킹 사고의 피해를 최소화하고 서버를 더욱 안전하게 운영할 수 있을 것입니다.
리눅스 에러 로그 확인과 문제 해결 (0) | 2025.09.12 |
---|---|
Rocky Linux / RHEL / CentOS root 패스워드 분실 시 초기화 (0) | 2025.09.10 |
지원 종료(EOL)된 CentOS 6에서 YUM 안될때 다시 사용하는 방법 (0) | 2025.09.04 |
리눅스 비밀번호 강도 확인 방법 (system-auth 기준) (1) | 2025.09.01 |
리눅스 파일 찾기 완전 실무 가이드 find, locate, grep 활용법 (0) | 2025.08.31 |