※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다. (Note: Security-related learning is allowed, but the individual is solely responsible for any legal consequences arising from the use of the acquired knowledge.)
※ 공부 기록용 포스트이며, 검수를 하고 올리지만 간혹 잘 못된 정보가 있을 수도 있습니다.
[보안 공부] 9주 차 - XSS(크로스 사이트 스크립팅), 보고서 작성
XSS(Cross Site Scripting), 보고서 작성
1. XSS란?
XSS란? Cross Site Scripting 웹 페이지에 스크립트를 삽입하여 사용자에게 스크립트를 실행시키는 것
어떤 결과를 초래하는가?
사용자 정보 탈취 쿠키, 세션, 사용자 데이터 탈취 가능
피싱 공격 사용자가 접속하는 신뢰하는 사이트이므로 피싱 사이트로 유도 가능
웹 페이지 변조 웹 사이트 내용 변조나 광고 삽입 등 가능
악성 소프트웨어 배포 XSS를 통해 악성 소프트웨어 배포 가능
DoS 공격에 사용 스크립트로 서버에 과도한 요청 가능
2. XSS 유형
저장형 XSS (Stored XSS) 스크립트가 서버에 저장되어 접속하는 사용자에게 실행 (ex.게시판)
반사형 XSS (Reflected XSS) 스크립트가 서버로부터 반사되어 사용자에게 돌아오는 유형 (ex. 입력한 ~id는 이미 존재합니다!)
DOM 기반 XSS (DOM-based XSS) 클라이언트 측의 DOM(Document Object Model) 환경에서 실행되는 유형. 브라우저란 웹 페이지를 보여주기 위한 HTML, CSS, Javascript 해석기라고 볼 수 있는데, DOM은 HTML 문서를 구조화된 객체 모델로 표현한 것으로, 브라우저의 중요 기능 중 하나이다. 그런 DOM을 악의적으로 조작하여 사용자 측에서 새롭게 악성 스크립트를 생성하고 실행하게 한다. 일종의 브라우저 기능을 악용하는 것이라고 생각할 수 있다. 주로 이를 위해 악성코드가 심어진 'URL'을 사용한다. (이 경우 서버까지 갈 필요도 없다. 서버까지 가지 않고 사용자 브라우저 단에서 끝난다.)
4. XSS 취약점 확인 방법
XSS 공격은 어떻게든 사용자 단에서 스크립트로 작동하게 만들면 된다! 그 부분을 찾으면 된다!
스크립트로 작동할 수 있는 코드를 웹 페이지에 심던지(저장형 XSS), 반사 받는 기능(반사형 XSS)을 이용하던지, URL에 악성 스크립트를 심어서 DOM을 조작하던지 (DOM-based XSS) 방법은 다양하다.
그렇다면 확인 방법은 스크립트가 실행되는지 확인하면 된다. 어떤 게시판에 <script>alert('xss!!')</script>를 입력하고 게시글을 열람하는데 아래와 같이 브라우저에서 alert 창이 뜬다면 스크립트로 코드가 실행된 것이니 취약점인 것이다.alert('xss!!')스크립트 실행 모습
입력 시 특수문자 < > Left, Right Angle Bracket, 따옴표 ' " Single, Double Quotation mark를 거르지 않고 받고, HTML로 출력하는 곳을 찾는다.
찾았으면, alert, prompt, confirm 같은 기본적인 스크립트를 삽입해 보고 스크립트가 실행되는지 확인해 본다.
자세한 예시는 아래 XSS 취약점 보고서(과제) 참고
5. XSS 방어
방어는 어떻게든 스크립트로 실행되지 않도록 막으면 된다!
입력 검증(Input Validation), 출력 이스케이프(Output Escaping), HTML entity로 특수문자 거르기
보안 라이브러리 사용
자바스크립트 프레임워크 사용 (요즘 프레임워크는 XSS 공격 방지 기능 기본 탑재)
HTTPOnly 및 Secure 플래그 설정 (XSS 공격을 당했을 경우 쿠키 탈취 방지)
서버 측에서, 사용자가 스크립트를 넣지 못쓰도록 설정(Content Security Policy, CSP)