token, xss, csrf

cracKey·2022년 8월 17일
0

Token

토큰 기반 인증이란 사용자가 자신의 아이덴티티를 확인하고 고유한 액세스 토큰을 받을 수 있는 프로토콜을 말합니다. 사용자는 토큰 유효 기간 동안 동일한 웹페이지나 앱, 혹은 그 밖에 해당 토큰으로 보호를 받는 리소스로 돌아갈 때마다 자격 증명을 다시 입력할 필요 없이 토큰이 발급된 웹사이트나 앱에 액세스할 수 있습니다. 인증 토큰은 도장이 찍힌 티켓과 같습니다. 토큰이 유효하다면 사용자는 계속해서 액세스할 수 있습니다. 사용자가 로그아웃하거나 앱을 종료하면 토큰도 무효화됩니다.

토큰의 특징

무상태(stateless)이며 확장성(scalability)

  • 토큰은 클라이언트 사이드에 저장하기 때문에 완전히 stateless 하며, 서버를 확장하기에 매우 적합한 환경을 제공합니다. 만약에 세션을 서버 측에 저장하고 있고, 어떤 유저가 로그인했을 땐, 그 유저는 처음 로그인했었던 그 서버에만 요청을 보내도록 설정을 해야 합니다.

보안성

  • 클라이언트가 서버에 요청을 보낼 때, 더 이상 쿠키를 전달하지 않음으로 쿠키를 사용함으로 인해 발생하는 취약점이 사라집니다. 하지만, 토큰을 사용하는 환경에서도 취약점이 존재할 수 있으니 언제나 취약점에 대비해야 합니다

크로스 사이트 스크립팅(Cross Site Scripting, XSS)

웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로, 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다. 공격에 성공하면 사이트에 접속한 사용자는 삽입된 코드를 실행하게 되며, 보통 의도치 않은 행동을 수행시키거나 쿠키나 세션 토큰 등의 민감한 정보를 탈취한다.

  • 공격 방법에 따라 Stored XSS와 Reflected XSS로 나뉜다.
  • 자바스크립트를 사용하여 공격하는 경우가 많다.
  • 공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많다.
  • 여러 사용자가 접근 가능한 게시판 등에 코드를 삽입하는 경우도 많으며, 경우에따라서는 메일과 같은 매체를 통해서도 전파된다.

Stored XSS

사이트 게시판이나 댓글, 닉네임 등 스크립트가 서버에 저장되어 실행되는 방식

Reflected XSS (반사형)

보통 URL 파라미터(특히 GET 방식)에 스크립트를 넣어 서버에 저장하지 않고 그 즉시 스크립트를 만드는 방식

보안법

XSS는 데이터를 입력할 때와 출력할 때, 모두 필터링하고, 클라이언트에도 막을 수 있을만한 수단을 구성해놓는 것이 좋다.

입출력 값 검증

사용자가 입력한 값에 대한 검증과 사용자가 입력한 값을 그대로 출력할 때 검증이 필요 합니다. XSS Cheat Sheet 에 대한 필터 목록을 만들어 모든 Cheat Sheet에 대한 대응이 가능하도록 하여야 합니다. XSS에 대한 필터링을 적용한 뒤 직접 테스트 하여 스크립트가 실행되는지 모의해킹 해보는 것도 좋은 방법입니다.

XSS 방어 라이브러리 , 브라우저 확장앱 사용

XSS를 막아주는 Anti XSS 라이브러리를 여러 회사에서 제공하는데 이 라이브러리를 사용하면 손쉽게 XSS를 방어할 수 있습니다. XSS 라이브러리를 사용하는 것은 서버 단에서 개발자가 추가하는 것이고, 사용자들이 각자 본인의 브라우저에서 악의적인 스크립트가 실행되지 않도록 방어하는 것이 중요합니다. 방문하는 모든 사이트가 안전하다는 보장이 없기 때문에 브라우저 확장 앱 중 Anti XSS 를 해주는 애플리케이션을 설치하고 방어하여야 합니다.

웹 방화벽 사용

웹 방화벽은 웹 공격에 특화되어있기 때문에 XSS 공격을 방어하기 위함만이 아니라 각종 Injection 공격을 효과적으로 방어할 수 있습니다.

CSRF 공격(Cross Site Request Forgery)

사이트 간 요청 위조.
웹 애플리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해서 특정 웹페이지를 보안에 취약하게 한다거나 수정, 삭제 등의 작업을 하게 만드는 공격 방법이다.

  • 패턴을 이용하여 일반적인 방법으로 접근할 수 없는 페이지를 오픈한다든지, 개발에 사용되고 실제로 사용하지 않는 샘플 페이지를 찾아낸다든지 등의 행위가 가능하다.

  • 웹페이지가 독자적 개발이 아닌 외부에서 이미 개발된 웹 애플리케이션을 사서 조금 수정한 것이라면 공격자는 경우에 따라서 해당 웹 애플리케이션의 소스 코드를 분석하여 공격 가능 패턴을 찾아낸다. 주로 공격자들이 찾는 것은 사용자 패스워드 변경 페이지나 타 시스템과 로그인 연동 주소 패턴 같은 인증 관련된 취약점을 찾는다.

보안법

방어 방법 중 가장 기초적인 방법은 Referer 체크를 하는 방법이 있다. Referer는 HTTP 헤더에 있는 정보로 해당 요청이 요청된 페이지의 정보를 가지고 있는데 해당 정보는 Paros나 Zap, fiddler같은 프로그램으로 조작이 가능하기 때문에 권장되지 않는다.


Ref.

https://velopert.com/2350

https://noirstar.tistory.com/266

profile
키보드가 부서지게 / 개발공부노트

0개의 댓글