CSRF

강혜인·2025년 5월 29일

WEB_Hack

목록 보기
13/18

CSRF란?

Cross-Site Request Forgery의 약자로, 사이트 간 요청 위조를 의미한다.

인증된 사용자가 자신의 의지와는 무관하게 웹 애플리케이션에 공격자가 의도한 특정 요청을 보내도록 유도하는 것으로,

제품 구입, 자금 이체, 비밀번호 변경, 기록 삭제 등의 요청을 악의적으로 보내는 것을 말한다.

CSRF 공격이 가능한 이유는 웹 브라우저가 사용자가 인증한 상태를 유지하기 때문이다.

공격자는 사용자가 인증된 상태를 악용해 공격자가 의도한 행위를 하도록 유도한다. 이러한 공격자가 유도한 요청들은 사용자가 직접 전송한 것이 아니기 때문에 사용자는 이를 인지하지 못할 수 있다.

초등학생 수준으로 설명을 하자면,

CSRF는 공격자가 사용자 대신 몰래 웹 사이트에 요청하는 공격으로, 마치 사용자가 한 것처럼 속여서 무언가를 하게 만든다.

작동 원리는,

사용자가 게임 사이트를 이용중이라고 가정해보자.

  1. 사용자는 평소처럼 게임 사이트에 로그인해 있었다. (브라우저에 쿠키가 저장되겠지?)
  2. 공격자는 사용자가 자기 사이트로 들어오게 하기 위해, 링크나 광고를 보여준다. (ex: 귀여운 고양이 사진을 띄우고, 귀여운 고양이 보기! 를 클릭하도록 유도)
  3. 사용자는 고양이를 보고싶어 의심 없이 클릭한다. (공격자가 만든 장난 웹 사이트에 접속된다.)
  4. 공격자가 만든 사이트에는 게임 현질을 유도하는 코드가 숨겨져 있어 해당 버튼을 클릭하는 순간 게임 사이트에 요청이 날아간다.
  5. 게임 서버는 “어? 로그인이 되어 있는 걸 보니 사용자가 보낸게 맞구나?” 라고 착각하고 현질 요청을 수락해 현질한다.

CSRF와 XSS?

XSS가 사용자가 특정 사이트를 신뢰하기 때문에 발생하는 취약점이라면, CSRF는 특정 사이트가 사용자를 신뢰하기 때문에 발생하는 취약점이다.

쉽게 설명하면, 공격자가 웹 사이트 몰래 장난 코드를 숨겨놓고, 다른 사람이 그걸 보게 만들면 코드가 실행되는 공격이다. 게시판에 장난 버튼을 숨겨놓은 거랑 비슷하다.

XSS는 클라이언트의 브라우저에서 발생하고, CSRF는 서버에서 발생한다.

XSS는 사용자의 쿠키를 탈취할 수 있고, CSRF는 서버로부터 권한을 탈취할 수 있는 문제이다.

공격 예시를 간단히 예로 들자면,

XSS

  1. 제 3의 침입자가 사이트의 취약점을 찾는다.
  2. 취약점을 찾아 세션 쿠키를 탈취하는 스크립트를 사이트에 삽입한다.
  3. 사용자가 웹 사이트에 접근할 때마다 해당 스크립트가 작동된다.
  4. 작동된 스크립트를 통해 사용자의 세션 쿠키를 탈취한다.

<좀 더 쉬운 예시>

  1. 공격자가 악성 JS 코드를 웹 페이지에 삽입
  2. 다른 사용자가 해당 페이지를 열면, 브라우저가 스크립트를 실행
  3. 쿠키 탈취, 세션 탈취, DOM 조작, 키로깅, 피싱 등 다양한 공격 가능

CSRF

  1. 침입자는 서버로 넘어가는 자금 전송에 대한 요청을 조작하려고 한다고 가정해두자.
  2. 침입자는 하이퍼링크에 자금 전송 요청에 대한 스크립트를 삽입하고, 사이트에 로그인 할 사람들에게 전송한다.
  3. 사용자가 링크를 누르면, 의도치 않게 서버로 자금 전송 요청을 보내게 된다.
  4. 서버는 로그인 된 사용자의 요청이기 때문에 정상적으로 인식하고 전송을 실행해 침입자에게 돈이 송금된다.

<좀 더 쉬운 예시>

  1. 사용자가 A 사이트에 로그인해 세션이 활성화된 상태
  2. 사용자가 다른 탭에서 공격자가 만든 악성 사이트(B 사이트)를 방문
  3. B 사이트는 , ,
  4. 요청은 피해자의 쿠키, 세션, 인증 토큰을 포함하고 있으므로 정상 사용자처럼 처리됨
  5. A 사이트는 요청이 사용자로부터 온 것으로 착각하고 처리

여기서 CSRF와 XSS를 명확히 구분하는 방법은, CSRF에는 특정 발생 조건이 존재한다.

💡
  1. 사용자가 사이트에 로그인 된 상태여야 한다.
  2. 사용자는 조작된 페이지에 방문(접속)해야 한다.

XSS와 CSRF 차이

구분CSRFXSS
공격 대상서버 (사용자의 인증을 이용해 요청)사용자 브라우저 (스크립트를 실행 시킴)
공격 목적사용자의 세션으로 서버 상태 변경사용자 정보 탈취, UI 조작 등
공격 방식요청을 위조해 서버를 속임악성 스크립트를 삽입하여 사용자 브라우저에서 실행
전제 조건사용자가 로그인 상태여야 함입력 검증/출력 인코딩이 미흡해야 함
대표 공격의 예자동 송금, 비밀번호 변경쿠키 탈취, 키로깅, 파싱
응답 조작 여부불가능 (Same-Origin Policy로 응답 열람 불가)가능 (브라우저에서 직접 실행)
방어 방법CSRF 토큰, Referer 체크,
SameSite 쿠키 설정입력 검증, 출력 인코딩, CSP 설정

0개의 댓글