분석보고서 이동현 (dhclub20@naver.com) SK Infosec Co., Inc MSS 사업본부침해대응팀모의해킹파트
Table of Contents 1. 개요... 3 1.1. 배경... 3 1.2. 목적... 3 2. 공격분석... 4 2.1. Cookie Injection... 4 2.2. Cookie Injection의발생원인... 5 2.3. Cookie Injection 공격방법... 6 2.4. % 를이용한탐지우회... 9 3. 대응방안... 12 3.1. Web Application... 12 3.2. 보안장비탐지대책... 13 3.3. DBMS 보안설정... 14 3.4. IIS 로깅설정... 15 4. 결론... 16 2
1. 개요 1.1. 배경 2008년 4월초전세계 150만개이상의웹사이트에악성코드를유포시킨 Mass SQL Injection이또다시기승을부리고있다. 이번 Mass SQL Injection 공격은 IDS, IPS, WAF 과같은보안장비에탐지되지않고공격을가해더욱이슈가되고있다. 이에따라피해당한사이트들은침해사고가일어난이후에인지하게되었고, 로그기록에남지않은경우가많아침해사고분석에도많은어려움이있었다. 이는기존의공격방법과는같지만 Cookie Injection을통한보안장비의패턴매칭을우회하는기법을사용하였기때문이다. 이번침해사고규모는지난번과마찬가지로대규모이고 [ 그림 1] 과같이 Google 검색을통해피해의심각성을알수있다. [ 그림 1. Google 을통해감염사이트검색 ] 1.2. 목적 10월 19 20일발생한 Mass SQL Injection의공격형태는 IDS/IPS/WAF를우회하여공격하였다는것이초점이며이문서에서는공격형태분석과이에대한대응방안에대해서알아보겠다. 3
2. 공격분석 2.1. Cookie Injection Cookie Injection이란기존 Web Application의 Parameter 전달방식인 GET 이나 POST 를사용하지않고 Cookie를통해서 Parameter를전달하는방식이다. 현재대부분의보안장비에서는 GET 이나 POST 방식에대해서만검사를하고 Cookie값에대해서는검사를하지않기때문에 Cookie를통해악성코드를삽입할경우보안장비탐지를우회할수있다. 대부분의사이트는 [ 그림 2], [ 그림 3] 과같이 Parameter 값을전송한다. [ 그림 2. GET 을통한 Parameter 전송방식 ] [ 그림 3. POST 를통한 Parameter 전송방식 ] 4
Parameter값을아래그림과같이 Cookie에삽입하여전달할경우 GET이나 POST 방식과같이전달받게된다. [ 그림 4. Cookie 값을통한전송방식 ] Cookie 로 Parameter 값을전송한결과 GET 이나 POST 방식과똑같은반응을보인다. [ 그림 5. 정상적인 Response ] 2.2. Cookie Injection의발생원인대부분의사이트에서 Parameter 전송방식을 GET, POST 전송방식으로사용하고전달받는페이지에서도 GET, POST 방식으로값을받는다. 하지만 Web Application 환경설정에서전역변수화선언을하고사용하거나, [ 그림 6] 의경우처럼 Request() 함수를사용할경우 GET, POST, COOKIE 변수를구분하지않고전달받는다. 이에 Parameter를 Cookie에삽입하여전송하면이를변수로인식하게된다. 이러한환경을이용하여 GET, POST 대신 COOKIE값에삽입한다면전달받는페이지에서 Parameter값을인식하게된다. 5
[ 그림 6. Request() 함수사용 ] 2.3. Cookie Injection 공격방법 (1) 자동화툴소개 Cookie Mass Injection을비롯해여러가지웹취약점을찾아공격하는중국자동화툴이다. 최근이툴을사용하여중국발해킹이많이이루어지고있으며 Script Kid에의한많은공격이예상된다. [ 그림 7. 중국자동화툴 ] 6
(2) WAF/IDS/IPS 우회방법현재대부분의보안장비는 Cookie 값을검사하지않는다. 따라서웹취약점이존재하지만 WAF에의해공격이차단되는사이트는 Cookie Injection을통해 WAF 우회공격이가능하고 IDS/IPS에도탐지되지않는다. 1) SQL Injection 테스트결과 WAF에의해 SQL Injection 이차단되고있는사이트에서 Cookie Injection을통한우회공격이가능하였다. [ 그림 8. WAF 우회 SQL Injection 성공 ] 2) XSS (Cross Site Script) 같은방법으로 XSS (Cross Site Script) 역시가능하였다. XSS Cheat sheet에있는다양한패턴을모두차단하는 WAF 환경에서도아래그림과같이 WAF에서차단하는가장기본적인 XSS 패턴도사용가능하다. [ 그림 9. WAF 우회 XSS 적용 ] 7
현재이슈화되고있는 Cookie injection 은 IIS/ASP 환경이지만 PHP 환경에서도가능하였다. 이러한문제는 php.ini 설정에서 register_globals=on 으로전역변수처리를했을경우발생한다. [ 그림 10. PHP Cookie Injection] 3) Cookie Mass SQL Injection Mass SQL Injection이란기존의 SQL Injection의대량화공격이라는것이다. SQL Injection 처럼 DB정보를얻어내는목적은아니지만불특정다수를상대로피해를입히는공격이다. 피해증상은변조된사이트를방문시악성코드가설치되어있는사이트로이동하게되어감염되거나 bot이설치되어 DDoS 공격에좀비컴퓨터로이용된다. 공격구문의일반적인형태는해당사이트의 sysobjects테이블과 sysco lumns 테이블을참조하여 sysobjects테이블에서 type U(usesr) 테이블의모든행을가져오고 varchar, nvarchar, text, ntext 형태의컬럼에공격자가원하는 <script> ~ </script> 를 update 문을이용하여갱신함으로써공격이이루어진다. 이러한 mass 공격구문을 SQL Injection point 가존재하는부분에 Cookie Injection 하는것을 Cookie Mass SQL Injection이라한다. 8
[ 그림 11. Cookie Mass SQL Injection] 2.4. % 를이용한탐지우회 (1) 우회원리 Cooki Injection 과같이최근가장이슈화되고있는 WAF/IDS/IPS 탐지우회로 % 를사용한방법이있다. 우회방법은 IIS/ASP 환경에서는 % 뒤에이어지는두글자가 16진수가아닌경우 IIS에서 % 가삭제되는요인을이용한것이다. 이를이용하여보안장비패턴매칭을우회한다. 따라서웹취약점이존재하는 IIS/ASP 환경에서이러한방법으로공격구문을삽입할경우 WAF/IDS/IPS 에도달할때까지는변형된공격으로전달되어탐지우회하게되는것이다. 이번 Mass SQL Injection 공격도 declare구문을 de%clare, dec%clare 방식으로 Mass SQL Injection 패턴인 declare 패턴을우회할수있다. % 적용방법은 [ 그림 12.] 와같다. [ 그림 12. % 적용화면 ] 9
[ 그림 13. 정상반응확인 ] (2) IIS에서 % 삭제위치이점을이용하여만약 IIS에서 % 가 DBMS로전송되기직전에삭제된다면웹소스코드의 Replace() 공격단어필터링 (union, select, sysobjects 등 ) 만한경우, 우회가능하기때문에이에 IIS 어느부분에서삭제가능한지여부를테스트해보았다. 테스트결과 % 삭제는 IIS에 Parameter가도착하였을때삭제가되어웹소스상에동작하기때문에원래의문자로동작하게되는것을확인할수있었다. 테스트결과는아래 [ 그림 14], [ 그림 15], [ 그림 16] 와같다. [ 그림 14. % 로변환해서전달 ] 10
[ 그림 15. 소스코드상에서 union 단어필터링 ] [ 그림 16. union 단어필터링우회실패 ] 11
3. 대응방안 3.1. Web Application (1) 웹소스코딩시 GET 과 POST 를구분하여 Request() 함수를사용하여야한다. [ 그림 17. GET 방식만받는방법 ] [ 그림 18. POST 방식만받는방법 ] (2) 지역변수화사용한다. php.ini 설정에서 register_globals=off 로지역변수화하고 get 과 post 를구분하여받는다. [ 그림 19. php.ini 설정 ] 12
(3) Sever side 에서입력값길이제한을한다. Client측에서입력값길이제한을할경우조작이가능하므로 Server side에서길이제한을해준다. if len( 입력값 ) =< 원하는문자열길이 then end if 에러루틴 3.2. 보안장비탐지대책 (1) Rssp user_define 으로탐지불가로 trons 을이용한 signature 업데이트 13
3.3. DBMS 보안설정 % 를이용하여 injection을시도할경우많은패턴방식이존재하므로 IDS로막을수있는방법은없다. 또한웹소스상에서는 % 가삭제되고사용되므로웹소스필터링으로도차단할수가없다. 그러므로 sysobjects 를사용자제한하고, 임시방편으로 db자체에서 script구문이삽입되지않도록 [ 그림 21] 와같은방법이있다. [ 그림 20. sysobjects 사용자제한설정 ] </script> 구문 db에삽입안되게하는쿼리 create trigger stopupdatetrigger on TableA for update as declare @coll varchar(4000) select @coll=coll from TableA if @coll like '%</script>%' ROLLBACK TRANSACTION; go </iframe> 구문 db에삽입안되게하는쿼리 create trigger stopupdatetrigger on TableA for update as declare @coll varchar(4000) select @coll=coll from TableA if @coll like '%</iframe>%' ROLLBACK TRANSACTION; go [ 그림 21. DB script 차단설정 ] 14
3.4. IIS 로깅설정 IIS의디폴트설정일경우웹로그상에도남지않으므로침해사고분석시난감한상황에놓이게된다. 이런상황을막기위해아래그림과같이로깅속성부분에쿠키로그부분을체크해준다. [ 그림 22. IIS 로깅설정 ] 15
4. 결론 Mass SQL Injection은한때침체하였다가최근들어변종수법으로다시기승을부리고있다. 이러한피해를사전에차단하기위해이문서에서제시한보안설정을모두점검하여 Mass SQL Injection에대응하여야한다. 16