브라우저는 항상 보안위협을 받고 있으며, 브라우저가 위협받는 근본적인 이유는 자바스크립트를 구동하기 때문!
ㄴ자바스크립트로 할 수 있는 것들이 많아서
클라이언트가 서버를 신뢰하기 때문에 발생하는 이슈
웹 애플리케이션에서 일어나는 취약점으로 관리자가 아닌 권한이 없는 사용자가 웹 사이트에 스크립트를 삽입하는 공격 기법이다.
왼쪽의 사진은 XSS공격중 Persistent(or Stored)XSS Attack이고, 사용자의 세션을 탈취하는 프로세스를 나타내고 있다.
해거카 XSS 공격에 취약한 웹사이트에 악의적인 스크립트를 삽입하고, 그 스크립트가 있는 게시글을 열람한 사용자는 악성스크립트로 인해 본인의 쿠키가 해커에게 전송되게 된다.
세션 ID가 포함된 쿠키를 탈취한 해커는 탈취한 사용자의 계정으로 로그인하게 된다.
입출력 값 검증
사용자가 입력한 값에 대한 검증과 사용자가 입력한 값을 그대로 출력할 때 검증이 필요하다.
XSS Cheat Sheet에 대한 필터 목록을 만들어 모든 Cheat Sheet에 대한 대응이 가능하도록 해야한다.
XSS에 대한 필터링을 적용한 뒤 직접 테스트하여 스크립트가 실행되는지 모의해킹 해보는 것도 좋은 방법
XSS 방어 라이브러리, 브라우저 확장앱 사용
XSS를 막아주는 Anti XSS 라이브러리를 여러 회사에서 제공하는데 이 라이브러리를 사용하면 손쉽게 XSS를 방어할 수 있다.
XSS 라이브러리를 사용하는 것은 서버 단에서 개발자가 추가하는 것이고, 사용자들이 각자 본인의 브라우저에서 악의적인 스크립트가 실행되지 않도록 방어하는 것이 중요하다.
방문하는 모든 사이트가 안전하다는 보장이 없기 때문에 브라우저 확장 앱 중 Anti XSS를 해주는 애플리케이션을 설치하고 방어해야한다.
웹 방화벽 사용
웹 방화벽은 웹 공격에 특화되어있기 때문에 XSS 공격을 방어하기 위함만이 아니라 각종 Injection 공격을 효과적으로 방어할 수 있다.
반대로 서버가 클라이언트를 신뢰해서 발생하는 이슈
서버는 인증정보를 가지고 오면 믿는다.
사용자는 인증 정보를 가진 채로 해커의 링크를 누르면, 해커는 인증정보를 가로채서 서버에 요청을 보내버린다.
공격자가 '사용자의 동의없이 / 사용자가 인지하지 못하는 상황에서' 브라우저로 하여금 서버에 어떤 요청을 보내도록한다. XSS 공격으로 탈취한 정보를 이 때 사용할 수 있다.
Referrer 검증
Referrer 검증은 Backend에서 request의 referrer를 확인하여 도메인이 일치하는지 검증하는 방법이다.
일반적으로 referre 검증만으로 대부분의 CSRF 공격을 방어할 수 있다.
Security Token 사용
사용자의 세션에 임의의 난수값을 저장하고 사용자의 요청마다 해당 난수값을 포함시켜 전송시킨다.
Backend에서 요청을 받을때마다 세션에 저장된 토큰값고 요청 파라미터에 전달되는 토큰값이 일치하는지 검증하는 방법이다.