웹쉘의현황및분석 2007. 2. 본보고서의전부나일부를인용시반드시 [ 자료 : 한국정보보호진흥원 (KISA)] 를명시하여주시기바랍니다.
1. 개요 일반적으로웹서비스에는게시판이나자료실과같은파일을첨부하는기능을포함한다. 이때 txt, jpg, doc와같은데이터파일종류이외에악의적으로제작된스크립트파일인웹쉘을업로드하여해킹하는사고가빈번히발생하고있다. 이와같이서버명령을실행할수있는 asp, cgi, php, jsp등과같은웹쉘을이용하여웹서버에명령을실행해관리자권한을획득한후웹페이지소스코드열람, 서버내자료유출, 백도어프로그램설치등의다양한공격이가능하다. 최근웹쉘은단순한쉘권한실행뿐만아니라 DB 조작등을포함하고있으며탐지를어렵게하기위해웹쉘의아주일부분만을피해시스템에업로드하는등그유형이나날이발전하고있다. 이에본사고노트에서는현재존재하는수많은웹쉘의일반적인유형들을살펴보고최근사고현장에서자주발생하는 ASP 木 2006에대한분석을통하여웹쉘을이용한사고를예방하는데도움이되고자한다. 2. 웹쉘의현황 1) 기본기능 웹쉘프로그램은인터넷에널리유포되어있으며파일업로드취약점을이용하는데취약점확인방법도간단하여웹쉘을이용하는공격방법은상대적으로아주쉽게이루어진다. 다음은파일첨부가가능한게시판의글쓰기를이용하여웹쉘파일인 list.asp 파일을업로드하는화면이다. - 1 -
게시판을통해업로드된 list.asp를열면쉘명령어가실행되어디렉토리내용에대한 결과가보여지는것을알수있다. 이는가장일반적이고기본적인웹쉘의기능이다. 2) 암호화및패스워드설정 다음은최근발견된웹쉘코드로소스가암호화되어있다. 또한다음과같이웹쉘제작자만이사용하도록패스워드를설정해놓기도한다. - 2 -
이렇게많은웹쉘들이암호화와패스워드설정으로탐지를어렵게하거나실행에제한 을두고있다. 3) 다양한기능 다음은 DB 내용의열람및수정, 삭제를용이하게하기위해직접쿼리문을입력하여바로실행되도록구현된웹쉘프로그램이다. 또한 Shell 프로그램의입력을용이하게하기위해파일명과파일내용을직접입력하도록구현된웹쉘프로그램이다. 위와같이 test.html 파일의내용을직접입력하여파일을생성한후해당파일의내용을살펴보면그대로생성되어있는것을알수있다. - 3 -
다음은명령어입력을두가지로나누어공격하는웹쉘프로그램의예이다. Wait command는 dir과같이, 실행한후그결과를확인해야하는명령어나프로그램에서사용되는것으로위와같이 C 디렉토리의내용이보여지는것을확인할수있다. Notwait command는실행한후그결과를볼필요가없으며백그라운드에서계속실행되는 nc.exe와같은프로그램을실행할때사용된다. 위와같이피해시스템에 nc.exe 파일을업로드한후웹쉘프로그램을이용하여특정포트를열면다음과같이해당포트 (3333) 가열리는것을확인할수있다. - 4 -
특히 nc.exe 프로그램으로공격자가원하는서버를열어놓은후피해시스템이이특정 서버로연결하도록리버스텔넷을이용하여피해시스템의쉘권한을얻는방법을쓰기도 한다. 3장에서다루고있는 ASP 木 2006과같이실제웹쉘에는이러한기능뿐만아니라더욱다양한기능을종합적으로구현해놓은프로그램들이많이존재한다. 3. ASP 木 2006 분석 웹쉘프로그램 ASP 木 2006은여러가지기능들을편리하게제공하며사용자의기호에맞게선별하여사용할수있고강력한 Client-Server 기능을제공하여실제웹쉘프로그램을피해시스템에업로드할필요가없다는것이특징이다. ASP 木 2006의이러한특징때문에실제해킹사고에서가장많이발견되고있으며웹쉘프로그램이피해시스템에존재하지않기때문에탐지가어려운것이사실이다. 1) 구성및기능 ASP 木 2006 프로그램은다음과같은주요파일들로구성된다. - 2006.asp : 악성웹쉘프로그램 - 2006x.exe : 클라이언트서버기능제공프로그램 - 2006z.exe : 2006.asp의기능을선별하여생성하는프로그램 - hididi.ini : 설정파일 ASP 木 2006은서버정보, 시스템사용자정보, 통신정보, Shell 실행, 파일조작, 데이터베이스조회및수정등의기능을제공하며패스워드가설정되어있어패스워드를입력해야실행시킬수있다. 다음은 2006.asp 파일을실행한화면으로패스워드를입력받는부분이다. - 5 -
소스에삽입되어있는패스워드를입력하면웹쉘이실행되어다음과같은메뉴를볼 수있다. 2) 특정기능선별 2006z.exe는 2006.asp의기능중원하는기능만선별하여새로운 2006_Lite.asp 파일을생성해준다. 다음그림과같이화면의왼쪽부분에서탑재하고자하는기능을선택하여체크한후 2006.asp 파일을열어 2006_Lite.asp를생성시킨다. 2006.asp의기능중일부기능만탑재하여생성되므로파일의사이즈가차이가나는것을알수있다. - 6 -
3) 클라이언트 - 서버기능 ASP 木 2006에서제공하는클라이언트-서버기능은실제피해시스템에악성웹쉘자체를업로드할필요가없게한다. 즉공격자자신의시스템이나제3의시스템에존재하는악성웹쉘프로그램으로피해시스템에공격을가할수있게된다. 2006x.exe 프로그램은이러한기능을위한중간코드 server.asp와위에서생성된공격용웹쉘프로그램인 2006a_Lite.asp를 html파일로변환시켜주는역할을한다. 생성된 server.asp의내용을살펴보면아래와같이매우짧은스크립트코드로실제피해시스템에는이내용만업로드시키면된다. 이는 server.asp 파일자체를피해시스템에업로드하여사용할수도있으며또는피해시스템에존재하는정상적인 asp파일에해당코드만삽입하여사용할수도있다. 즉, 피해시스템에서는실제웹쉘코드를찾을수없다는것이 ASP 木 2006이제공하는가장큰특징이다. - 7 -
4) 공격과정 이제생성된 2006a_Lite.asp.html 파일과 server.asp 파일로어떻게공격을실행하는지살펴보자. 1 파일업로드취약점등을이용하여공격하고자하는시스템에위에서생성된 server.asp 파일만업로드한다. 2 2006x.exe를이용하여공격용프로그램으로생성한 2006_Lite.asp파일을 htm 문서로변환시킨 2006_Lite.asp.htm파일을공격자자신의시스템에서실행한다. 3 공격하고자하는시스템에업로드된 server.asp 경로를입력한후버튼을누르면새로운 IE 창이뜨면서피해시스템의 server.asp가실행되는데이는실제악성웹쉘프로그램인 2006_Lite.asp가실행되는것이다. 다음그림은 2006_Lite.asp가실행되면서패스워드를입력받는화면이실행되는것을볼수있다. 5) 조치방법 이러한방법으로공격당한시스템을분석할경우실제악성웹쉘프로그램이존재하지않으므로악성코드를찾아내기가난해하다. 새로생성된웹쉘파일을찾거나다음과같은악의적인코드 Execute(Session( lcxmarcos")) 가정상 asp에포함되지않았는지확인하여해당코드부분을삭제해야한다. - 8 -
4. 예방대책 1) 홈페이지파일업로드취약점제거 파일업로드가불필요한게시판의경우는업로드의기능을완전히제거하고필요한경우에는파일의확장자를체크한다. 확장자를체크하는루틴은 javascript 같이 html 파일내에포함되어서는안되고반드시서버사이드에서실행되는 CGI 파일등에존재해야한다. 또한업로드를제한하는 asp, cgi, php, jsp 등의확장자를막는방법으로구현하기보다는허용하는확장자즉 txt, hwp, doc, pdf, gif 등의업로드가능한파일확장자만올릴수있도록체크하는것이바람직하다. 특정확장자만막는경우에는우회해서올릴수있는방법들이존재하기때문이다. 2) 파일업로드폴더의실행제한 웹서버의파일업로드전용폴더를만들고전용폴더의스크립트파일실행을제한하여해당폴더내에있는파일이실행되지않도록해야한다. 윈도우서버의경우 [ 설정 ] -> [ 제어판 ] -> [ 관리도구 ] -> [ 인터넷서비스관리자 ] 에서마우스오른쪽버튼을클릭하여 [ 등록정보 ] -> [ 디렉토리 ] 를선택해실행권한을 없음 으로설정한다. 리눅스의경우 httpd.conf와같은웹서버설정파일에서변경한다 3) SQL Injection 방지 웹쉘공격은파일업로드취약점뿐만아니라 SQL Injection을이용해서도가능하므로 DB 쿼리와관련된다음과같은특수문자들을필터링하여사용자의입력값에포함되어있을경우에러를발생시켜악의의쿼리가실행되지않도록방지해야한다. ;, - (space) 사용자로그인페이지나게시물의번호를입력받는등의사용자입력을받아그변수를 DB 쿼리문에삽입하여사용하는모든경우에이러한필터를적용하여단한개의페이지에서라도 SQL Injection의허점이존재하지않도록주의해야한다. SQL Injection 공격은에러메세지를참고하여이루어지는경우가대부분이므로에러메세 - 9 -
지의출력만막아도어느정도방지할수있다. 다음은 IIS 서버에서의에러메세지를제 한하는방법이다. 5. 탐지방법 실제피해시스템에서웹쉘프로그램을탐지하는방법으로파일내특정문자열을이용하여찾는방법이있다. 다음은현재가장많이발견되고있는 ASP 木 2006을포함한웹쉘프로그램을찾을때유용하게검색할수있는키워드이다. 단모든웹쉘프로그램을아래의키워드로탐지가능한것은아니며새로운웹쉘프로그램이유행할경우다른키워드가요구될수있다 문자열설명 lcxmarcos 최근발생하는사고현장에서자주발견되는웹쉘코드에삽입된고유문자열 Session("#"), Session("1") 최근발생하는사고현장에서자주발견되는웹쉘코드에삽입 Request("#"), Request("1") 최근발생하는사고현장에서자주발견되는웹쉘코드에삽입 cmd.exe command.com 대부분의 웹쉘에서 사용 Encode 암호화된 웹쉘코드에 사용 charset에 설정된 중국어 코드 피해시스템에서 발견되는 대부분의 웹쉘이 gb2312 중국에서 제작된 것이므로 본 키워드가 포함되어 있으나 이는 중국어로 제작된 정상적인 파일에도 포함되고 있으므로 유의해야 함 - 10 -