CSRF 크로스사이트 요청 위조
설명 영상 CSRF 크로스사이트 요청 위조 · 2:21
핵심 정리
CSRF는 사용자가 웹사이트에 로그인한 상태에서 자신의 의지와 무관하게 공격자가 의도한 행위를 하게 되는 공격이다. 이 공격은 사이트 간 요청 위조라고도 하며, XSRF라는 약어로도 표현한다. 로그인된 브라우저가 사용자 모르게 위조 요청을 보내게 하는 공격이 사이트 간 요청 위조다. 서버는 로그인된 브라우저에서 온 요청을 정당한 사용자의 요청으로 오해하기 쉽고, 이 오해로 피해가 발생한다.
CSRF가 성립하는 원리는 신뢰가 향하는 방향과 관련이 있다. 사용자와 서버 사이의 신뢰를 악용해 사용자의 의도와 무관한 요청을 보내게 하는 공격이 CSRF다. CSRF는 사용자의 인증 상태를 악용하여 의도하지 않은 요청을 대상 사이트로 보내게 하는 공격이다. 사용자가 알아차리지 못한 채 브라우저가 받는 신뢰를 이용해 의도하지 않은 요청을 서버에 보내는 것도 같은 원리다. 공격자는 피해자의 권한을 빌려 행위를 요청하며, 이 공격이 성립하려면 피해자가 해당 사이트에 로그인해 있어야 한다.
공격이 성공하면 수정, 삭제, 등록 같은 행위가 사용자의 의지와 무관하게 일어난다. 위조 HTTP 요청이 전달되면 이런 행위가 사용자 모르게 실행된다. 공격자는 사용자가 신뢰받는 웹 서버에 명령을 보내고, 그 명령이 사용자 권한으로 실행되게 한다. 이때 CSRF는 공격자가 응답을 읽지 않고 피해자 브라우저에 원하지 않는 행위를 요청하는 공격이다.
CSRF 공격에는 위조 방지 토큰을 요청에 추가해 검증하는 방식으로 대응한다. 대응의 핵심은 요청이 정상적인지 판별하는 것이다. 근본적인 해결책으로는 대상 사이트가 요청 인증을 쿠키에만 의존하지 않도록 바꾸는 방법이 제시된다. 쿠키뿐 아니라 숨겨진 폼 필드에도 인증 값을 요구하고, 이 방식을 지속적인 영향을 미치는 모든 요청에 적용해야 한다. HTTP Referer 헤더를 확인하는 방법도 도움이 될 수 있다.
이 공격은 사용자가 로그인한 상태에서 열린 페이지를 통해 시작되므로, 피해자가 로그인 상태가 아니면 권한이 없어 성립하지 않는다.
자세히
신뢰 구조와 인증 상태 악용
브라우저는 어떤 사이트로 요청을 보내든 그 사이트의 쿠키를 자동으로 함께 보낸다. 사이트는 유효한 쿠키가 포함된 요청을 로그인한 사용자가 직접 보낸 요청으로 받아들이기 쉽다. CSRF 공격은 이 자동 전송 원리를 이용한다. 피해자가 로그인한 상태에서 공격자가 만든 페이지를 열면, 그 페이지의 코드가 대상 사이트로 요청을 보낸다. 브라우저는 평소처럼 쿠키를 요청에 붙인다. 예를 들어 은행 사이트에 로그인한 상태에서 다른 페이지를 열면, 그 페이지가 은행의 이체 요청을 몰래 보낼 수 있다. 이때 사용자는 아무 입력도 하지 않을 수 있으며, 서버는 요청을 정당한 사용자의 요청으로 판단하게 된다.
XSS와 비교하면 공격자가 노리는 신뢰의 방향이 정반대다. 사이트 간 스크립팅은 사용자가 특정 웹사이트를 믿는 점을 노리고, CSRF는 웹사이트가 사용자 브라우저를 믿는 상태를 노린다. 두 공격 모두 이름에 ‘사이트 간’이라는 말이 들어가지만, 공격 대상이 되는 신뢰의 주체는 다르다.
| 구분 | 크로스 사이트 스크립팅(XSS) | CSRF |
|---|---|---|
| 노리는 신뢰 | 사용자가 웹사이트를 신뢰하는 점 | 웹사이트가 사용자 브라우저를 신뢰하는 점 |
| 공격자가 얻는 것 | 사이트에 삽입한 코드의 실행 | 로그인된 사용자의 권한으로 보낸 요청 |
이어지는 내용
- 정의와 명칭
- 응답 특성과 피해 범위
- 방어 수단의 원리
- 자주 헷갈리는 것
- 기출에서는
로그인하면 하루 5페이지까지 무료로 전체를 읽을 수 있습니다.
앱에서 이 절 읽기