보안정보

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

webshell 패턴 수집, 점검 스크립트 실행 및 유형별 분석방법

2020.06.30

14,780


 

 

 

01. 개요

 

webshell은 간단한 서버 스크립트 (jsp,php,asp ..)를 활용하여 웹페이지에서 서버에게 명령어를 실행하기 위해 만들어 진다. 이러한 스크립트들은 서버의 관리자 권한을 획득하기 위해 웹서버의 취약점을 통해 업로드 된다. 

 

웹이 서버에서 구동되고 있다 하여도 취약점이 존재하지 않으면, 수행되지 않는다. 만약 업로드되었다 하더라도 실행 권한이 없으면, 실행이 되지 않는다. 하지만 취약점과 실행권한이 존재할 때는 서버 내부에 명령을 수행하여 주요 정보를 유출, 소스코드 확인, 홈페이지 위변조 등의 행위를 할 수 있으므로 침해 범위가 넓어 질 수 있다.

 

한국인터넷진흥원(KISA)에 따르면 해킹 피해를 입은 서버의 90% 이상에서 webshell이 발견되었다고 한다. 

 

이번 호에서는 이러한 webshell을 점검할 수 있는 webshell 패턴 수집방법과 점검 스크립트 작성 및 구동 그리고 websehll 유형별 분석방법에 대해 알아보자.

 

02. webshell 검색패턴 수집

 

1) webshell 키워드 검색

 

기존에 webshell 점검을 수행했던 회사의 경우 자체적으로 보유한 webshell 패턴이 있겠지만, 처음으로 점검을 진행한다고 하면 개발자 오픈커뮤니티(https://github.com)에 접속하여 검색 키워드에 webshell 을 입력하고 검색을 진행한다. 

 


[그림 4-1] webshell 키워드 검색

 

처음 검색 시 검색 옵션은 가장 일치하는 Best match에 해당하는 결과를 확인할 수 있다.

 


[그림 4-2] webshell 키워드 검색 결과 확인

 

결과물 중 하나의 링크(예: tennc / webshell)에 직접 접근하여 소스코드를 확인 후 코드 내에서 webshell이라고 판단하는 문자열을 추출한다. 

 


[그림 4-3] 소스코드에서 webshell로 판단하는 문자열 추출

 

2) Git 프로그램 활용하기

 

각각의 링크에서 소스코드를 확인하여 webshell로 판단하는 문자열을 확인하는 데 시간 소요가 많으므로 Git 프로그램을 활용하여 여러 개의 결과물 링크에 대해서 링크복사를 통해 일괄로 다운로드 할 수 있다.

 


[그림 4-4] 결과물 링크에 대한 링크 주소 복사

 

Git 프로그램은 아래 링크 경로에서 운영체제 버전에 맞게 다운로드 하여 설치한다. 

< 다운로드 경로 : https://git-scm.com/download/win >

 


[그림 5] Git 프로그램 다운로드 방법

 

Git 프로그램 설치가 완료되었다면 실행명령어 사용방법에 대해 알아보자. 

 




[그림 6] 복사한 경로 Git 명령어 형태로 메모장에 저장

 



 

[그림 7] 메모장의 내용을 Git 명령어로 실행

 

Git 명령어 실행 후 여러 개의 결과물 링크에 대한 디렉토리가 생성되었음을 확일할 수 있다.

 


[그림 8] Git 명령 결과 확인

 

3) webshell 패턴 추출하기

 

notepad 프로그램 등을 이용하여 소스코드를 열람한 후 패턴으로 추가할 만한 문자열을 수동으로 추출하며, 주로 웹쉘 형태로 개발될 가능성 높은 소스코드를 선별하여 추출한다.

 

추출 시 일반적인 소스코드 개발자가 사용하지 않을 것으로 판단되는 패턴으로 추출하여야 하며, 어떤 패턴이 추출되냐에 따라 웹쉘 점검 스크립트의 오탐률이 상승할 수 있으므로 주의해야 한다.

 


[표 1] webshell 유형별 탐지패턴

 

03. webshell 점검 스크립트

 

webshell 점검 스크립트는 find 명령어를 이용하여 서버에서 실행될 수 있는 소스코드로 점검자가 정의한 웹쉘 패턴에 일치하는 문자열이 있는 소스코드를 찾아내는 프로그램이다. 

 

UNIX 계열과 WINDOWS 계열을 사용하는데 여기에서는 UNIX 계열에 대한 점검 스크립트 내용과 구동방법을 알아보자. 

 

1) UNIX 계열 스크립트

 



[그림 9] 파일 사이즈 설정 및 점검대상 설정

 

 

