보안/웹 보안

[Cross-Site-Scripting (XSS)]

kykyky 2024. 6. 8. 08:37

💡XSS

- 클라이언트 사이드 취약점

 

- 영향: 공격할 사이트의 오리진에서 스크립트를 실행시킴

 

- 과정

공격자:
게시글 작성을 통해 웹 리소스에 오리진 권한으로 악성 스크립트를 삽입하고, 이 페이지에 피해자가 접속하도록 유도

피해자:
웹 브라우저는 해당 페이지에 방문하면 본래 사이트가 명령한 것으로 해석하여 악성 스크립트 실행
(웹 브라우저는 HTTP 형식으로 웹 서버에 리소스를 요청하고,

서버로부터 받은 응답(HTML, CSS, JS 등의 웹 리소스)를 시각화하여 피해자에게 보여줌
이 과정에서 변조된 페이지를 보거나 스크립트가 실행됨)

공격자:
특정 계정의 쿠키 및 세션 정보를 탈취하고, 해당 계정으로 임의의 기능을 수행

 

- 자바스크립트 많이 이용됨:

자바스크립트는 웹 문서의 동작(버튼 클릭 시, 데이터 입력 시에 발생하는 이벤트 형태 등)를 정의하고 구현.

또한, 이용자를 식별하기 위한 세션 및 쿠키가 웹 브라우저에 저장되어 있음.

--> 공격자는 자바스크립트를 통해 이용자에게 보여지는 웹 페이지를 조작하거나, 웹 브라우저의 위치를 임의의 주소로 변경.

 

- SOP에 의해, 서로 다른 오리진에서는 정보를 읽는 행위가 이전에 비해 힘들어짐. 하지만 우회 기술 개발되고 있음

1. Stored XSS

공격자:
eg. 게시물과 댓글에 악성 스크립트를 포함해 업로드
※ 게시물은 불특정 다수에게 보여지므로, 여기에 XSS 취약점이 존재하면 파급력이 큼

서버에서:
악성 스크립트는 데이터베이스 또는 파일 등의 형태로 저장됨

피해자:
해당 게시물을 조회하면 악성 스크립트가 서버의 응답에 담겨서 옴

 

아래는 공격자가 form에 임의의 악성 스크립트가 포함된 텍스트를 입력함으로써 게시물을 작성하고 이것이 서버에 저장되는 것이다.

 

 

2. Reflected XSS

피해자:
Click Jacking 또는 Open Redirect 등의 취약점 이용한 공격자에 의해 유도되어,
악성 스크립트가 포함된 이용자 요청을 보냄: URL 접속, 검색 문자열 등

서버:
검색 결과를 응답에 실어 이용자에게 반환

 

악성 스크립트가 삽입된 URL에 접속하면 아래와 같이 그 스크립트가 실행된다.  

 

 

3. DOM-based XSS

- 악성 스크립트가 URL Fragment에 삽입됨

※ Fragment는 서버의 요청/응답에 포함되지 않음

 

4. Universal XSS

- 클라이언트의 브라우저 혹은 브라우저의 플러그인에서 발생

- SOP 정책을 우회함