CSRF

2020. 4. 1. 15:02보안\암호화

반응형

CSRF란

CSRF의 개념

CSRF(Cross Site Reuqest Forgery)란 웹 사이트의 취약점을 이용하여 사용자가 의도하지 않는 요청을 송신하도록 하는 공격을 의미합니다. 이는 http프로토콜의 stateless 특성으로 인해 특정 일련의 요청들에 대한 상관관계를 특정할 수 없다는 취약점을 이용해 공격합니다. 세션 유지 등에 사용되는 정보의 조건만 만족한다면 마치 피해자가 요청을 보낸 것처럼 송신되기 때문에 가능합니다. 이 공격 수법은 결과적으로 피해자가 의도한 요청과 동일한 과정으로 진행되므로 공격자에 대한 추적이 어려울 수 있으며 피해자에게 인가된 범위안에서만 공격이 이루어진다는 특징이 있습니다.

공격 방법

CSRF 공격 방법에는 정형화된 수법이 있다기 보다는 웹에 요청을 보낼 수 있는 모든 방법이 공격 방법이 된다고 할 수 있습니다. Javascript와 ajax를 이용한 방법, form 방법, img 태그를 이용한 방법 등 요청을 보낼 수 있는 방법이라면 그 어떤 것도 가능합니다.

방어 방법

Referer 검증
서버에서 Request Header의 Referer를 확인하여 Domain이 일치하는지 검증하는 방법입니다. 이를 이용해 대부분의 CSRF 공격 방어가 가능합니다. 하지만 XSS 취약점이 있는 경우 방어가 불가능해질 수 있습니다.

CSRF Token
사용자의 세션에 임의의 난수 값을 저장하고 사용자의 요청마다 해당 난수 값을 포함시켜 전송합니다. 이후 서버에서 요청을 받을 때마다 세션에 저장된 토큰 값과 요청 파라미터에서 전달되는 토큰 값이 같은지 검증하는 방법입니다.

Double Submit Cookie 검증
웹 브라우저의 Same Origin 정책으로 인해 JavaScript에서 타 도메인의 쿠키 값을 확인, 수정하지 못한다는 것을 이용한 방어 기법입니다. Script 단에서 요청 시 난수를 생성하여 쿠키에 저장하고 동일한 난수 값을 요청 파라미터에 저장하여 서버에 전송합니다. 그리고 서버에서 쿠키의 토큰 값과 파라미터의 토큰 값의 일치 여부만 검사하면 됩니다. 서버에 토큰 값을 저장할 필요가 없어서 세션 검증보다 가벼운 방법입니다.

반응형

'보안\암호화' 카테고리의 다른 글

Kerberos  (0) 2021.04.21
접근 통제 모델  (0) 2021.03.05
HMAC  (0) 2021.01.14
암호화 알고리즘  (0) 2020.06.04
XSS  (0) 2020.04.07