CSRF란 인터넷 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 만드는 공격이다.
CSRF는 해커가 사용자의 컴퓨터나 서버를 해킹하여 이루어 지는 공격은 아니다. CSRF는 다음과 같은 조건에서 발생한다.
- 사용자가 보안이 취약한 서버로부터 인증을 받은 상태
- 쿠키 기반으로 서버 세션 정보를 획득할 수 있을 때
- 공격자가 서버를 공격하기 위한 요청방법을 미리 파악하고 있을때
위와 같은 조건이 만족되면 다음과 같은 과정으로 공격이 수행된다.
- 사용자는 보안이 취약한 서버에 로그인 한다.
- 로그인 이후 서버에 저장된 세션정보를 사용할 수 있는 SessionId가 사용자 브라우저 쿠키에 저장이 된다.
- 공격자는 서버에 인증된 브라우저의 사용자가 악성 스크립트 페이지를 누르도록 유도한다.
- 사용자가 피싱 사이트로 접근시 피싱 사이트는 사용자의 쿠키를 탈취하여 사용자로 가장하여 요청을 위조해 서버로 전송한다.
- 서버는 해당 요청에 대한 응답을 하게 되고 이로 인해 사용자가 의도치 않은 행동이 실행된다.
코드를 예시로 들어보면
<a href="https//examplebank/transfer?account_number=[공격자 계좌번호]&amount="1000000$">
공격자가 피싱 사이트에 이런 코드를 삽입하면 피싱 사이트에 접속하는 순간 공격자의 계좌번호로 100만 달러를 송금하게 된다.
CSRF 대응방법
- CSRF 토큰 사용 : 서버측에서 CSRF공격에 보호하기 위한 문자열을 유저의 브라우저와 웹 앱에만 제공한다.
- Same-site cookie : 같은 도메인에서만 세션, 쿠키를 사용하게 한다.