Web Hacking/Study

CSRF Token 오용

박연준 2023. 6. 26. 01:37

Cross Site Request Forgery (CSRF)는 임의 이용자 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이다.

 

예) 비밀번호 변경, 게시글 등록 및 삭제, 임의 메시지 전송 등

 

일반적으로 CSRF 취약점을 방어하기 위해 CSRF Token을 사용한다.

 

 

CSRF Token

  • 대표적으로 사용되는 CSRF 방어 기법은 CSRF Token 기법이다.
  • CSRF Token은 같은 오리진에서만 접근 가능한 형태로 특정 Token을 저장해두고, HTTP 요청을 전송할 때 함께 전송된다.
  • CSRF Token 값은 보통 HTML form 태그의 hidden 속성에 입력되거나, 동적 요청에서도 사용될 수 있다.

 

CSRF Token 사용 예

다음은 세션에 CSRF Token을 저장하고, HTTP 요청을 통해 전송된 CSRF Token과 세션에 저장된 Token이 같은지 확인하여 CSRF 공격을 탐지한다.

<?php
if (!isset($_SESSION["csrftoken"])) {
    $csrftoken = bin2hex(random_bytes(32));
    $_SESSION["csrftoken"] = $csrftoken;
} else {
    $csrftoken = $_SESSION["csrftoken"];
}
$method = $_SERVER["HTTP_METHOD"];
if ($method !== "GET" && $method !== "HEAD") {
    if (!isset($_POST["csrftoken"]) ||
        !hash_equals($csrftoken, $_POST["csrftoken"]) {
        header("HTTP/1.1 403 Forbidden");
        die("CSRF detected");
    }
    echo "Input value: ";
    echo htmlentities($_POST["query"], ENT_QUOTES|ENT_HTML5, 'utf-8');
}
?>
<form action="" method="POST">
    <input name="csrftoken" type="hidden" value="<?=htmlentities($csrftoken, ENT_QUOTES|ENT_HTML5, 'utf-8'); ?>">
    <input name="query" type="text" />
    <input type="submit" />
</form>

 

CSRF Token 사용의 장점과 단점

CSRF Token 방식은 캡챠나 암호화 방식과 달리 추가적인 사용자 상호작용이 불필요하다는 장점을 가지고 있다. 반면에 XMLHttpRequest나 Fetch API 등을 통해 Authorization과 같은 이용자 인증 헤더를 설정하여 통신하는 것에 비해 여러 가지 보안 문제의 원인이 되곤 한다.

 

 

CSRF Token을 사용할 때 주의할 점

  • CSRF Token은 공격자가 무차별 대입 공격(Brute-force attack)으로 Token을 획득할 수 없도록 Token의 길이가 충분히 길어야 한다.
  • Token의 길이가 충분히 길어도  추측 가능한 데이터(예: 현재 시간)등을 기반으로 Token을 생성하면 안된다. 따라서 충분히 안정성이 보장된 난수 생성기(CSPRNG)를 사용하여 예측 공격을 방지해야 한다.
  • CSRF Token을 기타 다른 경로로 제삼자에게 노출되지 않도록 주의하여야 한다. 예를 들어 CSRF Token이 URL의 쿼리 파라미터로 넘겨지게 되면, 이후 다른 링크를 방문하였을 때 Referer 헤더에 Token이 그대로 노출되고, 공격자는 역으로 Token을 획득할 수 있다.

 

 

'Web Hacking > Study' 카테고리의 다른 글

Burp Suite Option(3)  (0) 2023.06.26
Burp Suite Option(2)  (0) 2023.06.26
Burp Suite Option(1)  (0) 2023.06.26
Burp Suite 설치 및 기본 설정  (0) 2023.06.26
GHDB (Google Hack DB)  (0) 2023.06.26