본문 바로가기
보안

[CSRF] CSRF(Cross-Site Request Forgery)란?

by 승븐지 2024. 9. 9.
반응형
반응형

CSRF (Cross-Site Request Forgery)는 웹 보안 취약점 중 하나로, 웹 애플리케이션에서 사용자 권한을 악용하는 공격 기법이다. 쉽게 설명하자면, CSRF는 공격자가 사용자를 속여서 원치 않는 작업을 수행하게 만드는 공격이다.


CSRF의 개념

웹사이트에 로그인한 사용자가 있다고 가정해 봅시다. 그 사용자는 로그인한 상태에서 은행 계좌나 이메일처럼 중요한 웹사이트를 이용 중이며, 공격자는 이 사용자의 브라우저를 통해서 악의적인 요청을 해당 웹사이트에 보내는 방법으로 사용자의 권한을 몰래 이용하는데, 이 공격이 바로 CSRF이다.

 

출처 https://portswigger.net/web-security/csrf

 

 

CSRF의 작동 방식

  1. 사용자가 로그인함: 사용자가 로그인하면 서버는 세션을 유지하기 위해 쿠키(작은 정보 파일)를 사용자의 브라우저에 저장합니다. 이 쿠키를 통해 서버는 사용자를 인증한다.
  2. 악의적인 사이트 방문: 공격자는 악성 코드를 포함한 웹페이지나 이메일 링크를 만들며, 이 링크는 사용자가 이미 로그인한 웹사이트에 요청을 보내는 URL을 포함한다. 예를 들어, 은행 웹사이트에서 돈을 이체하는 요청일 수 있다.
  3. 자동 요청 발생: 사용자가 악성 웹페이지를 방문하면, 브라우저는 해당 사이트의 스크립트나 이미지를 자동으로 로드하려고 하며, 이 과정에서 브라우저는 사용자가 로그인한 상태이기 때문에 쿠키를 자동으로 포함하여 요청을 보낸다.
  4. 원치 않는 작업 발생: 서버는 사용자가 원치 않는 작업(예: 돈을 다른 계좌로 이체)을 수행하도록 처리하며, 서버는 쿠키를 통해 사용자가 인증된 것으로 간주하므로, 요청이 정당한 사용자가 보낸 것인지 확인하지 못한다.

예시 시나리오

  •    상황: 사용자는 은행 웹사이트에 로그인하여 자신의 계좌를 관리하고 있다.
  •    공격: 공격자는 다른 웹사이트에 사용자가 특정 계좌로 100만원을 송금하는 요청을 하는 링크를 만든다. 이 링크를 클릭하면 자동으로 은행 서버로 해당 요청이 전송되고, 서버는 사용자가 이미 로그인했으므로 송금을 처리한다.
  •    결과: 사용자는 아무런 동의 없이 돈을 이체하게 된다.

쿠키란 ?

2022.12.11 - [IT] - [HTTP의 특징과 쿠키 및 세션의 활용] 안정적 인증을 위한 필수 지식

 

[HTTP의 특징과 쿠키 및 세션의 활용] 안정적 인증을 위한 필수 지식

1.HTTP의 특징과 쿠키와 세션을 사용하는 이유?HTTP 프로토콜의 특징이자 약점을 보완하기 위해서 쿠키또는 세션을 사용합니다. HTTP 프로토콜 환경은 Connectionless(비연결성) , Stateless(무상태) 한 특

ycds.tistory.com

 

CSRF 예방 방법

CSRF 공격을 방지하기 위해서는 서버와 클라이언트 모두에서 보안 조치를 취해야 한다.

  1. CSRF 토큰 사용: 서버는 사용자가 폼을 제출할 때마다 난수 값을 포함한 CSRF 토큰을 발급한다. 이 토큰은 서버에서 생성되며, 클라이언트에서 다시 서버로 요청을 보낼 때 이 토큰을 함께 전송해야 요청이 처리되며, 공격자는 이 토큰을 알 수 없기 때문에 CSRF 공격이 차단된다.
  2. 쿠키 속성 설정: SameSite 속성을 사용하면 쿠키가 동일한 사이트에서만 전송되도록 제한할 수 있으며, 이를 통해 외부 사이트에서 쿠키를 전송하지 않도록 할 수 있다.
  3. CAPTCHA 사용: 폼 제출 시 CAPTCHA(자동화된 공격을 방지하는 그림 문자인증)를 추가하여 사용자가 직접 요청을 보내는 것임을 확인할 수 있다.

CAPTCHA  이미지

 

