XSS(Cross Site Scripting) 공격과 대비 방법

XSS(Cross Site Scripting) 공격과 대비 방법

 

보안은 개발을 하고 있는 개발자들이 가장 쉽게 지나치게 되는 주제입니다. 오늘은 중에서 가장 기초적인 부분이라고 있는 Cross Site Scripting(XSS) 대해서 말씀을 드리도록 하겠습니다.

 

Cross Site Scripting 사용자에게 입력 받은 악의적인 스크립트를 필터링하지 않고 동적으로 생성된 페이지에 포함하여 사용자에게 재전송할 발생됩니다.

 

JavaScript 처럼 클라이언트에서 실행되는 언어로 작성된 악성 스크립트의 경우 페이지, 웹게시판, 메일에 포함된 사용자에게 전달되고, 사용자가 해당 페이지나 게시판을 클릭하여 읽을 경우 실행됩니다.

 

[공격 대상 언어 스크립트]

-          JavaScript

-          VBScript

-           ActiveX

-          HTML, Flash

 

[공격 대상 코드]

-          CGI 스크립트

-          검색 엔진

-          게시판

-          오류 페이지

 

[공격 대상 코드의 주요 공격 위치]

-  URL parameter

-  Form elements

-  쿠키

-  DB 쿼리

 

만일, 여기까지 읽으시면서 문제가 없지 않느냐고 생각하시는 분들이 계시다면, 아래의 공격대상이 간단한 예제를 보시기 바랍니다.

 

Case1.  <xmp> 입력된 경우

 

 

-          HTML 코드를 실행하지 않고 <xmp> Tag 이하의 코드가 노출되게 됩니다.

 

Case 2.  <SCRIPT>alert("XSS Attack TEST");</SCRIPT>   입력된 경우

 

 

  • <SCRIPT> Tag 이용하여 위와 같이 특정 코드의 실행이 가능합니다. 만약<script>for(i=1;i<1000;i++){alert(“XSS Attack TEST”)}</script> 입력했다면, 사용자는 끊임없이 나타나는 확인창에 당황하게 것입니다.
  • 물론 해당 코드 자체가 문제가 되지 않을 것이라고 여겨질 수는 있겠지만, 쿠키값 등이 노출되어 보내지는 보안에 치명적인 형태로 충분히 악용 가능합니다.

 

그럼 이제 대비책에 대해 말씀 드리겠습니다.

 

  • 기본적으로 “<Script” 시작되는 문자열을 체크 하거나
  • HTML Tag 사용하지 못하도록 하거나 ( <, >, ( , ) , #, & 등의 Tag 치환하는 방법)
  • 특정 HTML Tag만을 허용하도록 하거나
  • 전달되는 Parameter 대해 항상 무결성 체크를 하거나
  • 페이지 에러시 공통적인 알림 페이지로 하거나

 

등과 같은 방법으로 간단하게 대비할 있습니다.

 

개발 일정이 촉박하여 Flow 개발에만 신경을 쓰다가 자칫 소홀해지기 쉬운 보안 부분에 대해서

위와 같이 작은 부분에서부터 신경을 쓰는 것이 어떨까 하는 생각으로 글을 썼습니다.

개발시 Sql-Injection / Command-Injection 안전한 프로그래밍을 위한 여러 부분들을 좀더 고려하면 더욱 좋을 것입니다.


출처 : http://www.kaoni.com/