Modular Universal XSS Worm

웹 어플리케이션 2008. 12. 19. 11:31 Posted by TEAMCR@K
▷ 작성자 : 니키 (ngnicky@a3sc.co.kr)
▷ 편집자 : 니키 (ngnicky@a3sc.co.kr)


문서 작성일 : 2008년 1월 10일
최종 수정일 : 2008년 12월 19일


Modular Universal XSS Worm


1. 개 요
Modular Universal XSS Worm이란 어떤 환경이나 장소에서든 사용할 수 있게 AJAX 기반으로 하나의 패키지(모듈)형식으로 해놓은 Worm 샘플 코드이다. XSS(Cross Site Scripting) 취약점이 존재하는 어떤 곳에서든 사용할 수 있으며, SQL Injection, DOM Session, Remote Shells, DoS(Denial of Service) 등의 공격 코드들이 포함되어 있다.
이 샘플들을 참고하여 실무에서 사용할 수 있는 공격코드를 생성하고, 연구를 통해서 영향도를 점검해 보았다.


2. 공격 시나리오
[SQL Injection Worm]
DBMS 관리자 권한으로 설정된 웹 서비스에서 XP_CmdShell을 사용하여 웹 서버에 아이디 및 패스워드(Random값)를 생성하는 스크립트를 만들었고, XSS(Cross Site Scripting) 취약점이 존재하는 게시판에 악성서버로 유도하는 스크립트를 작성하였다.

타 사용자들이 작성된 글을 확인할 경우, 자신도 모르게 웹 서비스에 악성 아이디와 패스워드를 생성하는 공격을 가하게 된다.
 

① 공격자는 사용자들이 많이 이용하는 게시판에 악성 스크립트를 작성한다.
② 관리자 및 사용자가 게시된 글을 읽는다.
③ 관리자 및 사용자는 악성 스크립트를 실행하여 웹 서비스에 SQL Injection공격을 가하게 된다.
④ 웹 서비스에는 수많은 아이디와 패스워드가 생성된다.(이를 악용하여 2차 공격 가능)


[DoS Worm 공격 시나리오]
특정 게시판 서비스에 공격자는 악성서버로 유도하는 스크립트를 작성하고, 타 사용자들이 작성된 글을 확인할 경우, 임의의 값만큼 웹 서비스를 Refresh (Denial of Service) 하게 된다. 사용자의 프로세스 부하 뿐만 아니라 웹 서비스의 네트워크 부하까지 영향을 미칠 수 있다.
 

⑤ 공격자는 사용자들이 많이 이용하는 게시판에 악성 스크립트를 작성한다.
⑥ 관리자 및 사용자가 게시된 글을 읽는다.
⑦ 관리자 및 사용자는 특정 웹 서비스를 임의의 값만큼 Refresh 하게 된다.
⑧ 웹 서비스 네트워크 부하가 발생하여 서비스가 중지될 가능성이 존재한다.


3. 세부 분석
universal xss worm 의 모듈로 사용되고 있는 p0ng.js 스크립트 파일의 주요 함수에 대해서 분석을 하였다.
모든 함수형식이 Prototype 형식으로 되어 있어서 리턴값의 형식이 모두 일치해야 사용이 가능하며, 모든 환경에서 가능하도록 구성되어 있다.

다음 그림은 toHex 함수로써, 모든 String 코드값을 ‘\\x’ 값을 앞에 추가하고, 16진수 형식으로 바꿈으로써 HEX 값 형태로 변환하여 반환해준다. Unicode, 8진수기법 등도 모듈에 포함되어 있다.
 


다음 그림은 POST 방식과, GET방식의 함수이다. POST형식에서는 Header값을 포함하여 특정 메시지를 전달하고, GET방식에서는 특정 URI값을 얻어와서 결과값을 반환시켜 준다.
 

다음 그림은 각 HTML 속성 함수들을 추가하는 부분이다. 데이터 및 특정 배열문자등을 받아 자동적으로 element, links, hidden filed 등의 속성을 추가하는 부분이다.
이 외에도 form, URL Query, event, cookie 관련 속성 추가 함수들이 모듈에 포함되어 있다.
 

다음 그림은 DoS(Denial of Service)의 공격 함수 부분이다. 함수를 호출하였을 경우 페이지를 800 (임의의 값)Refresh 시킴으로써, 수많은 사용자의 프로세스를 멈추게 할 수 있고, 또한 특정 웹 서비스를 중단시킬 수 있다.
 

다음 그림은 Remote Shell 공격과 관련된 변수 및 명령어들을 이용한 공격 함수이다. 배열에 있는 모든 문자들이 순차적으로 대입되면서 위에 언급한 gueryparts (URL 주소 구분 함수)을 이용하여 정형화 된 공격 함수이다.
 

다음 그림은 SQL Injection 취약점을 이용하여, XP_CmdShell 프로시저를 이용한 공격 함수이다. ftp 서비스를 이용하여 js파일에 특정 명령어 삽입후 ftp 를 접속하여 자동적으로 실행되도록 한다.



4. 대응 방안
XSS(Cross Site Scripting) 취약점과 동일한 대응방안이며, 아래와 같습니다.

XSS는 외부의 공격자가 정상적인 웹사이트를 악용하여 정상적인 웹사이트에 접속하려는 사용자로 하여금 공격자가 의도한 명령이나 작업을 수행하도록 하는 공격입니다. XSS를 이용한 공격 유형에는 사용자 쿠키 정보 추출을 통한 세션 가로채기 공격 등이 있습니다.
XSS 대응 방안은 사용자가 게시물을 업로드 할 수 있는 게시판의 경우와 사용자로부터 값을 입력 받는 경우로 나눌 수 있습니다.

● 사용자 게시판
운영상 필요한 경우 이외에는 사용자가 HTML을 사용하지 못하도록 하여야 합니다. 운영상 필요하여 HTML을 허용하여야 할 경우에는 스크립트 태그를 사용하지 못하도록 하여야 합니다. 사용자 태그뿐 아니라 본문에 “cookie” 나 “object”나 “document”와 특수한 문자열에 대한 체크를 하여 입력을 받지 못하도록 합니다.

● 파일의 argument로 값을 입력
HTML 태그가 입력되지 못하도록 하여야 합니다. 필터링 하여야 할 문자로는 <, >, & 등이 있고, 사용자 입력으로 원하는 값이 아닌 다른 모든 문자들을 필터링 하여야 합니다. 파일의 입력으로 받는 문자열일 경우에는 입력을 허용할 문자만을 선택하고 나머지는 필터링을 하거나 에러페이지로 이동하도록 합니다. 입력 값으로 <form>문을 작성할 때 다른 파일의 입력 값이 될 때와 같이 파일에 포함되어야만 할 때에는 입력 받은 문자는 URL Encoding을 하여 화면에 표시하도록 합니다.

● 입력 값 변환
<, >와 같은 문자들을 HTML에 표시하는 &lt; 와 &gt; 로 변환을 하여 저장을 하고 보여주는 방법이 존재합니다. 이 문자들이 HTML에서 <, >로 표시되기 때문에 화면에 나타날 때는 문제가 없습니다.

5. 참고 사이트
http://groups.google.com/group/ph4nt0m/msg/d75435c75fc6b81b