본문 바로가기

보안(Security)

크로스 사이트 스크립팅(Cross Site Scripting, XSS)

공격자가 공격하려는 웹 사이트에 악성 스크립트를 넣는 기법이다. 웹 사이트에 악성 스크립트를 넣어 해당 사이트에 접속하는 유저의 쿠키, 세션 토큰 등의 민감한 정보를 탈취한다. 이 공격을 이용해 사용자의 쿠키 등을 탈취하여 CSRF 공격까지 이어지는 경우도 있다.

 

자바스크립트를 사용하여 공격하는 경우가 가장 많다. XSS 공격은 크게 두 가지 방법으로 나뉜다. 아래의 두 가지 이외에도 다양한 방법이 존재한다.

 

공격 방법

1. Stored XSS (Persistent XSS)

공격자의 악성 스크립트가 서버에 저장되어 지속적인 공격이 가능하므로 Stored XSS 라고 부른다.

웹 사이트 게시판, 댓글 등에 악성 스크립트를 작성하여 공격하는 방식이다. 공격자가 게시판에 공격 스크립트를 작성하면, 서버는 해당 게시글을 본인의 서버에 저장한다. 이후 사용자가 해당 게시글에 접근할 경우 악성 스크립트가 담겨 있는 게시글을 response로 보내주게 되면 악성 스크립트가 실행되면서 사용자의 정보(토큰, 세션 정보)들이 탈취하게 된다.

 

 

<script> alert("test"); </script>

웹사이트에 다음과 같은 게시글을 작성한 뒤, 해당 게시글에 접속하게 되면 alert가 뜨는 것을 확인 할 수 있을 것이다. 만약 실험해 보고 싶다면 본인의 웹서버를 만들어서 로컬에서 해보는 것을 추천한다.

 

 

2. reflected XSS (Non-persistent XSS)

악성스크립트가 서버에 저장되는 것이 아니고 1회성 공격이기 때문에 반사형, 비 지속형 공격이라고 칭한다.

 

공격자가 악성 스크립트를 삽입한 URL 등을 사용자에게 전송한다.

사용자가 해당 링크를 클릭한다.

서버는 사용자에게 request를 받고, 악성 스크립트가 포함된 정보를 사용자에게 response 해준다.

악성 스크립트가 실행되며 사용자의 cookie 정보 등이 공격자에게 넘어간다.

 

http://test.com?search=<script>alert("test");</script>

 

이외에도 다양한 XSS 공격 기법들이 존재한다.

 

방어기법

서버

가장 일반적으로 사용하는 방법은 string 필터링이다. url 요청, 게시글 등에 script 등의 키워드들이 들어가 있으면 필터링해주는 기능을 넣어서 막을 수 있다. 또한 이미 잘 만들어져 있는 XSS 방어 라이브러리들이 많이 존재한다.

 

사용자

사용자가 가장 주의해야할 점은 잘 알지 못하는 링크를 함부로 클릭하지 않는 것이다. 문자 등으로 날아오는 여러 스팸 링크들을 절대 절대 누르지 말자.

'보안(Security)' 카테고리의 다른 글

스머프 공격 (Smurf attack)  (0) 2022.08.23
ARP spoofing (Address Resolution Protocol) ARP 스푸핑  (0) 2022.08.09
악성 스크립트  (0) 2022.08.03
Cross-Site Request Forgery(CSRF)  (0) 2022.08.02