Home CSRF (Cross-Site Request Forgery)
Post
X

CSRF (Cross-Site Request Forgery)

CSRF

Cross Site Request Forgery (사이트 간 요청 위조)의 줄임말로 웹 취약점 중 하나입니다.

사용자가 자신의 의지와는 무관하게 해커가 의도한 행위(데이터 수정, 삭제, 등록 등) 를 특정 웹사이트에 요청하게 되는 공격입니다.

예를 들면 사용자가 그저 버튼을 눌렀을 뿐인데 해커가 심어놓은 스크립트에 의해 내 계정의 인증과정을 거쳐서 사용자의 의도와 관계없이 광고성 글이 개시되는 것을 생각해볼 수 있습니다.

또한, 해커는 사용자의 권한을 도용하여 특정 웹 사이트의 기능을 실행하기도 힙니다.


동작원리

CSRF가 성공하려면, 아래 3가지 조건이 만족되어야 합니다.

  1. 사용자가 보안이 취약한 서버로부터 이미 로그인되어 있는 상태여야 합니다.

  2. 해커는 쿠키 기반의 서버 세션 정보를 획득할 수 있어야 합니다.

  3. 해커는 서버를 공격하기 위한 요청 방법에 대해 미리 파악하고 있어야 합니다.


CSRF 공격 과정

  1. 사용자가 보안이 취약한 서버에 로그인합니다.

  2. 서버에 저장된 세션 정보를 사용할 수 있는 session ID가 사용자의 브라우저 쿠키에 저장됩니다.

  3. 해커는 사용자가 악성 스크립트 페이지를 누르도록 유도합니다.

    • 게시판이 있는 웹사이트에 악성 스크립트를 게시글로 작성하여 사용자들이 게시글을 클릭하도록 유도

    • 메일 등으로 악성 스크립트를 직접 전달하거나, 악성 스크립트가 적힌 페이지 링크를 전달

  4. 사용자가 악성 스크립트 접근시 웹 브라우저에 의해 쿠키에 저장된 session ID와 함께 공격할 서버로 요청됩니다.

  5. 서버는 쿠키에 담긴 session ID를 통해 해당 요청이 인증된 사용자로부터 온 것으로 판단하고 처리합니다.

csrf-ex

  • 간단한 공격 예시

    공격자는 아래와 같은 html 문서를 열도록 유도하기만 한다면 공격자가 의도한 패스워드 변경이 실행됩니다.

    1
    2
    3
    4
    5
    6
    
    <form action="https://vulnerable-website.com/password/change" method="POST">
      <input type="hidden" name="password" value="mypassword" />
    </form>
    <script>
      document.forms[0].submit();
    </script>
    

    img 태그로 요청된 src 주소는 GET형식으로 처리가 되기 때문에 img 태그가 포함된 글을 보기만 해도 로그아웃을 시킬 수도 있습니다.

    1
    
    <img src="http://vulnerable-website.com/logout" />
    

대응 방법

  • Cookie Samesite

    Cookie의 SameSite 속성은 외부 사이트에 쿠키 전송할 범위를 설정해서 방지합니다.

  • Referer Check

    HTTP 요청 헤더 정보에서 Referer 정보를 확인하여 같은 도메인에서 보낸 요청인지 검증하여 차단합니다.

    Referer
    현재 페이지에 요청한 이전 페이지의 uri 정보
  • CSRF Token

    CSRF Token (임의의 난수)를 생성해 서버 메모리에 저장하고 클라이언트에 전달합니다.

    클라이언트는 중요한 요청(생성, 삭제, 수정)을 보낼 때 파라미터로 CSRF Token을 같이 보내며 서버는 검증합니다.

    CSRF 공격을 당해도 CSRF Token은 서버에 전달되지 않으므로 서버는 요청을 수행하지 않습니다.

  • CAPTCHA 사용

    이미지를 보여주고 그 이미지에 해당하는 문자/숫자/그림이 아니라면 요청을 거부합니다.

    사용자가 의도한 요청인지 아니면 트리거로 동작한 것인지 확인합니다.

    captcha

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.