교차 사이트 요청 위조란?

교차 사이트 요청 위조 공격은 피해자가 자격 증명을 사용하여 상태를 변경하는 활동을 호출하도록 속입니다.

학습 목표

이 글을 읽은 후에 다음을 할 수 있습니다:

  • 교차 사이트 요청 위조(CSRF)의 정의
  • CSRF 공격의 작동 방식 설명
  • CSRF 공격을 완화하는 방법 살펴보기

관련 콘텐츠


계속 알아보시겠어요?

인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!

Cloudflare가 개인 데이터를 수집하고 처리하는 방법은 Cloudflare의 개인정보 취급방침을 참조하세요.

글 링크 복사

교차 사이트 요청 위조(CSRF)란?

교차 사이트 요청 위조 공격은 사용자가 뜻하지 않게 자격 증명을 사용하여 계정에서 자금을 이체하거나 이메일 주소 및 비밀번호를 변경하거나 기타 원치 않는 작업을 수행하는 등 상태 변경 활동을 호출하도록 속이는 혼동된 대리인* 사이버 공격의 한 유형입니다.

일반 사용자에 대한 잠재적 영향도 상당하지만, 관리 계정에 대한 CSRF 공격이 성공하면 전체 서버가 손상되어 웹 애플리케이션, API 등의 서비스가 완전히 장악되는 결과로 이어질 수 있습니다.

교차 사이트 요청 위조는 어떻게 작동할까요?

이 공격은 데이터를 한 값에서 다른 값으로 변경하는 요청 유형을 의미하는 상태 변경 요청을 목표로 하는 데 중점을 둡니다.예를 들어, 표적이 된 요청에 따라 구매가 이루어지거나 계정의 값이 변경될 수 있습니다.흥미롭게도 이것은 "무차별 공격"이며 공격자에게 데이터가 반환되지는 않으므로 데이터 도난을 원한다면 좋은 선택이 아닙니다.

다음은 교차 사이트 요청 위조 공격의 네 단계에 대한 예시입니다.

  1. 한 공격자가 위조된 요청을 생성하여, 이 요청이 실행되면 특정 은행에서 공격자의 계좌로 10,000달러가 이체되도록 해놓았습니다.
  2. 이 공격자가 위조된 요청을 하이퍼링크에 삽입하여 대량 이메일로 전송하고 여러 웹 사이트에도 삽입합니다.
  3. 한 피해자가 공격자가 보낸 이메일이나 웹 사이트 링크를 클릭하여 은행에 10,000달러를 송금하도록 요청합니다.
  4. 은행 서버에서는 요청을 수신하고 피해자에게 적절한 권한이 있기 때문에 요청을 합법적인 것으로 처리하고 자금을 이체합니다.
위조된 요청

CSRF 공격은 방법론에 따라 다르지만, 일반적으로 다음과 같은 특징을 보입니다.

  1. 이 공격은 사용자의 신원에 의존하는 웹 사이트를 악용합니다
  2. 이 공격은 사용자의 브라우저를 속여 HTTP 요청을 표적이 된 사이트로 보내도록 합니다
  3. 이 공격에는 부작용이 있고 적절한 CSRF 보호가 적용되지 않은 HTTP 요청을 이용하는 것이 포함됩니다.

HTTP 동사마다 CSRF 공격에 대한 취약성이 다르므로 보호 전략도 다양하게 됩니다. 이는 웹 브라우저에서 동사를 처리하는 방식이 다르기 때문입니다.

HTTP GET 요청에는 이미지 태그 내부의 매개변수 등 조작되고 악용될 수 있는 매개변수가 포함되어 있습니다. 일반적으로 GET 요청은 상태를 수정하지 않으므로 제대로 구현된 웹 애플리케이션이나 기타 리소스에 대한 CSRF의 표적이 될 수 없습니다.

