시큐어 코딩 - CSRF

2024. 10. 11. 22:32모니터링

2024/10/10

 

 

 

※   CSRF에 대해 알아보자.

 

   ▶  CSRF(Cross-Site Request Forgery)란❓

   웹 애플리케이션의 취약점을 이용해 사용자가 의도하지 않은 요청을 보내도록 하는 공격 기법이다. 공격자는 사용자가 인증된 상태를 악용하여 사용자가 원하지 않는 행동을 수행하게 만든다. 예를 들어, 사용자가 로그인된 상태에서 악의적인 웹사이트를 방문하면, 그 웹사이트가 사용자의 권한을 이용해 은행 계좌에서 돈을 송금하도록 할 수 있다.

 

 

   ▶  CSRF 상황 

     1️⃣  사용자가 로그인: 사용자가 웹 애플리케이션에 로그인한다.

     2️⃣  세션 유지: 로그인 후 세션 쿠키가 브라우저에 저장된다.

     3️⃣  악성 웹사이트 방문: 사용자가 다른 웹사이트를 방문한다. 이 웹사이트는 CSRF 공격 코드를 포함하고 있다.

     4️⃣  악의적인 요청 전송: 악성 웹사이트는 사용자의 세션 쿠키를 이용해 원본 웹 애플리케이션으로 요청을 보낸다.

     5️⃣  서버 처리: 서버는 요청을 정상적인 사용자의 요청으로 인식하고 처리한다.

 

   ▶  공격 예시

       ●  공격자 웹페이지 코드

<!DOCTYPE html>
<html>
<body>
  <h1>Free Gift</h1>
  <img src="http://bank.com/transfer?amount=1000&to=attacker" style="display:none;" />
</body>
</html>


       ●  이 예시에서 사용자가 이 페이지를 방문하면, 이미지 태그를 통해
            http://bank.com/transfer?amount=1000&to=attacker 요청이 자동으로 실행된다.
       ●   사용자가 이미 bank.com에 로그인되어 있다면, 이 요청은 인증된 상태로 처리된다.

 

 

   ▶  방지 방법

     ✅  Referer 헤더 검증

       ●  서버는 요청의 Referer 헤더를 확인하여 요청이 신뢰할 수 있는 출처에서 온 것인지 확인할 수 있다.
       ●  그러나, Referer 헤더는 사용자가 조작할 수 있고, 일부 브라우저에서는 이 헤더를 포함하지 않을 수 있다.

     ✅  CSRF 토큰 사용

       ●  가장 일반적인 방지 방법은 CSRF 토큰을 사용하는 것이다.
       ●  서버는 각 요청에 대해 고유한 토큰을 생성하고, 이를 폼에 포함시킨다.
       ●  서버는 요청이 들어올 때 이 토큰을 검증한다.

     ✅  form 대신 API사용

       ●  API를 통해 JSON데이터로 통신한다면 해당 이슈를 피할 수 있다.

 

 

 

'모니터링' 카테고리의 다른 글

시큐어 코딩 - XSS  (2) 2024.10.11
시큐어 코딩 - CORS  (0) 2024.10.09
애플리케이션 로그 모니터  (2) 2024.10.07
모니터링 - Prometheus와 Grafana  (0) 2024.10.04
모니터링 시스템  (2) 2024.10.02