티스토리 뷰

Security/웹 해킹

XSS

on1ystar 2019. 1. 10. 04:33
728x90
반응형

Ø XSS(Cross-site Scripting)

ü  개요

SQL injection과 함께 웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로, 악의적인 사용자가 공격하려는 사이트

에 스크립트를 넣는 기법을 말합니다. 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며,

통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취합니다

, XSS 공격은 브라우저로 전달되는 데이터에 악성 스크립트가 포함되어 개인의 브라우저에서 실행되면서 해킹을 하

는 것이며, 이 공격용 악성 스크립트는 공격자가 웹 서버에 구현된 웹 애플리케이션의 XSS 취약점을 이용하여 서버 측 

또는 URL에 미리 삽입을 해 놓은 것입니다.

XSSOWASP Top 10 – 2013에서 A3, -2017에서는 A7로 위험 순위는 다소 하락했지만 Top 10 안에 들었다는 것 만

으로도 여전히 위험한 공격이라고 말할 수 있습니다. 특히 해당 자료 OWASP 자료에 따르면 확산 정도가 3으로 매우 

높은 취약점으로 Top10에서 두 번째로 많이 발생하는 문제로 확인됐습니다.

ü  취약점

 애플리케이션이 올바른 유효성 검사 또는 필터링 처리 없이 새 웹페이지에 신뢰할 수 없는 데이터를 포함하거나, 자바

스크립트와 HTML을 생성하는 브라우저 API를 활용한 사용자 제공 데이터로 기존 웹 페이지를 업데이트할 때 발생합니

. XSS는 피해자의 브라우저에서 공격자에 의해 스크립트를 실행시켜 사용자 세션을 탈취할 수 있게 만들고, 웹 사이

트를 변조시키고, 악성 사이트로 리다이렉션할 수 있도록 허용합니다.

ü  공격 시나리오

 


