본문 바로가기
Security

[Security] XSS(Cross-Site Scripting) 이란?

by 선인장 🌵 2022. 4. 7.
728x90
728x90

XSS(Cross-Site Scripting) 이란?

XSS(Cross-Site Scripting)은 공격자가 취약한 응용 프로그램과 사용자 간의 상호 작용을 손상시킬 수 있는 웹 보안 취약점이다.

XSS는 웹 애플리케이션에서 많이 발생하는 취약점이며, OWASP Top 10에서 항상 Top 10에 속하는 취약점이다.

그럼 간단히 XSS에 대해서 알아보도록 하자.

[Security] XSS(Cross-Site Scripting) 이란?

1. XSS(Cross-Site Scripting)

XSS 취약점은 애플리케이션이 신뢰할 수 없는 데이터를 가져와 적절한 검증이나 제한 없이 웹 브라우저로 보낼 때 발생한다.

XSS는 공격자가 피해자의 브라우저에 스크립트를 실행하여 사용자 세션 탈취, 웹 사이트 변조, 악의적인 사이트로 이동할 수 있다.

 

사이트 간 스크립팅 - 위키백과, 우리 모두의 백과사전

사이트 간 스크립팅(또는 크로스 사이트 스크립팅, 영문 명칭 cross-site scripting, 영문 약어 XSS)은 웹 애플리케이션에서 많이 나타나는 취약점의 하나로 웹사이트 관리자가 아닌 이가 웹 페이지에

ko.wikipedia.org

XSS 공격 방식에는 Reflected(반사형) XSS / Stored(저장형) XSS / DOM 기반 XSS로 나눌 수 있다.

취약성 점검 혹은 취약점 제보를 받은 경우 Reflected(반사형) XSS , Stored(저장형) XSS에 대해 정확히 알아야 한다.

여러 공통된 특징이 있지만 어떤 방식으로 확인하고 악용하는 것에 대해서는 많은 차이가 있다.

728x90

2. Reflected(반사형) XSS

Reflected(반사형) XSS는 URL, URL 파라미터, Cookie 파라미터 등 사용자가 입력한 내용에 대해서 응답 페이지에 실행되는 취약점을 의미한다.

결국 사용자가 입력한 특정 내용에 대해서 해당 웹 페이지 화면에 출력되는 형태의 취약점이다.

아래 이미지를 통해서 예시를 확인해 보자.

2. Reflected(반사형) XSS
2. Reflected(반사형) XSS

1. 사용자는 서비스에 로그인을 한다.

2. 공격자는 조작한 서비스 URL을 사용자에게 제공한다.

3. 사용자는 공격자의 URL을 입력 후 서비스에 요청한다.

4. 서버는 공격자의 스크립트에 응답한다.

5. 공격자의 스크립트는 사용자의 브라우저에서 실행된다.

6. 사용자의 브라우저는 공격자에게 중요정보(세션 등) 토큰을 전달한다.

7. 공격자는 사용자의 세션을 가로채 서비스에 로그인을 한다.

728x90

3. Stored(저장형) XSS

Stored(저장형) XSS는 공격자가 게시판 등과 같은 부분에 악의적으로 스크립트를 삽입하고 저장하여 다른 사용자가 해당 게시글을 보거나, 리스트 확인 시 악의적으로 삽입한 스크립트가 실행되는 취약점을 의미한다.

결국 공격자가 악의적으로 삽입한 스크립트가 게시글, DB 등에 저장되어 해당 부분이 웹 페이지 화면에 출력되면서 발생되는 형태의 취약점이다.

아래 이미지를 통해서 예시를 확인해 보자.

3. Stored(저장형) XSS
3. Stored(저장형) XSS

1. 공격자는 악성 스크립트가 담긴 내용을 저장한다. (게시글 등)

2. 사용자는 서비스에 로그인을 한다.

3. 사용자는 공격자가 저장한 내용을 열어본다.

4. 서버는 공격자의 스크립트에 응답한다.

5. 공격자의 스크립트는 사용자의 브라우저에서 실행된다.

6. 사용자의 브라우저는 공격자에게 중요정보(세션 등) 토큰을 전달한다.

7. 공격자는 사용자의 세션을 가로채 서비스에 로그인을 한다.

4. 대응방안

XSS의 대응방안에는 여러 가지가 있을 수 있다.

위 내용과 같이 Reflected(반사형) XSS , Stored(저장형) XSS에 대해서 결과적으로는 동일한 행위를 할 수 있으나, 동작 방식이 틀림에 따라 조치를 취해야 하는 위치도 틀릴 수 있다.

또한, 여러 프레임워크에서는 XSS와 같은 취약한 부분에 대한 방어를 위해 자체적으로 처리를 해주고 있다.

그러나 제일 좋은 방법은 개발을 하는 개발자가 직접적으로 입력값을 받는 부분에서는 특수문자(', ", < , >, &, /) 등에 대해서는 HTML Escaping 혹은 URL Encoding을 처리가 되도록 처리를 해주고 항상 서비스 오픈 전에 입력값을 받는 부분에 대해서 점검을 한다면 최소한으로는 기본적이고 간단한 XSS 공격에는 취약하지 않을 것이다.

728x90
728x90


🌵댓글

 

loading