보안

XSS(Cross-Site Scripting)이란?

윤밥밥 2024. 10. 23. 11:22

목차


  • XSS(Cross-Site Scripting)란?
  • XSS의 세 가지 유형

XSS(Cross-Site Scripting)란?


XSS란 크로스 사이트 스크립팅, 사이트 간의 스크립팅을 의미한다.

웹 애플리케이션의 취약점을 악용해 악성 스크립트를 다른 사용자에게 삽입하는 공격 기법이다.

공격자가 신뢰할 수 있는 사이트에 악성 코드를 삽입하면, 이 웹 페이지를 이용하는 사용자는 자신도 모르게 악성 스크립트가 실행될 수 있고, 이 때 사용자 쿠키, 세션 정보, 민감 데이터가 탈취당할 수 있다.

 

악성 스크립트를 삽입한다는 게 무슨 뜻일까?

더보기

악성 스크립트를 삽입한다는 것은 공격자가 웹 페이지에 원래는 없던 자바 스크립트를 포함시키는 것을 의미한다. 예를 들어 다음과 같은 방법들로 삽입할 수 있다.

 

1. 사용자 입력을 통한 삽입: 게시글, 댓글에 아래와 같은 스크립트 코드를 입력할 수 있다. 이렇게 작성된 게시글을 다른 사람들이 열람하면 스크립트 문이 실행된다.

<script>alert('You have been hacked!');</script>

 2. URL을 통한 삽입: url의 쿼리 파라미터로 요청을 보냈을 때, 웹 페이지가 이 파라미터(ex. 검색어)를 화면에 띄우면 스크립트가 실행될 수있다.

  •  

현대 웹 프레임워크에서의 xss 공격 방어

더보기

 

실제로 리엑트 기반 웹 서비스에 XSS 공격을 해보면, 실패하는 것을 볼 수 있다.

이는 많은 웹 프레임워크들이 기본적으로 XSS 공격에 대한 대응을 해주기 때문이다.

 

리엑트의 경우에는 React-DOM이 브라우저에 사용자에게 받은 데이터를 출력할 때 자동으로 이스케이프처리를 해준다. 예를 들어 < 문자는 &lt 로 > 문자는 &gt 로 이스케이프해주기에 <script> 는 &lt;script&gt; 로 변환되어 스크립트가 실행되지 않는다.

 

그렇다고 화면에 &lt 등으로 보이지는 않는다. 브라우저가 HTML을 받으면 이스케이프된 코드를 렌더링할 때 다시 원래 문자로 변환하기 때문이다.


XSS의 세 가지 유형


  1. Stored XSS(저장형 XSS)
  2. Refrected XSS(반사형 XSS)
  3. DOM-based XSS(DOM 기반 XSS)

Stored XSS (저장형 XSS)

공격자가 악성 스크립트를 웹 사이트 데이터베이스에 저장하고, 해당 데이터를 다른 사용자가 열람할 때 스크립트가 실행된다.

동작 과정

  1. 공격자가 댓글에 악성 스크립트문을 작성하고 저장시킨다.
  2. 사용자가 댓글을 열람한다.
  3. 악성 스크립트가 실행된다.

Reflected XSS (반사형 XSS)

URL 파라미터에 악성 스크립트를 삽입하여 요청하면 서버가 즉시 이 데이터를 반환해서 클라이언트 화면에 반영할 때 발생한다. 따라서 공격자가 특정 URL을 뿌리고, 사용자가 이를 클릭하면 공격이 성사된다.

동작 과정

  1. 공격자는 특정 URL 파라미터에 특정 값을 넣으면 화면에 그 값이 반영됨을 인지한다.
  2. 공격자가 URL 파라미터에 악성스크립트를 넣는다.
  3. 공격자는 URL을 뿌린다.
  4. 사용자가 URL을 클릭한다.
  5. URL에 있던 악성 스크립트가 화면에 들어가면서 스크립트가 실행된다.

DOM-based XSS (DOM 기반 XSS)

클라이언트 측에서 실행되는 자바스크립트 코드가 직접적으로 악성 스크립트를 처리하는 공격이다.

웹 페이지의 자바 스크립트에서 URL등에서 정보를 받아 화면에 띄우는 코드가 존재하면 발생한다.

document.write(window.location.hash);

위 코드와 같이 url 값을 js에서 받아 화면에 출력하는 경우,

<http://vulnerable-site.com/#>alert('Hacked');

위 주소를 접속하면 스크립트가 실행될 수 있다.

동작 과정

  1. 공격자가 URL에 악성스크립트를 심는다.
  2. 사용자가 이 URL을 클릭한다.
  3. URL에 있던 악성 스크립트를 자바스크립트가 받아, 동적으로 페이지 내용을 변경하는 과정에서 악성스크립트가 실행된다.