XSS 공격에 일반적으로 사용되는 몇가지의 백터를 알아보자.
- <script> 태그: 스크립트 태그는 외부 Java script 코드를 참조하는데 사용할 수 있으므로 가장 간단한 XSS 태그이다. 공격자는 스크립트 태그 내에 악성코드를 삽입할 수 있다.
- Java Script 이벤트: 공격자가 사용하는 또 다른 태그인 이벤트 속성은 다양한 태그에 적용된다. "onerror" 및 "onload"와 같은 속성이 예이다.
- <body> 태그: 이벤트 속성은 "body" 태그를 통해 제공되는 경우 스크립트의 소스가 될 수도 있다.
- <img> 태그: 사용중인 브라우저에 따라 이 속성은 유용할 수 있따.
- <iframe> 태그: 피싱 공격에 효과적인 이 벡터를 XSS 공격이 현재 페이지에 다른 HTML 페이지를 삽입할 수 있도록 한다.
- <input> 태그: 일부 브라우저는 이 벡터를 통한 조작이 허용된다.
- <link> 태그: 이 태그는 외부 스타일 시트에 연결하는 일반 사용 대신 스크립트를 포함할 수 있다.
- <table> 태그: background 속성이 일반적으로 이미지를 참조하는 경우 문제가 되는 스크립트를 참조하도록 손상될 수 있다.
- <div>태그 : 이 태그는 배경 참조도 포함하여 <table>과 같은 방식으로 스크립트를 참조하는데 사용할 수 있다.
- <object> 태그: 이 태그를 사용하여 외부 사이트의 스크립트를 포함할 수 있다.
XSS 방지 하는 방법에 대한 설명
1. 출력 시 데이터 인코딩
사용자가 제어할 수 있는 데이터가 페이지에 작성되기 전 사용하는 언어에 따라 직접 인코딩을 적용해야한다.
HTML에서는 허용되지 않은 값을 HTML 엔터티로 변환한다. 저번 게시물에 첨부되었던 사진을 재 첨부한다.
반면 Java Script의 경우 영문자가 아닌 값은 유니코드로 이스케이프 되어야한다.
유니코드 이스케이프 시퀀스는 백슬래쉬 뒤에 문자 'u'와 4개의 16진수 숫자가 오는 것으로 대상 시퀀스의 문자를 4자리 숫자로 지정된 값과 일치시킨다.
" < 는 \u003c, >는 \u003e로 변환된다. "
** PHP에서 XSS 방지
엔티티를 인코딩하는 내장함수를 사용해야한다. HTML 내부에서 입력을 이스케이프 하려면 이 함수를 호출해야한다. 함수는 세가지 인수로 호출한다.
- 입력 문자열
- ENT_QUOTES (모든 따옴표가 인코딩되어야함을 지정)
- 대부분의 경우 UTF-8이어야한다.
2. 도착 시 입력 확인
입력 유효성 검사의 예는 URL을 제출했을 때 HTTP 나 HTTPS와 같은 안전한 프로토콜로 시작하는 지를 확인해야한다. 또, 사용자가 숫자로 예상되는 값을 제공하는 경우 값에 실제로 정수가 포함되어 있는지 확인한다. 입력에 예상되는 문자 집합만 포함되어 있는지 확인한다.
- 화이트 리스트와 블랙 리스트
일반적으로 블랙리스트가 아닌 화이트 리스트의 사용.
3. 데이터를 삭제한다.
안전하지 않은 것으로 간주되는 HTML 태크와 같은 원치않은 데이터를 검사하고 제거한다. 사용자 입력에 HTML이 포함되어야 하는 경우 유효한 태그가 손상되므로 이스케이프/ 인코딩할 수 없기 때문에 신뢰할 수 있는 라이브러리를 사용해 HTML 구문을 분석하고 정리한다.
예를 들어 .NET용 라이브러리는 HtmlSanitizer로 XSS 공격을 대응하기 위해 만들어졌다. 이와 같은 라이브러리로 DB 작업 전에 선처리를 해줄 수 있다.
4. HttpOlny 플래그 설정
쿠키에 대해 Http Only 플래그를 설정하여 쿠키에 엑세스하지 못하게 한다.
5. 콘텐츠 보안 정책(CSP)을 사용하여 XSS 완화
공격자가 수행할 수 있는 작업을 제한하는 방법으로 XSS를 완화시킬 수 있다. CSP를 사용하면 외부 스크립트를 로드할 수 있는 지 여부 및 인라인 스크립트를 실행할지 여부와 같은 다양한 항목을 제어할 수 있다.
'Web hacking > Nomaltic) 웹 해킹 수업 노트 👩💻' 카테고리의 다른 글
[7주차]CSRF(Cross Site Request Forgery)란? (0) | 2021.11.24 |
---|---|
[6주차]XSS 키로커 삽입과 대응방안 (0) | 2021.11.20 |
[5주차]XSS(Cross site script)를 공부해보자 + XVWA에서 실습 (0) | 2021.11.12 |
[5주차]XSS(Cross-Site Scripting)이란? (0) | 2021.11.10 |
Burp suit 유투브 강의 듣기 (0) | 2021.11.09 |