1082. 웹쉘 탐지 프로토콜 파서 - Web Shell Detection HTTP 파싱 L7 애플리케이션 계층 검사 난독화 회피 Base64 인코딩 방어체계

핵심 인사이트: (1081번 심화) 해커가 웹 서버 게시판의 '첨부파일 올리기' 기능을 통해 hack.php 라는 바이러스를 몰래 업로드했다(웹쉘 공격). 이 파일 하나만 올라가면 해커는 중국에서 내 서버의 모든 DB를 다 빼갈 수 있다. 방화벽이나 일반 IPS는 이걸 막지 못한다. 왜? 해커가 HTTP 패킷의 몸통 안에 바이러스를 꽁꽁 숨기고, 심지어 글자를 Base64나 외계어로 암호화(난독화)해서 올리기 때문이다. "야! 패킷 껍데기만 대충 보지 마! HTTP 통신이 오가는 걸 완벽하게 뜯어서(Protocol Parser), 첨부파일 영역만 핀셋으로 뽑아내! 그리고 그 외계어로 암호화된 글자들의 암호를 다 풀어서 진짜 속살을 확인한 뒤에야 서버로 들여보내라!" L7 계층의 집요한 부검 시스템, 웹쉘 탐지 파서다.

Ⅰ. 웹쉘 (Web Shell) 공격의 은밀한 침투

  • 개념: 해커가 원격에서 웹 서버의 시스템 명령어(cmd)를 마음대로 조종할 수 있도록 만들어 놓은 '웹 페이지 모양의 해킹 도구(백도어 스크립트 파일)'입니다. (jsp, php, asp 확장자)
  • 정상적인 웹 서비스 통신(포트 80/443)을 타고 파일 업로드 게시판을 통해 쑥 들어오기 때문에, 포트를 막는 일반 방화벽은 무용지물입니다.

Ⅱ. 일반 IPS 정규식의 한계: 난독화(Obfuscation)의 마법

  • 1081번에서 배운 IPS 정규식으로 eval()이나 system() 같은 웹쉘 명령어를 잡으려 했습니다.
  • 해커의 반격: 해커가 해킹 코드를 Base64로 인코딩하거나, XOR 연산을 때려서 e$va%l() 처럼 **완벽한 외계어 쓰레기 문자(난독화)**로 둔갑시켜 버립니다. 정규식 패턴 엔진은 이 외계어를 읽지 못하고 무사통과시켜 버립니다.

Ⅲ. 프로토콜 파서 (Protocol Parser)의 집요한 부검 🌟 핵심 🌟

정규식을 돌리기 전에, 먼저 HTTP 패킷을 완벽하게 수술대 위에 올리는 과정입니다.

1단계: HTTP L7 구조 완벽 분해 (디코딩)

  • 웹 방화벽(WAF)이나 고급 IPS 안에 내장된 프로토콜 파서가 작동합니다.
  • 패킷을 무지성으로 보지 않고, HTTP 문법에 맞게 칼로 해체합니다. "여기서부터 여기까지는 헤더(Header)고, 여기서부터는 바디(Body/Payload)네!"
  • 해커가 게시판에 파일을 첨부할 때 쓰는 multipart/form-data 구간을 핀셋으로 정확히 발라냅니다.

2단계: 다중 인코딩/압축 해제 (Normalizing) 🌟

해커의 위장을 모두 벗겨내는 핵심 기술입니다.

  • 파서가 뜯어낸 첨부파일 텍스트가 Base64로 암호화(인코딩)되어 있거나 Gzip으로 압축되어 있습니다.
  • 탐지 엔진은 정규식을 돌리기 전에, 이 암호와 압축을 1번, 2번, 심지어 3번까지 역으로 싹 다 풀어버립니다(정규화, Normalizing). 해커가 3중으로 꼬아놓은 외계어를 강제로 우리가 읽을 수 있는 쌩얼 문자열(원래 해킹 코드)로 돌려놓습니다.

3단계: 정밀 시그니처 및 동적 행위 탐지

  • 쌩얼이 드러난 텍스트 위에 그제야 1081번의 정규식(Regex) 칼날을 들이댑니다.
  • 최신 방어기법(샌드박스): 텍스트만 보고 애매하면, 가상 머신(Sandbox)에 그 웹쉘 파일을 던져넣고 가짜로 실행시켜 봅니다. "어? 이 파일 실행하니까 갑자기 관리자 비밀번호 폴더(/etc/passwd)를 열려고 하네? 100% 웹쉘이다! 차단!" (행위 기반 탐지)

Ⅳ. 우회 공격과 HTTPS의 딜레마

  • 해커가 아예 1063번 **HTTPS(TLS 1.3 암호화)**로 웹쉘을 업로드하면?
  • 인터넷 길목에서 패킷이 몽땅 까만색으로 칠해져 날아가므로 파서(Parser)가 아예 뜯어볼 수가 없습니다. 이를 잡기 위해서는 반드시 웹 서버 바로 코앞에 **SSL 복호화 장비(인증서 프록시)**를 세워, 암호를 한 번 풀고 쌩얼을 까본 뒤 파서를 돌려야만 방어가 성립됩니다.

📢 섹션 요약 비유: 웹쉘 업로드 공격은 테러리스트가 '정상적인 소포 상자(HTTP 패킷)' 안에 '시한폭탄(웹쉘 파일)'을 숨겨서 택배로 보내는 짓입니다. 일반 방화벽은 택배 아저씨 얼굴과 우표(IP/포트)만 정상인지 확인하고 그냥 통과시킵니다. 심지어 테러리스트가 폭탄을 신문지로 3중, 4중으로 칭칭 감아놓고(난독화/인코딩), "이거 그냥 장난감임"이라고 적어놔서 일반 엑스레이(단순 IPS)로는 절대 안 보입니다. 이를 잡아내는 **프로토콜 파서(Protocol Parser)**는 택배 물류 센터에 있는 **'집요한 폭발물 해체 로봇'**입니다. 로봇은 상자를 뜯어보고(HTTP 파싱), 안에 있는 내용물을 감싼 신문지, 뽁뽁이, 비닐을 1겹, 2겹, 3겹 끝까지 모조리 다 벗겨냅니다(인코딩/압축 해제 및 정규화). 포장지가 다 까발려져 진짜 쇠붙이 쌩얼(원래 코드)이 드러나면, 그제야 폭발물 탐지견(정규식 패턴 매칭)을 투입해 폭탄 여부를 1초 만에 적발해 내는 L7 계층의 궁극의 검열 시스템입니다.