백엔드/CSRF

CSRF

테오구 2021. 11. 24. 18:15
728x90

csrf란?

Cross-site request forgery, 사이트 간 요청 위조

사이트 간 요청 위조는 웹사이트 취약점 공격의 하나로, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격을 말한다.

 

CSRF(cross site request forgery)

다른 사이트에서 유저가 보내는 요청을 조작한다

    ex) 이메일에 첨부된 링크를 누르면 내 은행계좌의 돈이 빠져나감

 

해커가 직접 데이터를 접근할 수 없다.

    ex) 다른 오리진이기 때문에 response에 직접 접근할 수 없음

 

CSRF 공격을 하기 위한 조건

쿠키를 사용한 로그인

    유저가 로그인 했을 때, 쿠키로 어떤 유저인지 알 수 있어야함

 

예측할 수 있는 요청/parameter를 가지고 있어야함

    request에 해커가 모를 수 있는 정보가 담겨져 있으면 안됨

 

CSRF의 예시

사용자가 로그인된 상태인 것을 이용하여 사용자가 대신 어떤 행동을 하도록 공격하는 방식

  • img 태그를 이용한 방법
    사용자는 아래와 같은 html이 포함된 악의적인 사이트/이메일을 열람할 시 자신도 모르게 요청을 보내게 된다
    <img src="https://mysite.com/user?action=set-pw&pw=1234" width="0" height="0" />​
  • form 을 이용한 방법
    사용자는 아래와 같은 form이 포함된 악의적인 사이트를 열람할 시 자동으로 페이스북에 광고성 글을 작성하게 된다
    <form action="http://facebook.com/api/content" method="post">
    <input type="hidden" name="body" value="여기 가입하면 돈 10만원 드립니다." /> 
    <input type="submit" value="Click Me"/> </form> <script> document.forms[0].submit(); </script>​

GET 요청으로 CSRF 공격하기

계좌이체에 사용되는 GET 요청

애플콕이 은행 웹 사이트에 로그인 하였다고 하자 이때 로그인 정보가 cookie에 남아 있다고 하자

<a href="https://applecock/tranfer?account_number=애플콕계좌번호&amount=1000000"

애플콕이 이상한 문자를 클릭하면

애플콕이 100만원을 요청하는 get요청을하면 해커는 애플콕의 계좌 번호를 해커의 계좌로 바꿀 수 있기 때문입니다.

POST 요청으로 CSRF 공격하기

사용자를 해커의 계정으로 몰래 로그인시키는 방식. 그 사실을 모르는 사용자가 남긴 활동기록들은 해커의 계정에 저장된다

  • form을 이용한 방법
    사용자는 아래와 같은 form이 포함된 악의적인 사이트를 열람할 시 자동으로 해커 계정으로 로그인하는 요청을 보내게 된다
    <form method="POST" action="http://honest.site/login"> 
    <input type="text" name="user" value="h4ck3r" /> 
    <input type="password" name="pass" value="passw0rd" /> 
    </form> <script> document.forms[0].submit(); </script>​

 

CSRF 막는 방법

CSRF 토큰 사용하기

    서버측에서 CSRF공격에 보호하기 위한 문자열을 유저의 브라우저와 웹에만 제공

 

Same-site cookie사용하기

    같은 도메인에서만 세션/쿠키를 사용할 수 있다.

728x90