CSRF?
- cross site request forgery(크로스 사이트 요청 위조 공격)
- 인증된 사용자가 웹 애플리케이션에 특정 요청을 보내도록 유도하는 공격 행위
- 생성된 요청이 사용자의 동의를 받았는지 확인할 수 없는 웹 애플리케이션의 CSRF 취약점을 이용.
- 공격자의 요청이 사용자의 요청인 것처럼 속이는 공격 방식
- 사용자가 인증한 세션에서 웹 애플리케이션이 정상적인 요청과 비정상적인 요청을 구분하지 못하는 점을 악용.
- 웹 애플리케이션이 사용자의 요청이 실제 사용자가 전송한 것인지 확인하지 않는 경우에 자주 발생
공격 방식?
- 데이터의 값을 변경하는 요청을 대상으로 한다. ex) 제품 구입, 계정 설정, 기록 삭제, 비밀번호 변경, 문자 전송 ...
- 이메일이나 웹사이트에 (자금 송금, 로그인 정보 변경 ...)요청이 삽입된 하이퍼링크를 심어 놓습니다. 사용자가 해당 하이퍼링크를 클릭하면 요청이 자동으로 전송
- 관리자 계정이 크로스 사이트 요청 위조 공격에 당하는 경우에는 공격자가 전체 서버 접근 권한을 탈취해 웹 애플리케이션과 API 등 서비스 전체를 마음대로 통제하게 될 위험
- 목적 : 크로스 사이트 요청 위조 공격은 사용자의 정보 탈취보다는 특정 작업을 무단으로 진행하기 위함. 그러나, 사용자의 정보가 유출되지 않는 다는 의미 X. 권한을 탈취당하게 되면 개인 정보가 그대로 노출되는 것은 다른 사이버 공격과 마찬가지이기 때문.
XSS vs CSRF?
- 공통점 : 사용자의 브라우저를 대상으로 한다.
- XSS(크로스 사이트 스크립팅):
1. 인증된 세션 없이도 공격을 진행할 수 있다.
- 사용자에서 스크립트가 실행
- 요청 위조의 목적: 사용자 PC에서 스크립트를 실행해 사용자의 정보를 탈취
- CSRF:
1. 사용자의 인증된 세션을 악용하는 공격 방식.
2. 서버에서 스크립트가 실행
- 요청 위조의 목적: 사용자 몰래 송금과 제품 구입 등 특정 행위를 수행하는 것
CSRF 예시?
ex) 공격자가 사용자의 자금을 탈취하려는 상황을 생각
1. 공격자가 특정 은행의 계좌에서 공격자의 계좌로 천만 원을 송금하라는 요청을 위조합니다.
2. 위조한 요청은 하이퍼링크에 삽입해 이메일로 전송하거나 웹사이트 자체에 삽입합니다.
3. 사용자가 공격자가 생성한 이메일 하이퍼링크나 웹사이트 링크를 클릭하면 은행에 천만 원을 송금하라는 요청이 전송됩니다.
4. 요청을 받은 은행 서버는 사용자의 요청대로 송금을 진행합니다.
CSRF 방지 방법?
- 웹 애플리케이션들은 크로스 사이트 요청 위조 공격을 방지하기 위해 CSRF 토큰을 통해 요청이 사용자가 전송한 것이 맞는지 확인하거나 재인증을 요구하는 등의 조치
- 개인 사용자 스스로 보안을 확보
1. 사용하지 않는 웹 애플리케이션 로그아웃하기
2. 로그인 정보 안전하게 보관하기
3. 브라우저에 비밀번호 저장하지 않기
4. 여러 웹사이트 동시에 사용하지 않기
5. VPN 사용하기