본문 바로가기
IT/Knowledge

CSRF란?(23.05.16)

by 성준하이 2023. 5. 15.
반응형
CSRF란?
사이트 간 요청 위조(또는 크로스 사이트 요청 위조, 영어: Cross-site request forgery, CSRF, XSRF)는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.
유명 경매 사이트인 옥션에서 발생한 개인정보 유출 사건에서 사용된 공격 방식 중 하나다.
사이트 간 스크립팅(XSS)을 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면, 사이트간 요청 위조는 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것이다. 일단 사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면, 공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단하게 되어 공격에 노출된다.

위키백과에 나와있는 글이다.

https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9D%B4%ED%8A%B8_%EA%B0%84_%EC%9A%94%EC%B2%AD_%EC%9C%84%EC%A1%B0

 

사이트 간 요청 위조 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. -->

ko.wikipedia.org

 

간단하게 다시 말하면 다음과 같다.

  •  웹 사이트 취약점 공격을 방지를 위해 사용하는 기술이다. 장고가 CSRF 토큰 값을 세션을 통해 발행하고 웹 페이지에서는 폼 전송시에 해당 토큰을 함께 전송하여 실제 웹 페이지에서 작성된 데이터가 전달되는지를 검증하는 기술이다.
공격방법

이러한 공격을 하기 위하여 해커는 우선 공격을 할 사이트를 먼저 분석한다.
예를 들어, 나무위키의 경우에 토론은 namu.wiki/topic/ 이라고 시작하며 뒤에 숫자가 붙는 형식인데 이 뒤의 숫자에 패턴이 있다.
(실제론 토론이 개설된 순서대로 붙는 일련번호이다.)
 
그러면 이 패턴을 이용하여 일반적인 방법으로 접근할 수 없는 페이지를 오픈 한다든지, 개발에 사용되고 실제로 사용하지 않는 샘플 페이지를 찾아낸다든지 이러한 방법이 가능하다.
그것이 아니라 웹페이지가 독자적 개발이 아닌 외부에서 이미 개발된 웹 어플리케이션을 사서 조금 수정한 것이라면 공격자는 경우에 따라서 해당 웹 어플리케이션을 구매하여 개인 서버에 설치를 한다.
그 다음에 공격 가능 패턴을 분석하고 주로 공격자들이 찾는 것은 사용자 패스워드 변경페이지나 타 시스템과 로그인 연동 주소 패턴같은 인증 관련된 취약점을 찾는다.
다음에 여기서 나온 취약점을 이용하여 공개된 게시판이나 메일을 이용하여 사용자가 해당 링크를 열게 만들면 공격이 완료된다.

 

예시

예를 들어, A가 대화방에서 은행 계좌를 탐색하고 있다고 할때 대화방에는A도 bank.com에 로그인되어 있음을 알게 된 공격자 B 가 있다.
B는 A에게 재미있는 이미지를위한 링크를 클릭하도록 유혹한다. "IMG"태그에는 bank.com의 양식 입력에 대한 값이 포함되어 있으며 이는 A의 계정에서 B의 계정으로 특정 금액을 효과적으로 이전한다. 자금이 이체되기 전에 bank.com에 A에 대한 2 차 인증이없는 경우 공격이 성공하게된다.

 

방어방법

1. Referrer 검증

Referrer 검증은 Backend에서 request의 referrer를 확인하여 도메인이 일치하는지 검증하는 방법이다.

일반적으로 referrer 검증만으로 대부분의 CSRF공격을 방어할 수 있다.

2. Security Token 사용 (A.K.A CSRF Token)

사용자의 세션에 임의의 난수값을 저장하고 사용자의 요청마다 해당 난수값을 포함시켜 전송시킨다.

Backend에서 요청을 받을때마다 세션에 저장된 토큰값과 요청 파라미터에 전달되는 토큰값이 일치하는지 검증하는 방법이다.

반응형

'IT > Knowledge' 카테고리의 다른 글

maven 강제 업데이트  (40) 2023.06.17
Snapshot 개념 (Database / lib version)  (39) 2023.06.11
baeldung  (19) 2023.04.19
Thread starvation or clock leap detected  (16) 2023.04.16
트레이드오프 (trade-off)  (29) 2023.03.29

댓글