2016년 11월 8일 화요일

XSS 공격 종류

종류
1. stored XSS
2. Reflected XSS
3. DOM XSS

1. Stored XSS

stored XSS은 공격자가 공격을 위해 다른사용자들이 많이 사용 방문하고 사용하는 데이터를 입력하는
부분이다. 즉, 메시지입력, 댓글, 등등에 사용자가 입력 가능한 부분을 말한다. 공격자는 FORM element
부분에 악의적인 스크립트를 저장하고 후에 어떤 사용자가 해당 사이트의 같은 곳을 방문하면 해당
스크립트가 웹 페이지에서 load되도록 한다.
















위 사진은 일반적인 stored XSS의 동작순서를 나타낸다.

그림과 같이 악성 스크립트를 넣어 사용자가 이 악성스크립트가 포함된 page를 읽으면
스크립트는 실행됨
간단한 예로 <script>alert(document.cookie)</script> 를 삽입해두면 사용자가 이 page를
읽을때마다 cookie값을 보여준다.

당연히 공격에 성공하려면 공격자가 웹 사이트에 입력한 데이터를 해당 웹사이트를 방문한 다른
사용자가 볼수 있도록한다.
이 블로그에 댓글을 달면 XSS 공격의 victim이 될수도 있다는 이야기다(농담..)

2. Reflected XSS

URL의 CGI 인자에 스크립트 코드를 삽입하는 것이다.

(CGI란? 두개 이상의 Com 간의 data를 주고받는 program 또는 주고 받는것 그 자체라고 할수 있다.예를 들어 방명록이나 게시판등이 대표적인 예라고 보면된다. 그래서 CGI를 가능케 하려면 사용자의 input을 
받아 들이는  html 문서와 입력을 처리하기 위한 CGI프로그램이 필요한거임)

한가지 더!. PHP/ASP는 CGI를 만들기위한 한가지 도구(스크립트 언어)이다.


공격자가 이메일을 이용해 어떤 웹페이지 link를 보내고 그 링크를 전달받은 사용자가 링크를 클릭하면 그 링크를 전달받은 사용자가 link를 열면 망하는 것이다. 왜냐고?
그 웹페이지안에는 공격자가 스크립트 코드가 실행되면서 웹페이지의 내용을 변경하도록 했으니까



attack procedure

1. 공격자는 먼져 server에 XSS취약점이 있는곳을 발견한다.
2. 민감한 정보를 획득할 수있는 공격용 악성 URL생성
3. 공격자는 이 URL을 이메일 메시지에 포함하여 배포
4. 피해자가 URL 클릭하면 완료!

3. DOM XSS

DOM은 W3C 표준으로 HTML 및 XML 문서에 접근 방법을 표준으로 정의하는 문서 객체 모델이다.
공격 과정은 victim의 browser가 HTML 페이지를 구문 분석할 때마다 공격 스크립트가 DOM 생성의
일부로 실행되면서 공격한다. 페이지 자체에는 변화가 없으나 페이지에 포함된 브라우저측 DOM 환경
에서 악성코드가 실행된다. DOM XSS는 다른 XSS와 다르게 서버와 관계없이 발생한다.

그저 공격자가 보낸 URL을 victim이 클릭하는 순간 피해를 입는 형식이다.

예를 들어 한 page에서 user-name을 입력도록 하고 URL에서는 user-name을 encoding하고
사용자에게 접속한 이름에대해 페이지를 보여준다하자

www.example.com/test.html
<html> <head> <title>Custom Dashboard </title> ... </head> Main Dashboard for <script> var pos=document.URL.indexOf("context=")+8; document.write(document.URL.substring(pos,document.URL.length)); </script> ... </html>

페이지가 위와 같다면 www.example.com/test.html?context=Mary 와 입력하면 Mary라는
string이 포함된 페이지를 보여줄거지만
www.example.com/test.html?context<script>SomeFunction(somevariable) 
와 같은 입력하게 되면 악성코드가 실행된다.

실제로는 공격자가 url안에 payload의 content를 보낼때 encoding하게 보내므로 URL이
스크립트를 포함하는지 확신할수 없다.


0 개의 댓글:

댓글 쓰기