본문 바로가기

Book

웹 개발자를 위한 웹 보안: 8장 요약 - 사이트 간 요청 위조 공격

728x90

 

 

공격자는 사용자를 속여 원치 않거나 예상치 못한 작업을 수행하도록 유도하는 악의적인 링크를 클릭하도록 할 수 있다. 이를 사이트 간 요청 위조 (CSRF 또는 XSRF)라고 한다. 공격자는 CSRF를 사용해 연락처 목록을 도용하고, 원클릭 구매를 트리거하거나 라우터 구성을 변경한다. 공격자는 일반적으로 GET 요청을 구현하는 웹사이트를 공격해 CSRF를 시작한다. GET 요청은 공격 대상자가 링크를 클릭할 때 트리거되므로 대상 사이트에 잘못된 링크를 조작할 수 있기 때문이다.

 

CSRF 공격에서 사용자를 보호하려면 GET 요청이 서버 상태를 변경하지 않도록 해야한다. REST 원칙에 따라 GET 요청을 보호해 잘못된 URL을 클릭해도 서버 상태가 변경되는 것을 막는다. 그러나 서드 파티 사이트에 호스팅된 악의적인 양식이나 스크립트를 제출하도록 해 다른 HTTP 메서드로 요청을 하도록 속이는 경우가 있다. 따라서 중요한 작업을 자신의 로그인 양식과 자바스크립트에서만 트리거되도록 보장하기 위해서는 안티 CSRF 공격 쿠키를 사용해 다른 유형의 요청을 보호한다. 웹 서버가 명명된 쿠키 매개 변수에 쓰는 임의 문자열 토큰인 안티 CSRF 공격 쿠키를 이용해 HTTP 요청이 동일한 웹 도메인에 호스트된 페이지에서 발생하는지 비교 검증한다. 브라우저 보안 모델은 웹 서버에서만 쿠키 값이 설정될 수 있도록 하기 때문에 이러한 과정이 가능하다. 또한 SameSite 속성을 지정하여 외부 도메인에의 요청에서 생성된 쿠키와 사용자 사이트의 요청에서 생성된 쿠키를 분리할 수 있다. 그러나 다른 웹사이트에서 생성된 사이트에 대한 요청의 쿠키가 제거되므로, 사이트에 대한 모든 인바운드 링크에서 사용자가 다시 로그인해야 하는 불편함이 있다. 이런 과정을 보완하기 위해, SameSite 속성 Lax를 이용해 Get 요청만 쿠키를 보낼 수 있도록 허용할 수 있다.