웹사이트 관리자가 아닌 사람이 웹사이트에 악성 스크립트를 삽입할 수 있는 취약점을 이용한 공격기법이다. 사용자로부터 받은 입력을 제대로 검증하지 않을 때 나타나며 사용자의 정보를 탈취하거나 비정상적인 기능을 실행할 수 있다.
일반적으로 자바스크립트를 통해 무언가를 조작할 수 있다면, 그 무언가는 XSS 공격에 대해 취약점이 있다고 말할 수 있다.
XSS를 사용해서 사용자의 쿠키 정보 및 세션 ID를 획득할 수 있으며 시스템 관리자 권한을 획득할 수도 있다. 대응방안은 아래와 같다.
<script>
태그를 사용하니 <
를 <
로 바꾼다거나 하는 방법으로 무효화시킬 수 있다.사용자가 의도치 않게 공격자가 의도한 행동을 하여 취약점을 노출시키거자 수정/삭제/생성 등을 하게 만드는 공격 기법이다. 이메일을 열어보거나 악성 사이트에 접근했을 때 특정한 요청을 하는 CSRF 스크립트를 실행하는 방식이다.
www.mybank.com
에 접속해 있는 상태이다.http://www.mybank.com/transfer?to=<계좌번호>&amount=<액수>
형식으로 보낸다고 하자.www.cute-cat.org
사이트에 접속한다. (악성 사이트이다)www.mybank.com
에 요청이 가게 되서 돈을 보내게 된다.또다른 예시는 쿠키와 관련된 예시이다. 쿠키는 다른 브라우저 저장소 ( Web Storage )와 다르게 XSRF 공격에 취약하다는 단점이 있다. 그 이유는 무엇일까? 적절한 예시인지는 모르겠지만 일단 보자.
해커는 사용자가 a.com 이라는 사이트의 유저인 것을 알고있다. 해커는 이메일을 보내서 클릭시 아래의 코드가 실행되게 하였다.
fetch('http://a.com/api/changeMyName/idot')
a.com에 요청을 보내기 위해서는 쿠키가 필요한데 사용자는 이미 a.com에 접속해서 쿠키가 유효하고 컴퓨터에 저장되어있다. 따라서 쿠키는 요청의 헤더에 담아 보내질 것이고 API는 해당 쿠키가 올바르다고 생각하여 이름을 바꾸는 작업을 완료한다…
이렇게 사용자가 의도하지 않은 요청을 실행함으로 피해를 줄 수 있는 기법이다. 대응방안은 아래와 같다
referer
검증 : 요청 헤더에 있는 referer
속성을 검증하여 신뢰할 수 있는 도메인에서 들어오는 요청인지 검증한다.