XSS (Cross-Site Scripting)
<aside>
💡 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법
</aside>
크로스 사이트 스크립팅은 자바스크립트를 사용하여 공격하는 경우가 많다. 공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많다. 여러 사용자가 접근 가능한 게시판 등에 코드를 삽입하는 경우도 많으며, 경우에 따라서는 메일과 같은 매체, 심지어는 닉네임에 코드를 심기도 한다.
- 쿠키 정보 또는 세션 ID 탈취
- 시스템 관리자 권한 탈취
- 악성코드 다운로드
Stored XSS와 Reflected XSS 차이
-
Stored XSS (저장형) - Persistent
- 스크립트가 서버에 저장되어 실행되는 방식
- XSS 취약점이 있는 타겟 서버에 악성 스크립트를 저장시킨 후, 브라우저가 서버에 데이터를 요청하면 서버는 조작된 스크립트를 받게 된다. 만약 회사 등 조직의 개인 컴퓨터가 해킹될 경우, 조직 내부로 악성 코드가 이동하여 내부의 중요 정보가 탈취될 수 있다.
-
Reflected XSS (반사형) - Non-Persistent
- URL 파라미터(특히 GET 방식)에 스크립트를 넣어 서버에 저장하지 않고 그 즉시 스크립트를 만드는 방식
- 사용자가 악의적으로 조작된 링크를 누르거나, 폼을 제출하거나, 사이트에 방문을 하는 경우에 주입된 코드가 희생 대상이 되는 웹사이트로 퍼진다. 웹 서버는 주입받은 코드를 정상적인 요청으로 인식하여, 브라우저에 그에 대한 응답을 한다. 에러 메세지를 띄우거나, 특정 검색결과를 보여줄 수도 있고, 어떤 데이터를 포함할 수도 있다. 브라우저는 서버가 악의적으로 영향받았다는 사실을 인지하지 못하므로, 정상 응답으로 파악하여 코드를 실행한다. 만약 input 창에 댓글을 입력하면 화면에 보여주는 기능이 있다고 할때, 악의적으로
<script>alert('this website is hacked!')</script>
과 같이 입력하여 개발자의 의도를 무시하고 새로운 동작을 입힐 수 있다.
일반적인 시나리오
악성스크립트를 담은 게시물을 등록 > 사람들이 그 게시물을 확인 > 열람자의 쿠기 값을 가로챔. 가로챈 쿠기 값을 웹 프록시 툴을 이용하여 재 전송 > 열람자의 정보로 로그인
- 만약에 열람자가 관리자라면, 관리자로 로그인이 될 것
어떻게 막을 것인가?
- 필터 라이브러리를 사용해서 XSS 취약점을 막을 수 있다.
- 대표적으로 OWASP Antisamy, NAVER Lucy XSS Filter, ESAPI 등이 있다.