발생원인
조작된 웹페이지 또는 URL을 사용자가 열람하였을 경우 발생한다.
대부분의 웹 공격 기법이 서버의 취약성에 대해 공격이 이루어지지만, XSS는 클라이언트를 직접적으로 공격하는 기법이다. 악성코드를 숨겨 놓은 게시판의 글이나 문서, 메일 등을 클릭하여 읽을때 스크립트로 인하여 악성코드에 감염되거나 사용자의 정보를 공격자에게 넘겨주게 된다.
XSS는 사회공학기법을 이용한다. 즉 간접적으로 신뢰하는 사이트의 게시물이나 이메일등을 이용하여 사용자가 모르는 사이에 공격자가 원하는 방향으로 이끌게 된다.
XSS 공격은 주로 사용자의 SessionID나 Cookie값을 훔쳐내어 권한을 훔쳐내는 기법으로 사용된다.
점검방법
웹페이지에 게시판, 민원신청, 여론마당등 일반 사용자들이 그을 게시할 수 있는 기능이 있는지 접검한다.
간단한 스크립트 문장 <script>alert('xss 취약점존재');</script>을 게시물로 작성하고 해당 게시물을 읽어봤을때 경고창이 뜨는지 확인한다.
조치방법
글쓰기가 가능한 게시판 페이지에서 사용자들의 입력에 대해 스크립트를 모두 필터링하도록 코드를 작성한다.
코드예
안전하기 않은 코드의 예 - JAVA |
<h1>XSS Sample</h1> <% String name = request.getParameter("name"); %> <p>NAME:<%=name%></p>
|
name에 대한 검증을 수행하지 않음 |
안전한 코드의 예 - JAVA String name = request.getParameter("name"); if ( name != null ) { name = name.replaceAll("<","<"); name = name.replaceAll(">",">"); name = name.replaceAll("&","&"); name = name.replaceAll("“”","""); } else { return; } %> name에 대해 주요 스크립트 변경 수행
<%
CASE1. Stroed XSS 공격
공격자가 XSS 보안 취약점 공격을 위해 메시지나 방명록, 댓글을입력하는 Form 필드부분에 악의적인 스크립트를 저장하고 후에 어떤 사용자가 해당 사이트의 같은 곳을 방문하면 해당 스크립트가 웹페이지에서 로드되면서 코드가 실행되는 것이다.
CASE2. Reflected XSS 공격
URL의 CGI 인자에 스크립트 코드를 삽입하는 방식이다. 공격자가 이메일을 이용해 어떤 웹 페이지 링크를 보내고 그 링크를 전달받은 사용자가 링크를 클릭하면 그 링크에 대한 웹 페이지가 로드된다. 이 때 웹 ㅔ이지에 대한 링크 URL에 삽입된 스크립트 코드가 실행되면서 웹페이지의 내용이 변경된다. 이 공격은 스크립트를 저장하기 위한 웹사이트는 필요하지 않으며 사용자가 조작된 링크 주소를 클릭하면 링크에 대한 웹페이지가 로드 되면서 스크립트 코드가 실행된다.
공격방법
<img src="path/image.gif"> ==> <img src=javascript:alert("XSS alert")>
XSS를 유발 시킬 수 있는 대표적인 코드"
<script> . . . . </script>
<img src="javascript:. . ." />
<div style= "background-image:url(javascript. . .)" />
<embed> . . . </embed>
<Iframe> . . . </Iframe>
<참고> 다양한 XSS 패턴
http://ha.ckers.org/xss.html 사이트의 패턴등을 방어해야 한다.
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
'보안 > 시큐어코딩' 카테고리의 다른 글
[시큐어코딩-6] 입력데이터 검증및 표현(6) 신뢰되지않은 URL주소로 자동접속연결 (0) | 2012.10.28 |
---|---|
[시큐어코딩-5] 입력데이터 검증및 표현(5) 위험한 형식 파일 업로드 (0) | 2012.10.28 |
[시큐어코딩-4] 입력데이터 검증및 표현(4) 운영체제 명령어 삽입 (0) | 2012.10.28 |
[시큐어코딩-2] 입력데이터 검증및 표현(2) 자원삽입 (0) | 2012.10.28 |
[시큐어코딩-1] 입력데이터 검증및 표현(1) SQL삽입 (0) | 2012.10.28 |