HTTP POST는 상태를 변경하는 데 사용되므로 보호의 필요성이 커집니다. 보호를 강화하기 위해 웹 브라우저에서는 동일 출처 정책(SOP)이라는 보안 조치와 교차 출처 보안 정책을 포함하는 교차 출처 리소스 공유(CORS)를 구현합니다. SOP는 동일한 출처로부터의 요청만 허용하고 CORS는 특정 유형의 요청에 대해서만 다른 출처로부터의 요청을 허용합니다. 이러한 구현을 조합하면 요청 또는 웹 페이지가 다른 출처와 상호 작용하는 기능을 제한하여 CSRF 공격을 방지하는 데 도움이 됩니다.

PUT, DELETE 등의 다른 HTTP 동사는 SOP 및 CORS를 통해서만 실행할 수 있으므로 많은 교차 사이트 공격을 완화할 수 있습니다.

일반적이지는 않지만, 일부 웹 사이트에서는 이러한 보안 조치를 명시적으로 비활성화하며, 웹 브라우저 내부에서도 이러한 보안 조치를 비활성화할 수 있습니다.

교차 사이트 요청 위조는 어떻게 완화할 수 있을까요?

CSRF 공격을 완화하는 가장 일반적인 방법은 두 가지 방법 중 하나를 사용하여 Anti-CSRF 토큰을 사용하는 것입니다. 토큰 구현은 약간 다르지만 기본 원칙은 동일합니다. 무작위로 생성된 토큰 문자열을 생성한 다음 비교하면 공격자가 공격을 수행할 가능성이 줄어듭니다. 드문 가능성으로 추측하는 데 성공하지 않고는 말입니다.

싱크로나이저 토큰 패턴:

사용자가 자금 이체를 허용하는 은행 웹 페이지와 같은 웹 페이지를 방문하면 은행 웹 사이트에서는 무작위 토큰을 양식에 삽입합니다. 사용자가 양식을 제출하면 무작위 토큰이 반환되고 은행은 두 토큰이 일치하는지 확인할 수 있습니다. 토큰이 일치하면 이체가 진행됩니다. 공격자는 웹 페이지에서 생성된 무작위 토큰 값에 액세스할 방법이 없으며, 페이지를 요청하더라도 동일한 출처 정책으로 인해 공격자가 응답을 읽을 수 없습니다.

이를 완화하는 방법의 단점은 요청할 때마다 토큰의 유효성을 확인해야 하는 서버 측의 부담이 커진다는 것입니다. 또한 사용자가 여러 개의 브라우저 창을 사용하거나 요청을 하는 다른 소프트웨어와 관련된 다른 조건이 있는 경우에도 문제가 발생할 수 있습니다. 토큰의 범위를 요청당이 아닌 세션당으로 확장하면 이러한 어려움을 일부 피할 수 있습니다.

쿠키-헤더 토큰:

또 하나의 방법은 방문자의 웹 브라우저에 무작위 토큰이 포함된 쿠키를 발급하는 것입니다. 클라이언트 측에서 작동하는 JavaScript는 쿠키에 있는 토큰의 값을 읽고 이 값을 각 요청과 함께 전송되는 HTTP 헤더에 복사합니다. 사용자로부터 진짜 요청이 전송되면 서버에서 헤더에 있는 값을 확인할 수 있습니다. 다른 모든 인스턴스는 실패하므로 공격 성공이 완화됩니다.

WAF를 통해 사용자 지정 규칙을 사용하면 특정 CSRF 공격을 방지하는 데 도움이 될 수 있습니다.Cloudflare의 웹 애플리케이션 방화벽 살펴보기.

*혼동된 대리인 문제

혼동된 대리인이란 속아서 권한을 오용하는 컴퓨터 프로그램을 말합니다. 이러한 종류의 취약점과 관련된 위험 때문에 기능 기반 보안이 오용과 관련된 위험을 줄이는 데 도움이 됩니다. 예를 들어 소프트웨어를 설치할 때 요즘 대부분의 컴퓨터에서는 사용자에게 로그인하도록 요구합니다. 이렇게 하면 사용자가 실수로 권한을 사용하여 설치 권한을 부여할 때 의도치 않게 코드가 실행되는 것을 방지할 수 있습니다.