Web-Hacking - XSS

XSS ( Cross Site Scripting )


 

XSS ( Cross Site Scripting ) 란?

XSS는 클라이언트 사이드의 취약점 중 하나로, 공격자가 웹 리소스에 악성 스크립트를 삽입하여

이용자의 웹브라우저에서 해당 스크립트를 실행할 수 있는 방법을 말한다. 이를 이용하여 공격자는

특정 계정의 세션 정보를 탈취하고, 해당 계정을 이용하여 임의의 기능을 수행할 수 있다.

 

대부분 자바스크립트를 이용한 공격이 이루어지며, SQL Injection 과 함께 웹 취약점 중 가장 기초적인 취약점으로

알려져 있어 방지하는 기술도 있지만, 이를 우회하는 기술이 다양해지면서 사실상 완전한 방어가 힘든 취약점이다.

 

 

XSS의 종류

종류 설명
Stored XSS XSS에 사용되는 악성 스크립트가 서버에 저장되고
서버의 응답에 담겨오는 방식
Reflected XSS XSS에 사용되는 악성 스크립트가 URL에 삽입되고
서버의 응답에 담겨오는 방식
DOM - based XSS XSS에 사용되는 악성 스크립트가
URL Fragment에 삽입되는 방식
Universal XSS 클라이언트의 브라우저 혹은 브라우저의 플러그인에서
발생하는 취약점으로 SOP 정책을 우회하는 방식

 

 

XSS로 발생할 수 있는 피해

1.  쿠키 및 세션 정보 탈취

XSS에 취약한 게시판 등에 사용자의 쿠키나 세션 정보를 탈취하는 스크립트를 삽입하여

게시글을 열람하는 유저들의 정보를 탈취하여 인증을 회피하거나 권한을 얻을 수 있다.

 

2.  악성 프로그램 설치 유도

XSS 만으로 악성 프로그램을 다운로드하게 만들 수는 없으나,

스크립트를 통해 악성 프로그램을 다운받는 사이트로 리다이렉트 시켜 다운을 유도할 수 있다.

 

3.  의도하지 않은 페이지 노출

XSS를 사용하여 <img> 태그 등을 삽입하여 본래의 내용과 전혀 상관없는 페이지를 노출하거나

페이지 자체를 수정하여 페이지의 정보를 악의적으로 편집할 수 있다.

 

 

XSS 대응 방법

  • 입력 값의 길이 제한 (이메일, 아이디, 패스워드 등)
  • replace 와 같은 함수를 이용한 치환
  • '<' , '>' 와 같이 태그에 사용되는 기호를 엔티티코드로 변환
  • 입력 값에 대한 유효성 검사 (반드시 클라이언트가 아닌 서버에서 수행)
  • HTML 태그 사용이 필요한 경우 화이트리스트를 만들어 특정 태그의 입력만 허용