개요

가장 기초적인 취약점 공격방식이지만 OWASP Top 10에서 중요하게 여기던 취약점 중 하나로 공격자의 Javascript 코드를 입력해놓으면 실제 사용자가 동적인 웹 페이지를 클릭하거나 열람할 때 페이지에 의도하지 않은 악성 스크립트가 실행되는 공격 방식 중 하나입니다.

 

일반적으로 의도하지 않은 행동을 수행시키거나 쿠키, 세션, 토큰같이 민감한 정보 혹은 악성코드를 다운로드하게 됩니다.

 

https://www.riskbasedsecurity.com/2014/06/11/cross-site-scripting-xss-found-in-tweetdeck/

 

Cross-site Scripting (XSS) Found in Tweetdeck

Tweetdeck tab. It turns out that someone figured out how to get script code to render in the software. The first Tweet we saw, that has been re-tweeted almost 40,000 times, comes from @derGeruhn. Each time someone re-tweets, if they are in your followers,

www.riskbasedsecurity.com

 

해당 트윗을 클릭하게 되면 스크립트가 실행되어 자동으로 리트윗(공유)되었으며, 해당 트윗은 4만건 공유되었다고 합니다.

 

 

공격 유형

1. Stored (Persistent) Cross-Site Scripting

저장된(영구적인) XSS 공격은 말 그대로 저장되어 영구적인 공격을 입힐 수 있는 방식입니다

이 방식은 공격자가 게시판이나 input, 여러 방식들을 통해 악성 스크립트가 DB에 저장이 됐을 때, 정상적인 사용자가 해당 악성 스크립트가 있는 부분들을 확인하는 등 열람하게 된다면 여러 피해들을 입을 수 있습니다.

 

이 방법은 공격자가 초기 작업만 해놓게된다면 이후 따로 관리하지 않더라도 많은 방문자 및 정상적인 사용자에게 피해를 입힐 수 있고 일반적으로 가장 위험하고 피해가 큰 XSS 유형입니다.

 

주로 서버 DB에 저장시킬 수 있고 스크립트를 삽입할 수 있는 게시물 쓰기 혹은 로그인을 하게되면 계정 정보에 표시되는 사용자 정보 인풋등을 통해 삽입되게 됩니다.

 

 

2. Reflected (Non-Persistent) Cross-Site Scripting

반영구적, 반사적 XSS 공격으로 불리며 주로 사용자에게 입력받은 데이터를 서버에서 되돌려줄 때 발생합니다.

 

예를 들어 사용자가 검색 쿼리를 보낸 뒤 서버에서 결과를 주게 된다고 할 때, 이러한 응답해주는 곳에 요청 데이터를 그대로 보여주게 되면 악성스크립트가 실행되는 것을 의미합니다. 주로 사용되는 방식으로는 응답 결과에 취약한 페이지로 안내하는 링크를 삽입(앞서 말한 검색결과를 그대로 보여주는 페이지)하여 피해자를 이동시키게 되면 해당 링크에 삽입되어 있던 스크립트가 실행되며 피해를 받게 됩니다. 

 

3. 이 외에도

Self Cross-Site Scripting

스스로 XSS 실행시켜 공격자에게 노출

Blind Cross-Site Scripting

공격자가 공격 결과를 볼 순 없지만 관리자 제한이 있는 관리페이지, 일반적인 사용자가 접근할 수 없는 문의 페이지, 신고페이지 등 입력 가능한 부분이 포함되지만 공격자가 확인할 순 없는 곳에서 사용됩니다

DOM-Based Cross-Site Scripting

웹 페이지가 JS에 취약할 때 발생되며 주로 악성 스크립트가 포함된 URL을 사용자가 요청해서 브라우저를 해석하는 단계에서 발생하게 됩니다. 이로인해 원래의 기능을 유지하지 못하거나 잘못된 방식으로 동작을 하는 등 클라이언트 코드가 원래 의도와는 다르게 실행되며 앞서 작성했던 XSS 공격과는 다르게 서버에서 탐지가 어렵다고 합니다

 

방어 방법

1. 사용자 입력값들을 특정 허용 목록으로 제한하기

사용자 입력을 제한한다는 것은 드롭다운 메뉴처럼 어떤 데이터를 받을지 미리 알고있는 경우에만 사용할 수 있다는 단점이 있습니다.

 

2. Input에서 HTML을 방지하거나 제한하기

입력과 같은 부분에서 신뢰할 수 있는 사용자, 데이터로 제한되어야 합니다.

 

3. 쿠키에 HTTPOnly 플래그 사용하기

세션 쿠키는 웹 사이트가 요청 사이에 사용자를 인식할 수 있도록 하는 메커니즘이라 공격자는 쿠키를 추출하여 관리자 세션을 자주 훔치게 됩니다. 따라서 쿠키가 도난당하면 공격자는 권한없이도 계정의 로그인할 수 있게 됩니다

HTTPOnly 쿠키를 사용하게 되면 JS가 쿠키의 내용을 읽지 못해 세션을 훔치기 어렵게 만들지만 어디까지나 쿠키를 읽는 것을 방지할 뿐 공격자에게 탈취된다면 브라우저 만료까지 관리자 요청을 가능하게 합니다. 

 

4. 방화벽 사용하기

방화벽을 사용하여 웹 사이트에 대한 공격이 서버에 보내지기전에 차단할 수 있습니다. 이 외에도 RCE 혹은 SQLi같은 공격을 차단할 수 있고 DDOS와 같은 대규모 공격또한 방지 가능합니다.

 

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

XSS를 막아주는 Anti XSS 라이브러리가 많이 제공되고 있지만 어디까지나 개발자가 실제 서버의 서비스 환경에서 막아주는 일차적인 제한일 뿐이라 사용자 스스로 본인의 브라우저에서 악성 스크립트가 실행되지 않도록 설치하고 방어할 수 있도록 해야합니다

 

참고자료

https://sucuri.net/guides/what-is-cross-site-scripting/

 

What is Cross-Site Scripting?

Learn what XSS attacks are, the types of XSS attacks that exist, and how to protect your website against cross-site scripting attacks. Read more at Sucuri.

sucuri.net

https://noirstar.tistory.com/266

 

XSS(Cross-Site Scripting) 이란?

2. XSS (Cross-Site Scripting)  2.1 개요 Ÿ   XSS Attack  XSS(Cross-Site Scripting) 이란 웹 애플리케이션에서 일어나는 취약점으로 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하..

noirstar.tistory.com

https://rockcontent.com/blog/cross-site-scripting/

 

Cross-site scripting (XSS): what it is, how to prevent it, and how to fix it

Cross-site Scripting is a highly dangerous vulnerability exploit that might affect the users of your website. Learn more about it and how to prevent it.

rockcontent.com

 

'TIL > 개념정리' 카테고리의 다른 글

File upload 취약점  (0) 2022.07.12
CSRF와 방어 방법이 무엇인지  (0) 2022.07.09
중첩 라우팅 / router hook  (0) 2022.07.04
Redux in NextJS + typescript  (2) 2022.07.03
React-query란?  (0) 2022.07.01
복사했습니다!