Security/보안

[공격 2] CSRF(Cross-site request forgery)

snowkit 2024. 12. 8. 00:59

설명

  • 사이트 간 요청 위조(Cross-site request forgery)
    • 주로 악성 스크립트가 있는 서버(A)에서 공격 대상 서버(B)에 인증된 사용자의 정보로 요청을 위조하여 공격
    • 예시) 비밀번호 변경, 이메일 주소 변경, 자금 이체, 계정 삭제 등
  • 사용자의 브라우저에 대한 사이트의 신뢰를 악용한다
    • 클라이언트 브라우저가 자동으로 포함하는 인증 정보를 사용하므로, 서버는 정상 요청인지 악의적 요청인지 확인 불가능
  • 세션+쿠키 기반의 사용자 인증 보안 취약점을 이용한 공격

조건

  1. 피해자가 공격 대상 서버에 인증된 상태여야 함
    • 세션 쿠키나 토큰 정보가 브라우저에 저장되어 있어야 함
  2. 피해자 요청 시 공격 대상 서버 인증 정보를 포함해야 함
    • 주로 쿠키 기반 인증에서 발생하는데, 브라우저가 같은 도메인으로 요청할 때 쿠키를 자동으로 포함하기 때문
  3. 공격 대상 서버에서 요청을 검증하지 않아야 함
    • CSRF 토큰 같은 검증을 요구한다면 공격 실패
  4. 피해자가 공격자의 악성 리소스에 접근해야 함
    • 악성 스크립트가 삽입된 웹 서버
      • 악성 스크립트가 삽입된 공격자의 웹 서버
      • 악성 스크립트가 삽입된 취약한 웹 서버(Stored XSS)
    • 악성 링크
      • 악성 스크립트가 URL 파라미터에 삽입된 링크(Reflected XSS)
      • 악성 스크립트가 삽입된 웹 서버의 링크
      • 이메일, 게시판, SNS 등을 통해 링크 공유

방법

  1. 피해자: 공격 대상 서버에 사용자 인증(로그인)
  2. 피해자: 브라우저에 사용자 인증 정보가 저장됨
  3. 피해자: 악성 스크립트가 삽입된 웹 서버 방문
  4. 피해자: 스크립트로 인해 공격 대상 서버로 악의적 요청 전송됨
    • 의도하지 않은 행동(비밀번호 변경 등)이 공격 대상 서버에서 수행된다