웹쉘(WebShell)이란 웹 서버에 업로드 되어 파일 탐색이나 시스템 쉘 명령 등을 실행할 수 있게 하는 파일이다. 공격자는 웹 브라우저를 이용해 서버 시스템의 파일을 탐색하고 쉘 명령을 내릴 수 있다. 악의적인 웹쉘 파일이 서버에 업로드 되는 것을 방지하기 위해 업로드 파일 확장자를 제한하는 등의 방법이 있다. 하지만 공격자는 다음과 같은 방법으로 이를 우회할 수 있다.
- 서버 사이드 스크립트(Server-Side Script)의 확장자 필터링을 우회하는 파일 업로드
- GIF, PNG, JPEG 이미지 등 업로드 가능한 확장자 파일에 악성 스크립트를 삽입하여 파일 업로드
본 글은 이 중에서 두번째 방식에 해당되는 내용으로, GIF 이미지 확장자 파일에 삽입된 웹쉘 악성코드에 대해 설명한다. GIF 파일은 실제로 유효한 이미지 파일일 수도 있고 아닐 수도 있다. 공격자는 PHP 나 ASP 등의 서버 사이드 스크립트 GIF 매직값(GIF87a/GIF89a) 뒤에 삽입하거나 파일의 가장 마지막인 TRAILER(3B) 뒤에 삽입한다. 일반적으로 서버는 유효한 이미지 파일 포맷 여부 확인을 매직값만 보고 판단한다. 공격자는 이를 이용하여 단 몇 바이트의 매직값 뒤에 악성 스크립트를 삽입하여 이미지 파일 조건을 통과한다.

이를 YARA 룰로 시그니처화 하면 다음과 같다. (실제 V3 제품의 진단 방식과는 차이 있음)
rule image_webshell {
meta:
info = "이미지 파일을 이용한 PHP 웹쉘 악성코드"
strings:
$gif = "GIF87a"
$gif2 = "GIF89a"
$php = "<?php"
$command = "$_GET['cmd']"
condition:
($gif at 0 or $gif2 at 0) and $php and $command
}
ASEC 분석팀은 몇가지 유형의 웹쉘 파일을 분석하고 이를 탐지할 수 있도록 진단을 반영하였다. 웹서버에서 웹쉘 악성코드가 탐지되었다면 이로 인한 추가 악성코드 발견이나 침해 사고가 발생했을 수 있으니 반드시 정밀 검사가 필요하다.
[파일진단]
WebShell/GIF.Backdoor.GEN (2020.12.02.03)
[IOC]
2d1bc085815fcdc994b24ea97cdf1170

Categories:악성코드 정보