Security/악성코드분석보고서

EXIF 메타데이터에 PHP WebShell을 은닉한 JPEG 악성코드 분석

jp_rennka 2025. 5. 29. 19:57

Analyzed date : 2022-07-29

fixed date : 2025-05-27

Ahutor : github.com/miho030

1. 개요

공격자는 웹 서버의 취약점을 이용하여 PHP 파일에 악성 코드를 삽입하고, EXIF 메타데이터에 인코딩된 악성 명령을 포함한 이미지 파일을 업로드함으로써 원격 명령 실행(RCE)을 수행할 수 있는 WebShell을 구축한다. 이러한 방식은 이미지 파일의 정상적인 외형을 유지하면서도 서버 측에서 악성 코드를 실행할 수 있어 탐지가 어렵다.

TAG : webshell, backdoor, Jpeg, php

2. 주요 내용

해당 분석에서는 JPEG 형식의 이미지 파일에 은닉된 악성 WebShell 명령문을 중심으로 정적 분석과 동적 분석 기법을 활용하여 악성 행위를 추적하였다.

1. 정적 분석

  • 대상 파일의 EXIF 메타데이터를 중심으로 분석이 이루어졌으며, 'Make' 와 'Model' 필드에 base64로 인코딩된 악성 문자열이 삽입된 것을 확인하였다.
  • 'make' 필드에는 "/.*/e"가 저장되어 있었으며, 이는 PHP의 preg_replace() 함수와 함께 사용될 때, 해당 문자열을 실행 가능한 코드로 변환하는 역활을 한다.
  • 'Model' 필드에는 eval(base64_decode(...)) 형태의 실질적인 페이로드 코드가 저장되어 있었고, 이를 디코딩한 결과, "$_POST["zz1"]" 파라미터를 통해 명령이 전달될 수 있도록 구성되어 있었다.

필자는 EXIF 기반 WebShell이 시그니처 기반 백신 엔진을 우회할 수 있는 구조임음 강조한다.

사용된 주요 PHP 함수 및 공격 기법

  • 공격자는 PHP 파일에 preg_replace() 함수를 이용해 EXIF 메타데이터의 'Make' 또는 'Model' 필드에 삽입된 base64 인코딩된 악성 코드를 eval(base64_decode(...)) 방식으로 실행하도록 구성한다.
  • eval(), preg_replace(), exif_read_data(), isset(), stripslashes() 등의 함수 조합을 통해 코드 인젝션이 가능하도록 구성되었으며, preg_replace() 함수의 /e 옵션을 통한 코드 실행 취약점이 핵심적인 공격 벡터로 사용되었다.

 

 

공격 시나리오

필자는 실제 공격 시나리오를 시뮬레이션하여, 웹서버 상의 PHP코드에 exif_read_data() 및 preg_replace() 호출을 통해 악성 명령어가 실행되는 조건을 추측하였다.

  1. 피해 시스템 서버에 이미지 파일 업ㄹ로드
  2. PHP 파일에 EXIF 데이터를 읽는 악성 코드를 삽입한다.
  3. 악성 명령을 포함한 EXIF 메타데이터를 가진 이미지 파일을 다시 업로드한다.
  4. 클라이언트가 특정 파라미터를 포함한 요청을 전송한다.
  5. 서버는 EXIF에서 명령을 추출해 eval()로 실행한다.

이러한 유형의 공격 방식은 취약한 보안 대첵을 가진 웹서버에 있어 치명적일 수 있다. 공격자는 기존의 .php웹쉘 대신 정상 이미지 파일에 악성코드를 삽입하여 서버에 업로드함으로서 확장자 필터링 기술을 우회할 수 있다. 공격자는 해당 이미지 파일을 호출함으로서 외부에서 php 명령을 서버 내부에서 실행할 수 있으며, 이러한 방식은 보안 시스템의 허용 포트(80, 443) 내에서 동작하기 때문에 로그 회피와 탐지 회피가 동시에 이루어지는 고도화된 은닉 기술을 사용한다.

보안 대응 방안

  • 이미지의 EXIF 메타데이터를 검사해 악성 코드 삽입 여부를 확인한다.
  • PHP의 eval() 함수 사용을 제한하거나 비활성화한다.
  • 파일 업로드 검증을 강화하여 허용된 형식과 내용을 엄격히 제한한다.

 

보고서 열람

* (데스크탑 환경에서 열람하면 PDF 임베드 뷰어를 통해 보고서 확인 가능)

 

 

악성코드 분석 보고서 첨부 파일

4e3b3ef20333a9d1366ac6a73dda9857ff1ace11a2deebf8e0a0e1ca29760698.pdf
0.18MB