XSS 란?
웹 해킹 공격 중 XSS라는 공격 기법이 있다.
Cross Site Scripting의 약자로 CSS라고 하는 것이 맞지만 이미 CSS가 Cascading Style Sheets의 약어로 사용되고 있어 XSS라 한다.
XSS는 게시판이나 웹 메일 등에 자바 스크립트와 같은 스크립트 코드를 삽입 해 개발자가 고려하지 않은 기능이 작동하게 하는 치명적일 수 있는 공격이다.
또한 대부분의 웹 해킹 공격 기법과는 다르게 클라이언트 즉, 사용자를 대상으로 한 공격이다.
XSS 공격은 크게 Reflected XSS와 Stored XSS 그리고 DOM Based XSS 세 가지로 분류할 수 있다.
이번 포스팅에서는 Reflected XSS와 Stored XSS에 대해서 설명하려 한다.
1. Reflected XSS
다음과 같이 ID를 입력하면 "Welcome OOO !!"을 출력해 주는 페이지가 있다고 가정하자.
이 페이지에 간단한 스크립트를 삽입하면 별다른 필터링 없이 실행이 되는 것을 확인할 수 있다.
공격자는 이러한 취약점이 존재하는 페이지를 미리 탐색한 후, XSS 공격을 위한 스크립트가 포함 된 URL을 공격 대상자에게 노출시키는 방법으로 공격을 수행할 수 있다.
Reflected XSS의 공격 순서는 다음과 같다.
공격자가 미리 XSS 공격에 취약한 웹 사이트를 탐색하고, XSS 공격을 위한 스크립트를 포함 한 URL을 사용자에 노출시킨다.
사용자가 해당 URL을 클릭 할 경우, 취약한 웹 사이트의 서버에 스크립트가 포함 된 URL을 통해 Request를 전송하고, 웹 서버에서는 해당 스크립트를 포함한 Response를 전송하게 된다.
2. Stored XSS
Stored XSS는 Reflected XSS와는 달리 웹 사이트의 게시판에 스크립트 삽입하는 공격 방식이다.
공격자는 게시판에 스크립트를 삽입한 후 공격 대상자가 해당 게시글을 클릭하도록 유도한다.
공격자가 미리 XSS 공격에 취약한 웹사이트를 탐색하고 XSS 공격을 위한 스크립트를 포함 한 게시글을 웹 사이트에 업로드 한다.
게시글의 URL을 사용자에게 노출하고 사용자가 게시글을 확인함으로써 URL에 대한 요청을 서버에 전송하게 된다.
웹 서버에서 스크립트를 포함한 Response를 전송하며 공격이 수행된다.
XSS 위험성
다음으로 XSS를 통해 어떤 피해가 발생할 수 있는지 알아본다.
1. 쿠키 정보 및 세션 ID 획득
공격자는 XSS에 취약한 페이지 및 게시판에 XSS 공격을 수행함으로써 해당 페이지를 이용하는 사용자의 쿠키 정보나 세션 ID를 획득할 수 있다.
쿠키는 웹 서버가 브라우저에 보내는 4KB 이하의 작은 텍스트 파일로, 사용자가 웹 사이트를 이용하는 동안 사용자 브라우저에 저장하는 파일이다.
주로 사용자의 상태를 기록하기 위해 쿠키에 로그인 및 버튼 클릭 등에 대한 정보를 저장한다.
만약 세션 ID 등을 쿠키에 포함하는 경우, XSS 공격을 통해서 페이지 사용자의 세션 ID를 획득 해 공격자가 불법적으로 정상 사용자인 척 가장할 수 있다.
2. 시스템 관리자 권한 획득
XSS 취약점이 있는 웹 서버에 다양한 악성 데이터를 포함시킨 후, 사용자의 브라우저가 악성 데이터를 실행하게 할 수 있다.
공격자는 아직 패치되지 않은 취약점에 대한 공격 코드가 실행되도록 해 사용자의 시스템을 통제할 수 있다.
만약 회사 등 조직의 개인 PC가 해킹될 경우, 조직 내부로 악성 코드가 이동 해 내부의 중요 정보가 탈취될 수 있다.
3. 악성코드 다운로드
XSS 공격은 악성 스크립트 자체로 악성 프로그램을 다운로드 할 수는 없다.
하지만, 사용자가 악성 스크립트가 있는 URL을 클릭하도록 유도 해 악성 프로그램을 다운받는 사이트로 리다이렉트(Redirect) 하거나 트로이 목마 프로그램을 다운로드 하도록 유도할 수 있다.
4. 거짓 페이지 노출
XSS 공격에 취약한 페이지일 경우, <script> 태그 뿐만 아니라 <img>와 같은 그림을 표시하는 태그를 사용 해 원래 페이지와는 전혀 관련이 없는 페이지를 표시할 수 있다.
기타 다른 태그도 사용이 가능할 경우, 원래 페이지의 일부를 변조 해 거짓 페이지를 노출할 수 있어 이를 통해 개인정보 유출 등의 위험이 있다.
XSS 방지법
XSS 공격은 IPS, IDS, 방화벽 등으로도 방지할 수가 없다.
때문에 단순히 문자를 필터링 하는 등의 방법만이 존재한다.
1. script 문자 필터링
XSS 공격은 입력값에 대한 검증이 제대로 이루어지지 않아 발생하는 취약점이다.
때문에 사용자의 모든 입력값에 대하여 서버측에서 필터링을 해 주어야 한다.
PHP의 eregi 함수를 이용하면 XSS 공격에 주로 사용되는 문자들을 필터링 할 수 있다.
주로 스크립트를 실행하기 위한 특수문자를 필터링 하며, <, >, ", ' 등의 문자가 있다.
2. htmlentities 사용
PHP 함수 중 htmlentities라는 함수가 있다.
htmlentities는 모든 특수문자를 HTML 엔티티(entity)로 변환한다.
※ HTML 엔티티는 "&약어;" 및 "&#숫자;"의 형태를 표현하는 것을 의미한다. 예를 들어 <는 <로, >는 >로 표현한다.
Created by ccoma
'WEB > Web Hacking' 카테고리의 다른 글
CSRF (Cross-site request forgery) 란 (0) | 2017.04.28 |
---|---|
Drive-By-Download(DBD) 공격(이론편) (0) | 2017.04.24 |
파일업로드 취약점 (0) | 2017.04.09 |
SQL injection (0) | 2017.03.25 |
자바스크립트(JavaScript) 난독화 (0) | 2017.03.21 |