CSRF란 무엇인가?..
CSRF - 사이트 간 요청 위조
CSRF : Cross Site Request Forgery
웹 어프리케이션 취약점 중 하나로 사용자가 자신의 의지와 무관하게 공격자가 의도한 행동을 하여 특정 웹페이지를 보안에 취약하게 한다던가 수정, 삭제 작업을 하게 만드는 공격방법을 말한다. 공격의 난이도가 높지 않아 널리 사용되는 방법 중 하나이다.
MEMO : XSS와 SQL injection은 무엇일까?
CSRF는 특정 사이트가 사용자의 브라우저를 신뢰한다는 점을 공격하는 것이다. CSRF는 악성코드가 서버에서 발생하는 것이다.
해커는 CSFR를 통해, 희생자의 권한을 도용하여 중요 기능을 실행시키는 것이 가능하다. 예를 들어, 페이스북에 희생자의 계정으로 광고성 글을 올리는 것이 가능해진다.
공격 과정
해커는 우선 공격할 사이트를 분석한다.
예들 들어, 나무위키의 경우 토론은 ‘namu.wiki/topic/’이라고 시작하고, 뒤에 숫자가 붙는 형식인데 이 뒤에 숫자에 패턴이 있다. 그러면 이 패턴을 이용하여 일반적인 방법으로 접근할 수 없는 페이지를 오픈한다던지, 개발에 사용되고 실제로 사용하지 않는 샘플페이지를 찾아낸다는 방법이 가능하다.
또한 독자적 개발이 아닌 외부에서 이미 개발된 웹 어플리케이션을 사서 조금 수정한 것이라면, 공격자는 해당 웹 어플리케이션을 구매하여 개인 서버에 설치한다. 그 다음에 공격 가능 패턴을 분석한다.
주로 공격자들이 찾는 것은 사용자 패스워드 변경페이지나 타시스템과 로그인 연동 주소 패턴같은 인증과 관련된 취약점을 찾는다. 그 다음에 여기서 나온 취약점으로 공개된 게시판이나 메일을 이용하여 사용자가 해당 링크를 열게되면 공격이 완료된다.
예시
- 옥션 관리자 중 한명이 관리권한을 가지고 회사내에서 작업을 하던 중 메일을 조회한다.(로그인이 이미 되어있고 관리자로서 유효한 쿠키를 가지고 있음)
- 해커는 위와 같이 태그가 들어간 코드가 담긴 이메일을 보낸다. 관리자는 이미지 크기가 0이므로 전혀 알 수가 없다.
- 피해자가 이메일을 열어볼 때, 이미지 파일을 받아오기 위해 URL이 열린다.
- 해커가 원하는 대로 관리자의 계정이 id, pw모두 admin계정으로 변경된다.
방어 방법
- Referrer 검증
request header에 있는 요청을 한 페이지의 정보가 담긴 referrer 속성을 검증하여 차단한다.
일반적으로 이 방법만으로 대부분 방어가 가능할 수 있다.
HTTP Referrer : 웹 브라우저로 서핑을 할 때,하이퍼링크를 통해서 각각의 사이토로 방문시 남는 흔적이라고 할 수 있다. 예를 들어, A사이트에서 B사이트로 이동하는 하이퍼링크를 통해 B사이트로 이동했을 경우, B사이트의 관리자는 전송된 리퍼러를 보고 방문객이 A사이트를 통해서 자신의 사이트에 방문한 지 알 수 있다. 옥션이 아닌 개인 이메일에서 요청이 들어오는 것처럼, 같은 도메인 상에서 요청이 들어오지 않는다면 차단하도록 하는 것이다.
- CSRF Token 사용
랜덤한 수를 사용자의 세션에 저장하여 사용자의 모든 요청 Request에 대하여 서버단에서 검증하는 방법이다.
서버는 세션에 저장된 token값과 요청 파라미터에 전달되는 토큰 값이 일치하는지 검증함으로 방어할 수 있다.
-
CAPTCHA 사용
CAOTCHA : HIP 기술의 일종으로, 어떤 사용자가 실제 사람인지 컴퓨터인지 구별하기 위해 사용되는 방법이다.
요즘은 거의 모든 웹사이트에서 캡차를 이용하는 것 같은데, 캡차 이미지상의 숫자/문자가 아니라면 해당 요청을 거부하는 것이다. -
Double Submit Cookie 검증 Double Sutmit Cookie 검증은 Security Token 검증의 한 종류로, 세션을 사용할 수 없는 환경에서 사용할 수 있는 방법이다. 웹브라우저의 Same Origin 정책으로 인해, 자바스크립트에서 타 도메인의 쿠키값을 확인/수정하지 못한다는 것을 이용한 방어 방법이다. 스크립트 단에서 요청 시 난수값을 생성하여 쿠키에 저장 하고, 동일한 난수값을 요청 파라미터(혹은 헤더) 에도 저장하여 서버로 전송한다.
서버단에서는 쿠키의 토큰값과 파라미터의 토큰 값이 일치하는 지 검사하면 된다.
CSRF 토큰의 경우, 세션에서 값을 비교함으로 토큰값을 저장해야 하지만, Double submit Cookie 검증은 토큰값을 저장할 필요가 없고 쿠키와 파라미터를 비교하여 개발 공수가 적다.Same Origin 정책 : 두 URL의 프로토콜, 포트, 호스트가 같아야 각 페에지의 출처가 동일한 것이고, 서로 다른 출처에서 가져온 문서나 스크립트라면 각 리소스와 상호작용하는 것을 제한한다.
즉, 피싱사이트와 어떤 서비스는 도메인이 달라, 해당 서비스 쿠키에 값을 저장하지 못하므로 가능한 방식이다.
- GET/POST 함수 구분 사용
이 외에도 form를 입력할 시 GET방식을 지양하고 POST방식을 쓰도록 하는 것은 기본이라고 할 수 있다.
참고자료
Cross Site Request Forgery? : Jinko the Snokl
CSRF란? : brownbears
CSRF 공격이란? 그리고 CSRF 방어방법 : 덕’s IT Study