CSRF (Corss Site Request Forgery)
CSRF 란 사이트 간 요청 위조의 의미로, 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 해 특정 웹페이지를 보안에 취약하게 하거나 수정, 삭제 들의 작업을 하게 만드는 공격 방법
공격자가 특정 사용자의 권한을 탈취해 특정 행위 (수정, 삭제, 등록 등) 를 사이트에 요청하게 만드는 공격
CSRF 를 위한 조건
- 권한이 있는 사용자가 사이트(서비스) 에 접속해야 한다.
- 사용자가 공격자가 만든 피싱 사이트에 접속하게 되면 CSRF 공격이 성립된다.
2008년에 발생했던 옥션의 개인정보 유출 사건에서도 관리자 계정을 탈취하는데 이 CSRF 방법을 이용
- 옥션 관리자가 메일을 조회하면서 CSRF 공격할 수 있는 테그가 들어간 이메일을 열어 해커가 관리자 권한을 취득하게 됨
<img src="http://auction.com/changeUserAcoount?id=admin&password=admin" width="0" height="0"> |
방어 방법
1. Referrer 검증
- Reqeust Header 에 있는 Referrer 속성을 검증해 차단하는 방식, 이 방법만으로도 대부분 방어가 가능하다.
- 같은 도메인 내 페이지에 XSS 취약점이 있다면 CSRF 공격에 취약해 질 수 있다.
Referer 란
현재 요청을 보낸 페이지의 절대 혹은 부분 주소 정보를 갖고 있는 헤더
- 특정 링크를 통해 사이트를 방문하게 되면 해당 사이트 주소를 갖고 있다.
- 다른 도메인에 리소스 요청을 하는 경우라면 해당 리소스를 사용하는 페이지 주소를 갖고 있다.
2. CSRF Token 사용
- 난수를 사용자 세션에 저장해 사용자의 모든 요청에 값을 포함해 전송한다.
- 요청이 들어올 때 마다 세션에 저장된 값과 전송된 값이 일치하는지 검증
- XSS 를 통한 CSRF 공격에 취약하다.
3. CAPCHA 사용
- 이미지는 매번 바뀌어 인증 값을 미리 획득 할 수 없게 구성돼 있음
- 인증 값을 미리 획득 할 수 없어서 가장 안전한 방법