CSRF는 공격자가 사용자의 권한을 몰래 사용해 특정 웹사이트에서 사용자가 원하지 않는 행동을 수행하게 만드는 보안 취약점이다. 이를 막기 위해서는 CSRF 토큰을 사용하거나 브라우저와 서버 측에서 추가적인 보안 조치를 적용해야 한다

이해하기 쉬운 비유로 생각해본다면, CSRF는 사용자가 자신의 컴퓨터로 은행 웹사이트에서 작업을 하고 있을 때, 공격자가 몰래 그 컴퓨터에서 송금을 진행하는 것과 같다.

 

 

주요 CSRF 예방 툴 및 라이브러리

  1. OWASP CSRFGuard
    •     설명: OWASP에서 제공하는 오픈소스 프로젝트로, CSRF 공격을 방지하기 위한 방어 기법을 제공하며,  주로 자 바 기반 웹 애플리케이션에서 사용되며, CSRF 토큰을 생성하고 관리하는 기능을 포함하고 있다.
    •     특징: 자동으로 CSRF 토큰을 페이지에 추가하고 검증한다.
    •     사용법: 웹 애플리케이션 서버에 통합하여 CSRF 보호 기능을 구현한다.
  2. Django (CSRF Middleware)
    •     설명: Django는 파이썬 기반의 웹 프레임워크로, 내장된 CSRF 보호 미들웨어를 제공한다. 모든 POST 요청에 대 해 CSRF 토큰을 검증한다.
    •     특징: CSRF 공격을 기본적으로 방어하며, 각 폼 제출 시 CSRF 토큰을 확인함.
    •     사용법: Django에서 제공하는 기본 CSRF 미들웨어를 활성화하면 자동으로 보호됨.
  3. Ruby on Rails (CSRF Protection)
    •     설명: Ruby on Rails는 CSRF 공격을 방지하기 위한 내장된 보호 메커니즘을 제공한다. 모든 폼 제출 시 CSRF 토큰을 포함하고, 이를 검증한다.
    •     특징: Rails의 기본 설정에서 CSRF 보호 기능이 활성화되어 있으며, 모든 POST, PUT, DELETE 요청에 대해 CSRF 검증이 이루어진다.
    •     사용법: 기본적으로 활성화되어 있지만, 필요에 따라 설정을 조정할 수 있다.
  4. Spring Security (CSRF Protection)
    •     설명: Spring Security는 자바 기반 애플리케이션에서 CSRF 공격을 방어하는 보안 프레임워크이며, 주로 많이 사용하는 프레임워크이다.  CSRF 토큰을 자동으로 생성하고 검증하는 기능이 포함되어 있다.
    •     특징: Spring Security는 웹 애플리케이션에서 보안 기능을 강화하며, CSRF 공격을 방지하는 데 효과적이다.
    •     사용법: Spring Security 설정에서 CSRF 보호를 활성화하면 된다.
  5. Express.js (CSRF Library)
    •     설명: Express.js와 같은 Node.js 기반 프레임워크에서는 csurf와 같은 미들웨어를 사용하여 CSRF 보호 기능을 추가할 수 있다.
    •     특징: Express 애플리케이션에서 CSRF 토큰을 생성하고 검증할 수 있는 미들웨어로, 쉽게 통합할 수 있다.
    •     사용법: csurf 미들웨어를 설치하고, 라우트 핸들러에 추가한다.

 

추가할 수 있는 방법?

  •     Web Application Firewalls (WAFs): WAF는 CSRF 공격을 포함한 다양한 웹 기반 공격을 감지하고 차단할 수 있으며, 여러 클라우드 제공업체나 호스팅 서비스는 WAF를 자동으로 제공하는 경우도 있다.
  •     SameSite 쿠키 속성 설정: 여러 웹 브라우저에서는 SameSite 쿠키 속성을 제공하여 CSRF 공격을 방어할 수 있습니다. 이 속성은 쿠키가 동일한 사이트에서만 전송되도록 제한한다.

 

CSRF 공격을 예방하기 위한 다양한 툴과 프레임워크가 존재하며, 대부분의 요즘 웹 프레임워크는 기본적으로 CSRF 방지 기능을 제공한다. 

 

SameStie 관련 글을 정리해 보았다. 

2024.09.09 - [보안] - [SamSite] SameSite란?

 

[SamSite] SameSite란?

SameSite 속성은 HTTP 쿠키에 적용되는 보안 기능으로, 브라우저가 쿠키를 특정 상황에서만 전송하도록 제어한다. 이는 주로 CSRF(Cross-Site Request Forgery) 공격을 방지하기 위해 도입되었다고 한다.  Sam

ycds.tistory.com

 

 

반응형