XSS란?
XSS는 Cross Site Scripting의 약자로, 원래는 CSS가 맞지만 Cascading Style Sheet의 약자 CSS가 널리 사용되고 있으므로, 혼동하지않기위해 XSS라고 합니다.
간단하게 공격자가 웹사이트에 자바 스크립트와 같은 스크립트 코드를 삽입해 사용자를 공격할 수 있는 방법입니다.
XSS는 Reflected XSS, Stored XSS, DOM Based XSS 세 가지의 공격 형태로 분류할 수 있습니다. 이 포스팅에서는 Reflected XSS, Sotred XSS 두가지에 대하여만 정리해보겠습니다.
Stored XSS (저장형 XSS)
게시판과 같은 텍스트를 입력하고 서버에 저장되는 웹사이트에 공격자가 악의적인 스크립트 코드 를 삽입하여 사이트 서버에 저장시킵니다.
그 후, 다른 웹사이트 사용자는 공격자가 저장시켜놓은 스크립트 코드가 노출되는 페이지에 접근하여 공격을 당합니다.
Stored XSS 흐름 요약
- 공격자가 악의적인 스크립트가 담긴 게시물을 등록
- 데이터베이스에 해당 스크립트가 저장됨
- 사용자가 게시글을 읽음
- 스크립트 실행
Reflected XSS (반사형 XSS)
웹 어플리케이션의 지정된 파라미터를 사용할 때 발생하는 취약점을 이용한 공격법입니다.
검색어와 같은 쿼리스트링을 URL에 담아 전송했을 때, 서버가 필터링을 거치지 않고 쿼리에 포함된 스크립트를 응답페이지에 담아 전송함으로써 발생합니다.
공격용 스크립트가 대상 웹사이트에 있지않고, 다른 매체(타 사이트, 이메일) 에 포함될 수 있습니다.
Stored XSS는 데이터베이스에 스크립트가 저장되지 않고 응답 페이지로 바로 클라이언트에 전달된다는 차이점이 있습니다.
Reflected XSS 흐름 요약
- 공격자가 보안이 취약한 사이트를 발견합니다.
- 보안이 취약한 사이트에서 사용자 정보를 빼돌릴 수 있는 스크립트가 담긴 URL을 만들어 일반 사용자에게 스팸 메일과 같은 형태로 전달합니다.
- 일반 사용자는 공격자로부터 전달받은 URL 링크를 클릭합니다. 일반 사용자 브라우저에서 보안이 취약한 사이트로 요청을 전달합니다.
- 일반 사용자의 브라우저에서 응답 메세지를 실행하면서 악성 스크립트가 실행됩니다.
- 악성 스크립트를 통해 사용자 정보가 악의적인 사용자에게 전달됩니다.
실제 사례
네이버 웹툰 댓글 테러 사건
2011년 2월 17일 네이버 웹툰 댓글에 html을 작성하는 것이 허용되었는데, 이 점을 이용하여 사용자들이 img 태그를 이용하여 이미지 댓글 테러를 한 사건입니다.
이후 네이버에서 댓글에 html태그 작성 기능을 막으면서 해결되었습니다.
방지법
- 쿠키에 HttpOnly 옵션 활성화
- 해당 옵션을 활성화 하지 않으면 스크립트를 통해 쿠키에 접근할 수 있어 세션 하이재킹 취약점이 발생합니다.
- 클라이언트(브라우저 등) 에서 설정할 수 있는것이 아니고, 서버단에서 HttpOnly 옵션을 설정할 수 있습니다.
- HttpOnly는 쿠키를 사용할 경우에만 해당되므로 LocalStorage를 사용할 경우 세션ID와 같은 민감한 정보를 저장하지 않도록 합니다.
- XSS 공격 가능한 문자열을 서버에서 치환
- 직접 구현하기보단 Lucy Filter와 같은 오픈소스를 적용할 수 있습니다.
※ 단, Lucy Filter는 @Request Body로 받는 JSON 데이터에 대해서는 치환할 수 없습니다.
- 직접 구현하기보단 Lucy Filter와 같은 오픈소스를 적용할 수 있습니다.
Reference
https://www.youtube.com/watch?v=bSGqBoZd8WM&t=561s
https://4rgos.tistory.com/1
https://junhyunny.github.io/information/security/spring-mvc/reflected-cross-site-scripting/
'개발 > ETC' 카테고리의 다른 글
트랜잭션 전파속성과 UnexpectedRollbackException (0) | 2024.08.11 |
---|---|
[Datagrip] MySQL sqldump Export & Import (0) | 2024.08.10 |
도커로 젠킨스 설치, 설정 가이드 (0) | 2023.10.12 |
테스트코드에서 Lombok 사용하기 (0) | 2023.09.01 |
CORS와 SOP (0) | 2023.08.04 |
개발을 하며 만났던 문제들과 해결 과정, 공부한 내용 등을 기록합니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!