크로스 사이트 스크립팅(XSS : cross-site scropting)

크로스 사이트 스크립팅(XSS : cross-site scropting)

크로스 사이트 스크립팅(XSS : cross-site scropting)

XSS는 사이트 공격자가 목표 사이트에 HTML 태그나 크립트를 집어넣는 보안 문제를 일컫는 말이다.

좀 더 자세히 설명을 하자면, 취약한 웹 사이트에 악성 스크립트를 포함할 수 있는 손쉬운 방법 중 하나로 공격자들이 가장 많이 선호하는 방식 중 하나이다. XSS 취약점은 OWASP Top 10 -2013에도 여전히 3번째 높은 위험으로 매겨져 있으며, 취약점분포도도 '매우 광범위'한 수준으로 본 취약점은 조직의 정보 자산을 보호하는데 가장 큰 위험 중 하나라고 할 수 있다.

개요

XSS 공격은 웹 응용에 존재하는 취약점을 기반으로 웹 서버와 클라이언트간 통신 방식인 HTTP 프로토콜 동작과정 중에 발생한다. HTTP 프로토콜이란 웹 서버와 클라이언트간 서버에 저장된 웹 문서(일반적으로 HTML, 스크립트, 이미지 등을 클라이언트로 전달하기 위한 표준 규약이다. 먼저 클라이언트(브라우저)는 서버로 해더 정보를 포함하여 관련 정보를 요청(request)하면, 웹 서버는 클라이언트의 요청을 분석하여 요청한 자원 데이터 및 해더를 포함하여 클라이언트로 응답(response)을 보낸다.

XSS 공격은 브라우저로 전달되는 데이터에 악성 스크립트가 포함되어 개인의 브라우저에서 실행되면서 해킹을 하는 것이며, 이 공격용 악성 스크립트는 공격자가 웹 서버에 구현된 웹 애플리케이션의 XSS 취약점을 이용하여 서버 측 또는 URL에 미리 삽입을 해놓은 것이다.

XSS 취약점

웹 애플리케이션 보안 연구재단인 OWASP에 따르면 "크로스 사이트 스크립팅(XSS)는 애플리케이션에서 브라우저로 전송하는 페이지에서 사용자가 입력하는 데이터를 검증하지 않거나, 출력 시 위험 데이터를 무효화 시키지 않을 때 발생한다."라고 정의되어 있다. 즉 공격자가 의도적으로 브라우저에서 실행될 수 있는 악성 스크립트를 웹 서버에 입력 또는 이것을 출력 시 위험한 문자를 중성화시키지 않고 처리하는 애플리케이션의 개발 과정에서 발생한다.

XSS 공격 종류

XSS 취약점을 이용한 공격 방법은 3가지로 분류된다.

1. 저장 XSS 공격

접속자가 많은 웹 사이트를 대상으로 공격자가 XSS 취약점이 있는 웹 서버에 공격용 스크립트를 입력시켜 놓으면, 방문자가 악성 스크립트가 삽입되어 있는 페이지를 읽는 순간 방문자의 브라우저를 공격하는 방식

가장 일반적인 방법은 게시판 같은 곳에 HTML문서에

2. 반사 XSS 공격

악성 스크립트가 포함된 URL을 사용자가 클릭하도록 유도하여 URL을 클릭하면 클라이언트를 공격하는 방식

일반적으로 서버에 검색 내용을 입력하면, 검색 결과가 있는 경우에는 결과 값을 사용자에게 전달하지만, 서버에서 정확한 결과가 없는 경우 서버는 브라우저에 입력한 값을 그대로 HTML 문서에 포함하여 응답한다. 이 경우 HTML 페이지에 포함된 악성 스크립트가 브라우저에서 실행이 된다. 즉, 사용자는 악성 스크립트가 포함된 링크를 클릭한 순간 바로 악성 스크립트가 사용자의 브라우저에서 실행된다.

3. DOM 기반 XSS 공격

DOM 환경에서 악성 URL을 통해 사용자의 브라우저를 공격하는 방식

앞에서 다룬 저장 XSS 및 반사 XSS 공격의 악성 페이로드가 서버 측 애플리케이션 취약점으로 인해, 응답 페이지에 악성 스크립트가 포함되어 브라우저로 전달되면서 공격하는 것인 반면, DOM기반 XSS는 서버와 관계없이 브라우저에서 발생하는 것이 차이점이다.

일반적으로 DOM기반 XSS취약점 있는 브라우저를 대상으로 조작된 URL을 이메일을 통해 사용자에게 전송하면, 피해자는 이 URL링크를 클릭하는 순간 공격 피해를 입게 된다.

XSS 취약점 예방 기술

XSS 취약점은 쉽게 악용될 수 있으며, 공격 효과도 커 공격자들이 자주 이용하는 기술이다. 많은 조직에서 XSS 공격을 대응하기 위해 웹 방화벽(WAF)을 도입하여 방어를 하고 있으나, 대부분의 웹 방화벽은 시그너쳐 기반의 XSS 공격만을 탐지하고 있다. 하지만 특정 문자열을 탐지하는 기술은 쉽게 우회가 가능하여 방어가 효과적이지는 못하다. 또한 웹 애플리케이션 개발자는

1. 입/출력 값 검증 및 무효화

XSS 취약점을 근복적으로 제거하기 위해서는 스크립트 등 해킹에 사용될 수 있는 코딩에 사용되는 입력 및 출력 값에 대해서 검증하고 무효화시켜야 한다. 입력 값에 대한 유효성 검사는 데이터가 입력되기 전에 가능하면, 입력 데이터에 대한 길이, 문자, 형식 및 사업적 규칙 유효성을 검사해야 한다.

* 출력 값을 무효화하기 위해서는 XSS 공격은 기본적으로

아래의 표는 반드시 위험문자를 참조문자로 변경해야 한다.

* CSS의 DIV 엘리먼트에 다음과 같은 악성 자바 스크립트를 숨길 수 있다.

그래서 HTML 속성(attributes)에 들어가는 값도

* 의 경우 다음과 같이 악성 URL을 포함시켜 악성 자바스크립트가 포함된 페이지를 사용자가 읽으면서 브라우저를 공격할 수 있다.

2. 보안 라이브러리

애플리케이션 개발자가 많은 태그의 입력 문자를 검증하기 위해 코딩 시 일일이 적업하는 것은 많은 노력과 자원이 소모된다. 또한 인코딩 방식을 통해 방어기술을 무력화할 수 있으므로 애플리케이션 개발자 직접 모두 처리하는 것은 근본적으로 불가능한다. 그래서 입/출력값을 자동적으로 검증해주는 라이브러리를 사용하면 좀 더 효과적으로 대응할 수 있다.

* AntiXSS

AntiXSS 라이브러리는 마이크로소프트사에서 개발한 공개용 XSS 취약점 예방 라이브러리이다. 이 라이브러리는 ASP.net 애플리케이션 개발환경에서 사용된다.

* OWASP ESAPI

OWASP는 포괄적인 애플리케이션 보안을 위해 웹 응용 취약점을 대응할 수 있는 오픈소스 ESAPI 라이브러리를 개발하여 제공하고 있다. ESAPI에는 총 14개의 API가 있으며, 이 중 XSS취약점을 예방하기 위해 API는 validator와 encoder가 있다. 이 라이브러리는 자바, PHP, NET, ASP, 자바스크립트 및 파이썬 등 다양한 애플리케이션 개발언어를 지원하고 있다.

자바스크립트 완벽가이드

http://www.kisa.or.kr/public/library/IS_View.jsp?mode=view&p;_No=158&b;_No=158&d;_No=105

from http://iamawebdeveloper.tistory.com/39 by ccl(A) rewrite - 2020-03-07 01:22:00

댓글

이 블로그의 인기 게시물

🐱‍💻Installing IIS Components Windows 10

2017년 1월 스타트업에서 구인할때 주로 원하는 개발 기술

Creating Cascading DropDownLists in ASP.Net (연속적인 셀렉트박스...