[그림 10] 스크립트 내에서사용할 변수 설정



 

[그림 11] webshell 패턴 자동 압축해제

 


[그림 12] webshell 패턴 점검 결과 저장

 



[그림 13] result_log.tsv 출력정보

 



[그림 14] webshell 패턴 문자열 검색 및 파일 생성

 



[그림 15] webshell 결과를 txt 파일로 생성

 



[그림 16] 결과 요약파일 생성

 

2) 점검 스크립트 구동 방법

 

점검 스크립트 명령어 파라미터에 점검 디렉토리 경로를 입력하여 구동하며, 해당 파라미터 하위에 존재하는 모든 파일의 내용(소스코드)을 분석하여 webshell 패턴 포함(탐지)여부를 확인한다.

 

webshell이 탐지되면 절대경로를 기록한 후 복사본을 생성하고 결과를 기록하자.

 


[그림 17] webshell 점검 스크립트 구동방식

 

webshell 점검 스크립트 파일과 패턴이 저장된 파일 2개를 검색된 웹쉘 파일 복사본이 저장될 수 있도록 디스크 공간이 복사 후 점검 대상 서버에서 스크립트 파리에 대한 실행 권한을 root 권한으로 부여해 충분한 디렉터리에 고 점검대상 디렉토리를 지정하여 점검을 실시한다.

 


[그림 18] webshell 스크립트 실행권한 변경

 


[그림 19] 점검대상 디렉토리 지정하여 스크립트 실행

 


[그림 20] webshell 스크립트 결과 확인

 

점검이 완료되면 스크립트가 실행된 디렉트로 내 점검결과 폴더 및 결과 파일 3개가 생성된다.

 


[그림 21] webshell 점검결과 폴더 및 파일

 


[표 2] webshell 점검결과 폴더 및 파일 설명

 

04. webshell 유형별 분석 방법

 

1) webshell로 판단할 수 있는 대상

 

소스코드에서 파일 확장자가 확인된 경우 또는 각종 file browser 형태의 소스의 경우 확장자 구분 없이 webshell로 판단하며 탐지된 파일 중 .as%70, .js%70, ;.jpg, ;.gif 같이 확장자 부분에 특수문자가 삽입된 비정상적인 파일도 실행 여부와 상관없이 webshell로 판단한다.

 

비정상 파일에 대한 webshell 구분이 명확하지 않다면 webshell과 동일한 수준으로 간주하여 삭제하여야 한다.

 


[그림 22] 날짜 또는 시간 형식으로 되어 있는 파일명

 


[그림 23] jsp File browser 소스코드

 

2) 단순 소스코드로 판단할 수 있는 대상

 

그림파일 확장자(.jpg, .gif, .bmp, .png 등)를 제외한 나머지 확장자 파일 이름의 형식 또는 파일 이름의 길이가 동일한 내역이 확인된 경우 AP 개발 과정에서 이력관리를 목적으로 만드는 형태이므로 단순 패턴 매칭으로 판단할 수 있다.


[그림 24] 날짜 또는 시간 형식의 파일

 

웹 컨테이너(jeus, weblogic, tomcat 등)에서 공통으로 사용되거나 각종 어플리케이션(java, oracle, openssl 등)이 설치된 경로에 존재하는 기본 소스코드 또는 컴파일 된 파일(.c, .h, .java, .class 등) 등     웹 서비스 구동에 필요한 소스코드 경우 webshell로 볼 수 없지만, 오픈소스의 경우 내용을 전부 확인하여 보수적으로 판단하여야 한다.

 


[그림 25] 기본 소스코드 또는 컴파일 된 파일명

 

webshell에서 사용되는 문자열이 매칭되었지만 한글 주석처리가 되어있는 경우 서비스 목적으로 생성된 파일로 구분할 수 있다

 


[그림 26] 한글 주석처리 된 기본 소스코드 또는 컴파일 된 파일명

 

05. 결론

 

webshell 패턴은 웹사이트 또는 침해대응 과정에서 충분히 수집할 수 있지만 점검 스크립트를 작성하는 내용은 Linux Shell Script를 충분히 이해하고 내부 테스트를 거쳐 운영서버에서 발생할 수 있는 오류를 최소화한 후 적용하여야 한다..

 

침해대응 입장에서 보안장비에서 webshell을 탐지 및 차단하기 위한 규칙을 개발하는 부분은 분명한 한계가 있기 때문에 분기별로 webshell 점검을 진행하거나, 운영되는 웹서버가 적은 경우 cron에 스케줄을 등록하여 주기적으로 점검하는 것도 좋은 방법이다.