(출처 : https://excess-xss.com)

 

1.    공격자는 웹 사이트 양식 중 하나(일반적으로 javascript)를 사용하여 악성 스크립트를 웹 사이트 데이터베이스에 삽입합니다.

2.    피해자는 웹 사이트에서 페이지를 request 합니다.

3.    웹 사이트에는 데이터베이스의 악성 스크립트가 응답에 포함되어 피해자에게 전송됩니다.

4.    피해자의 브라우저는 response 내에서 악성 스크립트를 실행하여 피해자의 쿠키나 세션(클라이언트의 private한 정보들)을 공격자의 서버로 보냅니다.

 

 

 

ü  공격 기법들

 

I.      반사(reflected) XSS

웹 애플리케이션의 지정된 변수를 이용할 때 발생하는 취약점을 이용하는 것으로, 검색결과, 에러메시지 등 서버가 외부

에서 입력 받은 값을 받아 브라우저에게 응답할 때 전송하는 과정에서 입력되는 변수의 위험한 문자를 사용자에게 그대

로 돌려주면서 발생합니다.

공격이 성공하면 공격자는 피해자의 브라우저에서 임의의 HTML과 자바스크립트를 실행할 수 있습니다.



일반적으로 서버에 검색 내용을 입력하면, 검색 결과가 있는 경우에는 결과 값을 사용자에게 전달하지만, 서버에 정확한 

결과가 없는 경우 서버는 브라우저에 입력한 값을 위 에서처럼 그대로 HTML 문서에 포함하여 응답합니다. 이 경우 

HTML 페이지에 포함된 악성 스크립트가 브라우저에서 실행이 될 수 있습니다.

이를 이용하여 공격자는 두 가지 방법으로 사용자에게 XSS 공격 스크립트를 반사시키는 방법이 있습니다.

-      사용자가 특정 개인을 대상으로 공격하는 경우 공격자는 ( : 전자 메일 또는 인스턴트 메시징을 사용하여) 악의

적인 URL을 피해자에게 보내고 방문을 유도할 수 있습니다.

 

-      사용자가 대규모 그룹을 대상으로 하는 경우 공격자는 악의적인 URL ( : 자신의 웹 사이트 또는 소셜 네트워크)

에 대한 링크를 게시하고 방문자가 클릭할 때까지 기다릴 수 있습니다.

II.    저장 XSS

이 공격은 웹 애플리케이션 취약점이 있는 웹 서버에 악성 스크립트를 영구적으로 저장해 놓는 방법입니다. 웹 사이트

의 게시판, 사용자 프로필 및 코멘트 필드 등에 악성 스크립트를 삽입해 놓으면, 사용자가 이 사이트를 방문하여 저장되어 

있는 페이지에 정보를 요청할 때, 서버는 악성 스크립트를 사용자에게 전달하여 사용자 브라우저에서 스크립트가 실행

되면서 공격합니다. 저장 XSS는 종종 높은 혹은 중대한 위험으로 간주됩니다.


(출처 : http://www.kisa.or.kr/uploadfile/201312/201312161355109566.pdf)

가장 일반적인 방법은 게시판 같은 곳에 HTML 문서에 있는 <script>를 이용하여 이 스크립트 태그 안에 악성 스크립트

를 저장하는 방식입니다.

<script>alert(document.cookie)</script>

이 스크립트는 브라우저의 쿠키 값을 보여주는 간단한 스크립트인데, 공격자는 alert(document.cookie)스크립트에 정교

한 공격용 코드를 포함시킵니다. 그러면 사용자가 이 코드가 포함되어 있는 페이지를 읽을 때 마다 브라우저는 공격용 

스크립트를 실행하게 됩니다.

 

III.   DOM 기반 XSS

DOM(Doucument Object Model)이란 W3C 표준으로 HTML XML 문서에 접근방법을 표준으로 정의하는 문서 객체 

모델입니다.

피해자의 브라우저가 HTML 페이지를 구문 분석할 때마다 공격 스크립트가 DOM 생성의 일부로 실행되면서 공격합니

. 페이지 자체는 변하지 않으나, 페이지에 포함되어 있는 브라우저측 코드가 DOM 환경에서 악성코드로 실행됩니다.


(출처 : https://excess-xss.com)

 

중요한 점은 DOM 기반 XSS서버와 관계없이 브라우저에서 발생하는 것이라는 다른 기법과의 차이점이 있습니다

DOM기반 XSS에서 페이지의 JavaScript가 사용자 입력을 안전하지 않은 방식으로 처리한 결과 악의적인 JavaScript가 어

느 시점에서 실행됩니다.

따라서 서버 측에서 보안을 높이고 코드를 안전하게 관리하더라도 사용자의 입력에 의해 새로 로드된 클라이언트 측 코

드가 XSS공격을 가능하게 할 수 있게 됩니다.

ü  보안 방법

l  최신 Ruby on Rails, React JS와 같이 XSS를 자동으로 필터링 처리하는 프레임워크를 사용합니다.

l  HTML 출력(본문, 속성, 자바스크립트, CSS 혹은 URL) 내 컨텍스트 기반으로 신뢰할 수 없는 HTTP 요청 데이터를 

필터링하며 반사 및 저장 XSS 취약점이 해결됩니다.

l  클라이언트 측에서 브라우저 문서를 수정할 때 상황에 맞는 인코딩을 적용하면 DOM XSS에 대해 대응할 수 있습니다.

l  컨텐츠 보안 정책(CSP)의 활성화는 XSS에 대한 심층적인 방어 통제로 로컬 파일 첨부를 통해 악성코드를 배치할 

수 있는 다른 취약점이 없는 경우 효과적입니다.

XSS Prevention Rules


Output Encoding Rules


(출처: https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet)


728x90
반응형

'Security > 웹 해킹' 카테고리의 다른 글

SQL 인젝션  (0) 2019.01.14
webhacking.kr 23번  (0) 2019.01.10
Webhacking.kr 18번  (0) 2019.01.10
댓글