CSRF 공격이란?

조현근·2022년 11월 28일
0
post-thumbnail

우아한테크코스 팀 프로젝트에서 쿠키를 이용해 조회수 어뷰징 방지 기능을 구현했었는데 CSRF에 아냐는 질문을 받은 적이 있었다. CSRF가 무엇인지 한 번 알아보도록 하자!!!

CSRF(Cross Site Request Forgery)

웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등등)을 특정 웹 사이트에 요청하게 하는 공격입니다.
예를들어 페이스북 희생자의 계정으로 광고성 글을 등록하는 것과 같은게 CSRF를 이용한 공격입니다.

CSRF는 희생자의 컴퓨터를 감염시키거나 페이스북 서버를 해킹해서 이뤄지는 공격이 아닙니다. 희생자의 쿠키 기반 인증 정보를 사용해 공격자가 희생자인것 처럼 웹 서비스에서 권한이 없는 행위를 하는 것입니다.

CSRF 전제 조건과 공격 과정

전제 조건

  • 사용자가 보안이 취약한 서버로부터 이미 인증(로그인)을 받은 상태여야 합니다.
  • 쿠키 기반으로 서버 세션 정보를 획득할 수 있어야 합니다.
  • 공격자는 서버를 공격하기 위한 요청 방법에 대해 미리 파악하고 있어야 합니다. 예상치 못한 파라미터가 있으면 불가능합니다.

공격 과정

  1. 희생자는 보안이 취약한 서버에 로그인합니다.
  2. 로그인 이후 서버에 저장된 세션 정보를 사용할 수 있는 sessionID가 사용자 브라우저 쿠키에 저장됩니다.
  3. 공격자는 서버에 인증된 브라우저의 희생자가 악성 스크립트 페이지를 누르도록 유도합니다.
    • 메일 등으로 악성 스크립트를 직접 전달하거나, 웹 사이트 게시판에 악성 스크립트를 작성해 누르도록 유도합니다.
  4. 희생자가 악성 스크립트가 작성된 페이지 접근 시 쿠키에 저장된 sessionID는 브라우저에 의해 자동으로 함께 서버로 요청됩니다.
  5. 서버는 쿠키에 담긴 sessionID를 통해 공격자가 보낸 요청을 희생자가 보낸 요청으로 판단하고 처리합니다.

CSRF 공격 방어하기

대표적으로 방어기법에 대해 알아보겠습니다!!

Referer 검증

Back-end에서 request의 referer를 확인해 domain(ex. facebook.com)이 일치하는지 검증하는 방법입니다. Referer은 현재 요청을 보낸 페이지의 절대 혹은 부분 주소를 포함합니다. 보통의 경우 Host헤더와 Referer헤더의 값이 일치합니다.
하지만 도메인 내의 페이지에 XSS 취약점이 있는 경우 CSRF 공격에 취약해 질 수 있습니다. 세밀하게 페이지 단위까지 일치하는지 검증을 하면 도메인 내 타 페이지의 XSS 취약점에 의한 CSRF 공격을 방어할 수 있습니다.

출처

https://itstory.tk/entry/CSRF-%EA%B3%B5%EA%B2%A9%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-CSRF-%EB%B0%A9%EC%96%B4-%EB%B0%A9%EB%B2%95
https://junhyunny.github.io/information/security/spring-boot/spring-security/cross-site-reqeust-forgery/

profile
안녕하세요!

0개의 댓글