Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- vuex
- HTTP
- di
- vue-cli
- DB
- 라이프 사이클
- Spring
- 캐시
- VUE
- Excel
- Vue.js
- javascript
- Java
- thymeleaf
- Stateless
- Singleton
- HTTP 메서드
- JPA
- Setter
- 로그인
- BEAN
- 의존성 주입
- Security
- Repository
- Kotlin
- js
- 싱글톤
- dependency injection
- cache
- 프로토타입
Archives
- Today
- Total
jhhan의 블로그
CSRF 본문
CSRF(XSRF)에 대해 알아보겠습니다.
Cross-Site Request Forgery ; 사이트 간 요청 위조
특징
- 웹사이트 취약점 공격의 하나로
- 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격입니다.
- 희생자의 권한으로 희생자가 모르게 공격자의 의도대로 요청을 수행하도록 합니다.
- 희생자의 권한에 따라 위험성이 달라집니다.
- http통신의 stateless특성을 이용한 것으로, 쿠키정보만 이용해서 사용자의 의도하지 않은 공격이 가능합니다.
- 예전 옥션에서 발생한 개인정보유출사건에 사용된 공격방식이기도 합니다.
ex)어떤 웹사이트에 로그인한 상태
"https://xxxx.com/logout" 같은 url을 클릭 시 실제 사용자는 의도하지 않은 로그아웃을 요청합니다.
예시로는 로그아웃을 들었지만, 다른 호출을 할 수도 있기 때문에 보안상 위험합니다.
공격과정 예시(또 다른 예시) - 위키피디아의 예시를 참고했습니다.
- 이용자가 웹사이트에 로그인하여 정상적인 쿠키를 발급받습니다.
- 공격자는 공격용 링크를 이용자에게 이메일, 게시판 같은 경로로 전달합니다.
- 공격용 html 페이지로 이미지 태그를 갖습니다.
- <img src="https://travel.service.com/travel_update?.src=Korea&dst=Hell">
- 해당 링크는 출발지와 도착지를 등록하는 링크이고, 그 중에서 도착지를 변경하는 링크입니다.
- 이용자가 공격용 페이지를 열면, 브라우저는 이미지 파일을 받아오기 위해 URL을 엽니다.
- 그 후 출발지와 도착지가 등록되면서 공격이 완료됩니다.
- 해당 서비스 페이지는 등록과정에 대해 쿠키를 통한 본인확인만 하므로 공격자가 정상적으로 이용자의 수정을 할 수 있습니다.
방어방법
1. Referrer 검증
- Request Header에 있는 요청을 한 페이지의 정보가 담긴 referrer 속성을 검증하여 차단하는 방식입니다.
- 일반적으로 이 방법을 통해 대부분의 CSRF 공격을 방어할 수 있습니다.(지금은 어떤지는 모르겠네요..)
- 같은 도메인 상에서 요청이 들어오지 않으면 차단합니다.
2. Security Token 사용
- csrf token이라고도 한다.
- 사용자 세션에 임의의 난수값을 저장하고
- 사용자의 요청마다 해당 난수값을 포함시켜 전송합니다.
- BackEnd에서는 요청을 받을 때마다 세션에 저장된 토큰값과 요청 파라미터에 전달되는 토큰값이 일치하는지 검증하는 방법입니다.
3. Double Submit Cookie 검증
- Security Token 검증의 한 종류로
- 세션을 사용할 수 없는 환경에서 사용이 가능한 방법입니다.
- Javascript에서는 타 도메인의 쿠키값 확인/수정 을 못한다는 것을 이용한 방어기법입니다.
- 스크립트 단에서 요청 -> 난수 값 생성해서 쿠키에 저장, 동일한 난수 값을 요청 파라미터에 저장하여 서버에 전송을 하면
- 서버단에서는 쿠키의 토큰과 파라미터의 토큰값이 일치하는지만 검사합니다.
- 서버에 따로 쿠키값을 저장하지 않기 때문에 세션을 이용한 검증보다 개발공수가 적은 편입니다.
참조 & 참고
https://sj602.github.io/2018/07/14/what-is-CSRF/
'보안관련' 카테고리의 다른 글
Spring Security(2) (0) | 2020.04.23 |
---|---|
Spring - Security (0) | 2020.02.28 |