CSRF

김개발세발바닥·2024년 3월 24일
0

보안

목록 보기
3/3

CSRF(Cross-Site Request Forgery).

사이트 간 요청 위조.

사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.

정상적인 사용자가 의도하지 않았지만, 자신도 모르게 서버를 공격하게 되는 경우다.
공격자가 만든 악성 페이지를 통해 사용자는 자신도 모르게 공격을 수행한다.

CSRF attack에 대해 이해하려면 우선 쿠키와 세션에 대한 간단한 이해가 필요하다.
사용자가 특정 서버에 로그인하면 일반적으로 다음과 같은 작업들이 수행된다.

1. 서버는 로그인 시 인증된 사용자의 정보를 세션(session)에 저장하고, 이를 찾을 수 있는 sessionID을 만든다.
2. 서버는 저장된 세션 정보를 클라이언트(브라우저)가 사용할 수 있도록 sessionID를 Set-Cookie 헤더에 담아서 전달한다.
3. 클라이언트(브라우저)는 전달된 sessionID를 쿠키에 저장한다.
4. 클라이언트(브라우저)는 해당 도메인을 가진 서버로 요청 시 쿠키에 저장된 sessionID를 자동으로 전달한다.
5. 서버는 쿠키에 담긴 sessionID를 통해 인증된 사용자인지 여부를 확인한다.

CSRF 전제 조건과 공격 과정.

CSRF 공격을 시도하기 위해선 몇 가지 조건이 필요하다.

  • 사용자가 보안이 취약한 서버로부터 이미 인증을 받은 상태여야 한다.
  • 쿠키 기반으로 서버 세션 정보를 획득할 수 있어야 한다.
  • 공격자는 서버를 공격하기 위한 요청 방법에 대해 미리 파악하고 있어야 한다.
    예상치 못한 파라미터가 있으면 불가능하다.
  1. 사용자는 보안이 취약한 서버에 로그인한다.
  2. 로그인 이후 서버에 저장된 세션 정보를 사용할 수 있는 sessionID가 사용자 브라우저 쿠키에 저장된다.
  3. 공격자는 서버에 인증된 브라우저의 사용자가 악성 스크립트 페이지를 누르도록 유도한다.
  4. 사용자가 악성 스크립트가 작성된 페이지 접근시 쿠키에 저장된 sessionID는 브라우저에 의해 자동적으로 함께 서버로 요청된다.
  5. 서버는 쿠키에 담긴 sessionID를 통해 해당 요청이 인증된 사용자로부터 온 것으로 판단하고 처리한다.

대응 방법.

  1. 모든 중요한 요청에 대해 서버가 발행하는 CSRF 토큰을 요청에 포함시킨다.
    이 토큰은 공격자가 모르는 한 피해자의 브라우저에서 만들어지고 검증된다.
  2. SameSite 쿠키 속성을 사용하여 브라우저가 동일 출처에서만 요청을 보내도록 제한할 수 있다.
  3. 요청의 Referer 헤더를 검증하여 요청이 신뢰할 수 있는 출처에서 왔는지 확인할 수 있다. 하지만 이 방법은 완전하게 신뢰할 수 없을 수 있다.

0개의 댓글

관련 채용 정보