본문 바로가기
자격증/정보보안기사

Cross-Site Request Forgery(CSRF)이란?

by 푸고배 2021. 11. 29.

 Cross-Site Request Forgery(CSRF)이란? 

XSRF 또는 Session Riding이라고도 하는 CSRF(교차 사이트 요청 위조)는 웹 브라우저를 속여 사용자가 로그인한 응용 프로그램에서 원치 않는 작업을 실행하도록 하는 공격이다.

 

성공적인 CSRF 공격은 비지니스와 사용자 모두에게 치명적일 수 있다. 세션 쿠키 도난을 포함하여 클라리언트 관계 손상, 무단 자금 이체, 비밀번호 변경 및 데이터 도난이 발생할 수 있다.

 

CSRF는 일반적으로 피해자를 속여 위조된 요청을 서버로 보내도록 유도하는 이메일이나 링크와 같은 악의적인 소셜 엔지니어링을 사용하여 수행된다. 의심하지 않는 사용자는 공격 시 애플리케이션에 의해 인증되기 때문에 합법적인 요청과 위조된 요청을 구별하는 것이 불가능하다.

 

 CSRF 예 

공격을 실행하기 전에 해커는 일반적으로 위조된 요청이 가능한 합법적인 것처럼 보이게 하기 위해 애플리케이션을 조사한다. 예를 들어 $100 은행 송금에 대한 일반적인 GET 요청은 다음과 같다.

GET http://netbank.com/transfer.do?acct=PersonB&amount=$100 HTTP/1.1

해커가 자신의 계정에 $100의 전송을 초래하므로 이 스크립트를 수정할 수 있다.

악성 요청은 다음과 같을 수 있다.

GET http://netbank.com/transfer.do?acct=AttackerA&amount=$100 HTTP/1.1

해커는 요청을 하이퍼링크에 포함할 수 있다.

<a href="http://netbank.com/transfer.do?acct=AttackerA&amount=$100">자세히 알아보기!</a>

다음으로 해커는 이메일을 통해 많은 은행 고객에게 하이퍼링크를 배포할 수 있다. 은행 계좌에 로그인한 상태에서 링크를 클릭하면 의도치 않게 $100 이체가 시작된다.

 

은행 웹사이트가 POST 요청만 사용하는 경우 <a> href 태그를 사용하여 악성 요청을 프레이밍하는 것은 불가능하다. 그러나 이 공격은 포함된 Javascript의 자동 실행과 함께 아래와 같은 <form>태그로 전달될 수 있다.

<body onload="document.forms[0].submit()"> 
   <form action="http://netbank.com/transfer.do" method="POST"> 
     <input type="hidden" name=" acct" value="AttackerA"/> 
     <input type="hidden" name="amount" value="$100"/> 
     <input type="submit" value="내 사진 보기!"/> 
   </form> 
 </body>

 

 예방 방법 

CSRF 공격을 예방하고 완화하는 효과적인 방법이 많이 있다. 사용자의 관점에서 예방은 로그인 자격 증명을 보호하고 승인되지 않은 사용자가 애플리케이션에 액세스하는 것을 거부하는 문제이다.

 

아래는 몇 가지 예방방법 예시이다.

  • 사용하지 않을 때 웹 애플리케이션 로그오프
  • 사용자 이름 및 암호 보안
  • 브라우저가 비밀번호를 기억하도록 허용하지 않음
  • 애플리케이션에 로그인한 상태에서 동시에 탐색 방지

웹 애플리케이션의 경우 악성 트래픽을 차단하고 공격을 방지하기 위한 여러 솔루션이 존재한다. 가장 일반적인 솔루션 중 하나는 모든 세션 요청 또는 ID에 대해 고유한 임의 토큰을 생성하는 것이다. 이는 이후에 서버에서 checked 및 verified된다. 중복 토큰이나 누락된 값이 있는 세션 요청은 차단된다. 세션 ID 토큰과 일치하지 않는 요청은 애플리케이션에 도달할 수 없다.

 

쿠키의 이중 제출은 CSRF를 차단하는 또 다른 잘 알려진 솔루션이다. 고유 토큰을 사용하는 것과 유사하게 임의의 토큰은 쿠키와 요청 매개변수 모두에 할당된다. 그런 다음 서버는 애플리케이션에 대한 액세스 권한을 부여하기 전에 토큰이 일치하는지 확인한다.

 

토큰은 유효하지만 브라우저 기록, HTTP 로그 파일, HTTP 요청의 첫 번째 줄을 기록하는 네크워크 어플라이언스 및 리퍼러 헤더(보호된 사이트가 외부 URL에 연결되는 경우)를 포함하여 여러 지점에서 토큰이 노출될 수 있다. 이러한 잠재적인 약점은 토큰을 완전한 솔루션보다 덜하게 만든다.

 

 CSRF와 XSS비교 

XSS CSRF
개요 : 악성 스크립트가 클라이언트에서 실행됨
공격 대상 : 클라이언트
목적 : 쿠키ㆍ세션 갈취, 웹 사이트 변조 등
개요 : 권한을 도용당한 클라이언트가 가짜 요청을 서버에 전송
공격 대상 : 서버
목적 : 권한 도용


 

참고 자료 : 

 

What is CSRF | Cross Site Request Forgery Example | Imperva

CSRF is a common attack vector that tricks a user into executing an unwanted action in a web application. While dangerous, the attack is easily preventable

www.imperva.com

 

XSS와 CSRF 차이

XSS(Cross Site Scripting)란? XSS는 SQL injection과 함께 웹 상에서 가장 기초적인 취약점 공격 방법의 일종으로, 악의적인 사용자가 공격하려는 사이트에 스크립트를 넣는 기법을 말한다. 주로 의도치 않

young-blog.tistory.com

 

반응형

댓글