XSS 공격을 성공적으로 수행하기 위해서는 아래의 2가지 조건이 요구
1. 입력 데이터에 대한 충분한 검증 과정이 없어야함
입력한 데이터가 충분한 검증 과정이 이루어지지 않아 악성 스크립트가 삽입될 수 있어야함
2. 서버의 응답 데이터가 웹 브라우저 내 페이지에 출력 시 충분한 검증 과정이 없어야함
응답 데이터 출력 시 악성 스크립트가 웹 브라우저의 렌더링 과정에 성공적으로 포함되어야함
XSS를 터트기위해 주로 사용되는 태그들
script, iframe, on* 이벤트(onmouseover, onload, onerror 등), embed, object
XSS는 크게 2가지로 분류
1. Reflected XSS
반사형 XSS
주로 검색기능에서 발생
2. Stored XSS
저장형 XSS
주로 댓글, 글쓰기 기능에서 발생
방어기법들
1. Server-side Mitigations
서버 단에서 검증하는 방법
HTML 형태를 지원할 필요가 없어 HTML 태그가 입력될 일이 없다면
꺽쇠 (<, >), 따옴표(", ')와 같은 특수 문자를
HTML Entity Encoding을 이용해 태그로써 인식이 안되도록 수정(Escape)
ex)
php-htmlspecialchars()
python-from jinja2 import utils
마크업을 지원해야한다면 화이트 리스트 필터링 사용
2. HTTPOnly 플래그 사용
Set-Cookie: NAME=VALUE; HttpOnly
JSscript에서 쿠기에 접글을 막음
session cookie에는 HTTPOnly 플래그를 사용하는 것이 좋음
3. CSP(Content Security Policy) 사용
응답 헤더나 meta 태그를 통해 아래와 같이 선언해서 사용할 수 있으며,
각각의 지시어를 적용하여 사이트에서 로드하는 리소스들의 출처를 제한가능
https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
default-src 'self' *.test.com
모든 리소스(이미지 파일, 스크립트 파일 등)의 출처가
현재 도메인이거나 *.test.com 도메인이 출처인 경우에만 허용
script-src
자바스크립트 코드의 출처를 제한할 수 있으며,
공격자가 외부에 업로드된 자바스크립트 파일을 호출하거나
직접 자바스크립트 코드를 작성하는 등의 행동을 막을 수 있음
script-src 'nonce-noncevalue13b739d8ea12' 와 같이
script-src를 이용해 nonce (랜덤) 값을 설정하고
HTML 태그를 이용해 자바스크립트를 실행할 때는
반드시 서버에서 생성된 nonce 값을 알아야만 실행될 수 있도록 할 수 있음
즉, XSS 공격을 당하더라도 서버에서 매번 생성되는 nonce 값을
유추할 수 없다면 일반적인 방법으로 자바스크립트 실행이 불가능
script-src 'sha256-hashvalue_base64'와 같은 형태로
자바스크립트나 스타일시트의 해시를 구해 CSP를 설정해주면
미리 구해둔 해시와 다를 경우 실행하지 않도록 할 수 있음
4. X-XSS-Protection
X-XSS-Protection: <value> 형식
웹 브라우저에 내장된 XSS Filter를 활성화할 것인지를 설정
XSS Filter는 웹 브라우저에서 전송된 Request 값이 XSS 공격 코드와 유사하게 생겼고,
Response에 해당 공격 코드가 포함되었을 경우에
XSS 공격이 수행되었다고 판단하여 XSS 공격이 발생했음을 유저에게 알리고 차단
X-XSS-Protection: 0
X-XSS-Protection: 1
X-XSS-Protection: 1; mode=block
X-XSS-Protection: 1; report=<reporting-uri>
0일 경우 XSS Filter를 사용하지 않으며
Header를 선언하지 않았을 때의 브라우저 기본 값은 1
1일 경우 XSS 공격이 감지되면 해당 부분만 제거한 뒤 페이지 결과를 화면에 출력
mode=block일 경우 XSS 공격이 감지되면 페이지 전체의 렌더링을 중단하며,
report를 선언할 경우에 XSS 공격이 감지된 사실을
미리 설정된 주소에 신고하여 운영자가 대처하기 쉽도록 도와줌
XSS Filter는 XSS 공격에 대한 강력한 방어수단이었지만, 최신 브라우저에서 삭제되는 추세
https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-XSS-Protection
XSS CheatSheet
http://dntsecurity.blogspot.com/2017/02/xss.html
Cheat Sheet
https://www.owasp.org/index.php/XSS_Filter_Evasion_Cheat_Sheet
https://portswigger.net/research/one-xss-cheatsheet-to-rule-them-all
https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
'공격기법 > Web' 카테고리의 다른 글
XSS와 CSRF의 차이 (0) | 2020.03.08 |
---|---|
브루트 포스 공격 (0) | 2020.01.28 |
CSRF(Cross Site Request Forgery) (0) | 2019.11.15 |
SQL Injection (0) | 2019.09.09 |
URL 점핑(Jumping) (0) | 2019.05.24 |