CSRF

오준상·2020년 10월 19일
0

보안

목록 보기
1/2
post-thumbnail

서론

이 글은 웹 개발 1년차가 쓴 뉴비가 쓴 글이므로, 오류가 있을 수 있습니다.
오류가 있거나 고칠 부분이 있다면 댓글로 알려주세요.

학생 보안챙겨 ^^

웹 개발을 하다보면 보안에 관심을 가지게 되는 경우가 있다. 요번에도 학교에서
중규모(?) 프로젝트를 하던 도중에 CSRF라는 것으로 해킹을 한다는 것을 듣게 되었다.
그래서 이 웹사이트에는 csrf를 처리해 보는것은 어떨까 해서 공부하게 되었다.

what is csrf

개인적인 해석으로 csrf를 말하자면

서버 api에서 보안 취약점을 찾은 후에, 사용자가 의지와는 무관하게 서버 요청을 보내서 정보를 수정, 삭제하는 해킹기법

위키토피아에서는 이렇게 말한다

사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게 하는 공격을 말한다.

솔직히 위키에 있는 정의가 제일 깔끔하다고 생각한다.

공격 과정

https://www.naver.com 를 예시로 들겠다. cookie에 access_token이 있고, 비밀번호를 바꾸는 서버 주소가 https://www.naver.com/change?password="" 라면 사용자가 메일을 받았는데 메일 내부에
<img src="https://www.naver.com/change?password="">과 같은 것들이 있으면 cookie에 있는 token이 가면서 유저가 보낸것 이라고 인식하여, password가 바뀐다.

방어 방법

  1. Referrer 확인하기
    서버측에서 어디서 요청을 보냈는지 domain을 확인하여, 검증하는 방법입니다.
    99%의 csrf를 막을 순 있지만 xss 취약점이 웹에 존재할 경우에 무용지물입니다.
  2. Security Token 사용하기
    get 요청을 보낼 때 마다 서버에서 랜덤한 값의 token을 넘겨줍니다. 그리고 get 이외의 요청에는 token을 서버로 보냅니다. 이렇게 할 경우 get 요청을 무조건 1번 이상 보내야 하고, token 위조가 불가능 하기 때문에 csrf를 막을 수 있습니다. 하지만 xss 취약점이 있으면 무용지물이 됩니다.

출처

https://brownbears.tistory.com/251

https://ko.wikipedia.org/wiki/%EC%82%AC%EC%9D%B4%ED%8A%B8_%EA%B0%84_%EC%9A%94%EC%B2%AD_%EC%9C%84%EC%A1%B0

https://itstory.tk/entry/CSRF-%EA%B3%B5%EA%B2%A9%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-CSRF-%EB%B0%A9%EC%96%B4-%EB%B0%A9%EB%B2%95

profile
만들고싶은걸만듭니다

0개의 댓글