크로스 사이트 요청 위조(CSRF, Cross-Site Request Forgery) 공격은 사용자가 현재 로그인해 있는 취약한 사이트로 악의적인 사이트에서 요청을 전송하는 공격입니다.

 

가령, 다음은 CSRF 공격의 한 가지 사례입니다.

 

사용자가 폼 인증을 통해서 www.example.com에 로그인합니다.

 

서버가 사용자를 인증합니다. 이 때, 서버에서 반환된 응답에는 인증 쿠키가 포함되어 있습니다

 

사용자가 로그아웃하지 않은 상태에서 악의적인 사이트를 방문합니다. 그리고, 이 악의적인 사이트에 다음과 같은 HTML 폼이 존재한다고 가정해보겠습니다. 

 

=========================================================================

<h1> You Are a Winner! </h1>

<form action="http://example.com/api/account" method="post">

      <input type="hidden" name="Transaction" value="withdraw" />

      <input type="hidden" name="Amount" value="1000000" />

      <input type="submit" value="Click Me"/>

</form>

=========================================================================

 

이 HTML 폼의 action 어트리뷰트가 악의적인 사이트가 아닌, 취약한 사이트를 가리키고 있다는 점에 유의하시기 바랍니다. 바로 이런 특징 때문에, "크로스 사이트(Cross-Site)"라는 명칭이 붙은 것입니다.

 

사용자가 "submit" 버튼을 클릭합니다. 그러면, 브라우저가 요청에 인증 쿠키를 함께 포함시켜서 전송합니다.

 

이 요청은 서버에서 사용자의 인증 컨텍스트로 실행되므로, 인증된 사용자가 수행할 수 있는 모든 작업을 수행할 수 있습니다.

 

비록, 이 예제에서는 사용자가 직접 폼 버튼을 클릭해야만 공격이 수행되지만, 악의적인 페이지에서 AJAX 요청을 전송하는 스크립트를 자동으로 실행하도록 만드는 일도 매우 간단합니다. 더군다나, 악의적인 사이트에서 "https://"로 요청을 전송할 수도 있기 때문에, SSL을 사용하더라도 CSRF 공격을 방지할 수는 없습니다.

 

대부분의 경우 CSRF 공격은 쿠키를 이용해서 인증을 수행하는 사이트들을 대상으로 행해지는데, 그 이유는 브라우저가 자동으로 모든 관련된 쿠키들을 목적지 웹 사이트로 전송하기 때문입니다. 그러나, 그렇다고 해서 반드시 쿠키를 악용하는 형태로만 CSRF 공격이 이루어지는 것은 아닙니다.

 

가령, 기본 인증과 다이제스트(Digest) 인증도 역시 CSRF 공격에 취약합니다. 즉, 사용자가 기본 인증이나 다이제스트 인증으로 로그인 한 이후, 브라우저가 자동으로 세션 종료 시까지 자격 증명을 함께 전송하기 때문입니다.

 

http://www.egocube.pe.kr/Translation/Content/asp-net-web-api/201402030001

 

보안: 크로스 사이트 요청 위조(Cross-Site Request Forgery) 공격 방지하기

크로스 사이트 요청 위조(CSRF, Cross-Site Request Forgery) 공격은 사용자가 현재 로그인해 있는 취약한 사이트로 악의적인 사이트에서 요청을 전송하는 공격입니다.

www.egocube.pe.kr

 

+ Recent posts