XSS
1. xss
- xss는 Cross Site Script의 약자로 cross인데 왜 x인지 궁금한 사람들이 많을 텐데 css는 이미 Cascading Style Sheets의 약어로 사용되고 있어 XSS라 한다.
- xss는 사용자가 요청한 페이지에 강제로 악성 스크립트를 삽입하여 브라우저에서 악의적인 동작이 실행되도록 하는 공격이다. 또한 대부분의 웹 해킹 공격과는 다르게 클라이언트(사용자)를 대상으로 하는 공격이다.
- xss의 기본 공격 방식은 사용자의 브라우저가 악성 스크립트를 실행하게 하는 것이나 그 방식에 따라 크게 Reflected-XSS, Stored-XSS, DOM-based-XSS 이렇게 세 종류로 나뉜다.
2. Reflected-XSS
- Reflected XSS는 직역하면 반사형 XSS로 사용자의 요청에 포함된 스크립트가 서버로부터 그대로 반사(Reflected)되어 응답 메시지에 포함돼 브라우저에서 스크립트를 실행되는 공격이다.
- 반사된 xss는 피싱 공격의 일부로 자주 사용되며 악용하기도 차단하기도 가장 쉬운 공격이다.
- Reflected XSS의 간단한 예시로 http://www.url.com/reflectedxss.php?name=<script>alert('공격!!!');</script>로 서버에 스크립트를 포함한 요청을 보낼 경우 스크립트가 보낸 그대로 브라우저로 응답되어 스크립트가 실행된다.
3. Stored XSS
- Stored XSS는 직역하면 저장된 XSS로 이름에서도 예상할 수 있듯이 악성 스크립트가 서버측에 저장되어 사용자들의 요청이 있을 때마다 저장된 스크립트가 사용자에게 응답되어 스크립트를 실행시키는 공격이다.
- 예를 들면 웹사이트 상의 글을 남길수 있는 페이지에서 스크립트를 포함한 글을 작성하여 저장하고 해당 게시글을 읽는 모든 사람은 저장된 스크립트가 실행되어진다. 따라서 해당 취약점은 경우에따라 불특정 다수에게 영향을 끼칠 수 있기 때문에 주의해야한다.
4. DOM-based XSS
- DOM-based XSS는 풀어서 말하면 문서 객체 모델 기반 xss로 영어로는 Document Object Model based XSS 이다.
- DOM-based XSS는 클라이언트(사용자)의 브라우저에서 DOM 환경을 수정하여 코드가 예상치 못한 방식으로 공격 구문이 실행되는 XSS(Cross Site Scripting) 공격이다.
- Stored XSS, Reflected XSS 취약점인 경우 서버 측 결함으로 인해 응답 페이지에 악성 스크립트 구문이 포함되어 브라우저로 전달되는 것이지만, DOM-Based XSS 취약점인 경우 서버와 관계없이 브라우저에서 발생한다.
- 간단한 예로 http://www.url.com/domxss.php#default=<script>alert(document.cookie)</script>
5. xss의 보안방안
- xss공격은 굉장히 오래된 공격 기법이면서 취약성 테스트가 비교적 쉬운편이기 때문에 공격시도가 매우 높다. 개발되는 애플리케이션이 점점 다양해지고 방대해지면서 간과하고 넘어가는 경우가 많아 아직도 빈번히 발생되는 웹 취약점 상위권에 속해있다. 그러니 경각심을 가지고 사용자의 입력에 대해서 항상 의심하고 만에 하나 일어날수 있는 일에 검증하는 작업이 필요하고 HTML태그 또는 자바스크립트에서 사용하는 특수문자들에 대해 필터링 또는 인코딩을 하여 xss공격에 대응해야 한다.
# 이미지 출처 : https://www.ahnlab.com/