해킹/웹해킹
5주차 과제 1_XSS 강좌 정리
코코딩딩
2020. 11. 30. 19:41
1. XSS 관련 youtube 강좌
<웹 해킹 강좌 – XSS(Cross Site Scripting) 공격의 개요와 실습>
XSS 공격 : 스크립트 정보를 삽입하는 공격이라 할 수 있음, 대상은 JS(JavaScript)
가장 기본적인 Cross Site Scripting 공격 구문
<script>
alert(“XSS 공격!”); // 가장 기본적인 Cross Site Scripting 공격 구문
</script>
이러한 공격이 통하지 않는다면, Cross Site Scripting 다양한 스크립팅 공격이 가능하므로 여러 공격을 시도 (이러한 점이 CSS의 장점)
- <a href=“javascript:alert(‘XSS’)”XSS</a>
- <img arc=“#” onerror=“alert(‘XSS 공격!’);”>
- 아스키 코드를 이용 (아스키 코드 형태로 보내주면, 일부 웹서버는 필터링을 해주지 않아 공격이 통함)
- 기타 등등...
Cross Site Scripting 공격에서는 허점을 찾는 것이 중요!
2. XSS 관련 드림핵 강좌 & 실습
Same Origin Policy(SOP) : 서로 다른 오리진의 문서 또는 스크립트 들의 상호 작용을 제한하는 정책
오리진 : 프로토콜, 포트, 호스트로 구성, 구성 요소가 모두 일치해야 동일한 오리진
SOP가 적용된 상태에서도 리소스를 공유하는 방법
- postMessage : 메시지를 주고받기 위한 이벤트 핸들러를 이용해 리소스를 공유
- JSONP : 스크립트 태그를 통해 다른 오리진의 리소스를 요청하고, 응답 데이터를 현재 오리진의 Callback 함수에서 다루는 방식으로 리소스를 공유
- Cross Origin Resource Sharing (CORS) 헤더 사용 : 다른 오리진이 허용하는 설정 등을 HTTP 헤더를 통해 확인한 후 허용하는 요청을 보내 리소스를 공유
취약점과 공격 방식
- Cross Site Scripting (XSS) : 공격자의 입력값이 크로스 사이트의 자바스크립트 일부로 웹 브라우저에서 실행되는 취약점, 실행된 스크립트는 SOP 제약 없이 사이트의 구조를 변경하거나 임의 HTTP 요청을 보낼 수 있음
- Cross Site Request Forgery (CSRF) : 비정상적으로 사용자의 의도와 무관하게 HTTP 요청을 보내는 것, Simple Request나 HTML 엘리먼트라면 SOP의 제약을 받지 않는 점을 이용
- Open Redirect : Redirect 기능을 악용해 피싱사이트로 접속을 유도하거나, 다른 취약점을 연계하여 사용자를 공격
- Click Hijacking : 공격자가 생성한 버튼, 이미지와 같은 엘리먼트를 겹쳐 올려 UI를 스푸핑해 사용자 의도와는 다른 작업을 수행하게 하는 취약점
XSS 공격의 요구 조건
- 입력 데이터에 대한 충분한 검증 과정이 없어야 합니다.
- 서버의 응답 데이터가 웹 브라우저 내 페이지에 출력 시 충분한 검증 과정이 없어야 합니다.
XSS with Javascript : 대표적인 방법은 script 태그를 이용하는 방식
ex) 페이지 변조 공격의 예시
<script>
// 사용자의 페이지 정보에 접근.
document;
// 사용자의 페이지에 데이터를 삽입.
document.write("Hacked By DreamHack !");
</script>
Stored XSS : 악성 스크립트가 서버 내에 존재하는 데이터베이스 또는 파일 등의 형태로 저장되어 있다가 사용자가 저장된 악성 스크립트를 조회하는 순간 발생하는 형태의 XSS
Reflected XSS : 악성 스크립트가 사용자의 요청과 함께 전송되는 형태
XSS 방어 기술
- Server-side Mitigations : XSS를 유발할 수 있는 태그 삽입을 방지하기 위해 서버 단에서 검증하는 방법 +) 화이트리스트 필터링 : 허용해도 안전한 일부 태그, 속성을 제외한 모든 값을 필터링 하는 것
- HTTPOnly Flag : 서버 측에서 응답 헤더에 Set-Cookie 헤더를 전송해 자바스크립트에서 해당 쿠키에 접근 하는 것을 금지
- Content Security Policy(SP) : 응답 헤더나 meta 태그를 통해 선언, 각각의 지시어를 적용하여 사이트에서 로드하는 리소스들의 출처를 제한
- X-XSS-Protection : Response Header에 선언해서 사용 (
실 서비스의 보안을 위해서 헤더를 신뢰하지 않는 것을 권장한다고 함)
Content-Security-Policy: <지시어>; // CSP 선언 방식
...
X-XSS-Protection: <값> // X-XSS-Protection 선언 방식