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 계층의 궁극의 검열 시스템입니다.