XSS (Cross-Site Scripting) 이란?
가장 널리 알려진 웹 보안 취약점 중 하나입니다.
악의적인 사용자가 공격하려는 사이트에 악성 스크립트를 삽입할 수 있는 보안 취약점입니다.
XSS를 통해 악성 코드를 제어하는 사이트로 리다이렉트 하거나, 사용자의 쿠키를 탈취하여 세션 하이재킹 공격을 할 수 있습니다.
대표적인 공격 방식은 다음과 같습니다.
- Stored XSS
- Reflected XSS
- DOM Based XSS
Reflected XSS
악의적인 사용자가 악성 스크립트가 담긴 URL을 만들어 일반 사용자에게 전달하는 경우입니다.
악의적인 사용자는 URL 주소 뒤에 붙은 쿼리에 악성 스크립트를 작성하여 전달합니다.
후에 공부할 Stored XSS 는 데이터베이스에 스크립트가 저장되었지만, Reflected XSS 은 응답 페이지가 바로 클라이언트에 전달되는 차이점이 있습니다.
Reflected XSS 공격 시나리오
- 악의적인 사용자가 보안이 취약한 사이트를 발견했습니다.
- 보안이 취약한 사이트에서 사용자 정보를 빼돌릴 수 있는 스크립트가 담긴 URL 을 만들어 일반 사용자에게 스팸 메일로 전달합니다.
- 일반 사용자는 메일을 통해 전달받은 URL 링크를 클릭합니다. 일반 사용자 브라우저에서 보안이 취약한 사이트로 요청을 전달합니다.
- 일반 사용자의 브라우저에서 응답 메세지를 실행하면서 악성 스크립트가 실행됩니다.
- 악성 스크립트를 통해 사용자의 정보가 악의적인 사용자에게 전달됩니다.
Reflected XSS 공격 시연
1. 다음과 같은 사이트가 있습니다. (허름 하니 딱봐도 잘 털릴 것 같습니다.)
2. 해커가 악성 스크립트를 입력해봅니다.
3. 실행이 되고 악성 스크립트가 URL 에 사용되는 것을 확인합니다.
4. 사용자의 쿠키를 탈취하는 스크립트로 URL 를 만듭니다.
5. 공격 URL 주소를 다른 일반 사용자가 알아보지 못하도록 다른 URL 주소로 변경한 후 일반 사용자에게 전달합니다.
shorturl.at/uIOYZ
6. 일반 사용자는 전달 받은 URL을 클릭하게 되고 악성 스크립트가 실행되게 됩니다. (아래 예시에서는 쿠키가 탈취됩니다.)
7. 악성 스크립트가 추가된 URL 을 통해 악성 코드를 다운로드 받는 사이트 혹은 유사 사이트로 리다이렉트(redirect) 시킬 수 있습니다.
Reflected XSS 방어
그럼 어떻게 방어해야할까요?
1. 입력값 제한
브라우저에서 정규표현식을 사용해 입력을 제한합니다.
- 한글, 영어, 숫자, 공백만 입력 가능하게 합니다.
2. 입력값 치환
악성 스크립트를 만들 수 있는 특수 문자를 치환합니다. 모든 요청에 대해 치환을 적용할 수 있도록 필터를 만들어 이를 적용합니다.
Test Code Repo
https://github.com/0xdbe-appsec/xss-reflected-express
참고자료
1. https://junhyunny.github.io/information/security/spring-mvc/reflected-cross-site-scripting/
'CS > 네트워크 & 웹' 카테고리의 다른 글
DOM 기반(DOM based) XSS(Cross-Site Scripting) 공격과 방어 (0) | 2023.04.22 |
---|---|
저장형(Stored) XSS(Cross-Site Scripting) 공격과 방어 (0) | 2023.04.14 |
토큰을 어디에 저장해야할까요? (4) | 2023.04.13 |
Transfer-Encoding: Chunked (0) | 2023.04.11 |
REST란? REST API 와 RESTful API (0) | 2023.04.11 |