오현섭 2022. 3. 24. 22:36
반응형

Cross Site Request Forgery)

취약점 개요 : 정상적인 요청과 조작된 요청을 서버가 구분하지 못 할 경우 발생하는 취약점으로, 애플리케이션

 이용하는 사용자로 하여금 조작된 요청을 웹 어플리케이션에 전송하도록 유도하여 피해를 발생시킴

공격당한 사용자의 권한을 그대로 사용하므로 사용자의 권한 수준에 따라 그 피해범위가  달라 질 수 있으며

 XSS취약점과 무관하게 공격이 가능하나 XSS취약점과 연계 시 더 공격 가능 범위가 증가

공격자는 요청 게시물 등록하고 희생자가 게시물을 열람해 , 브라우저는 서버로 요청패킷 전송

 조작된 요청에 대한 응답 패킷 전송

 

발생원인 : 사용자의 요청을 서버가 적절한 검증절차 없이 받아들여서 해당 사용자의 권한으로 임의 동작을 그대로 실행

취약점 발생 point : 글 등록, 정보수정 등 사용자가 서버에 일정한 데이터를 요청하는 기능

 그 외 취약한 서버에서 사용자들이 사용 가능한 모든 기능에 잠재적인 위험성 내포

 

CSRF취약점과 XSS취약점 차이

CSRF는 공격대상 서버 XSS 공격대상은 클라이언트

CSRF XSS
웹 서버가 클라이언트를 신용하여 발생
파라미터 조작으로 공격
사용자가 해당 사이트의 특정 기능에 대한 조작된 행위 유발
XSS취약점 있으면 공격 범위가 늘어남
클라이언트가 웹 서버를 신용하여 발생
파라미터값 조작이외에도 가능
사용자의 쿠키정보 탈취, 악성사이트로 이동

CSRF 

타 사용자 권한 도용

실 서비스 중인 웹에서 발견된 CSRF취약점 공격자가 의도한 게시판 등록예시

<body onload="document.attack_form.submit();">
<form name="attack_form" action="http://175.198.224.248:8888/gm/board_write_ok.php" method="POST">
  <input type="hidden" name="boardIndex" value="8">
  <input type="hidden" name="name" value="kbhwanggg">
  <input type="hidden" name="email" value="test@test.com">
  <input type="hidden" name="title" value="test">
  <input type="hidden" name="pwd" value="test1234">   
  <input type="hidden" name="bHtml" value="2">
  <input type="hidden" name="HtmlContent" value="test">
<input type="submit">
</form>
</body>

 

실 서비스 중인 웹에서 발견된 CSRF취약점

타 사용자 비밀번호 변경

 

보안대책 /우회

GET과 POST 구분 : GET방식보다 POST방식으로 데이터를 전송

 서버측에서 GET과 POST를 구분하여 받음

Submitt button 등을 이용하여 관리자 요청검증 : 관리자가 보내는 요청인지 검증하는 수단

XSS 취약점 제거 : 조닥된 요청 생성에 사용되는 ?,&,<,> 특수문자 필터링

보안토큰 사용 : 중요한 기능 동작 시 발급 받은 보안토큰을 포함시켜 전송하도록 하여

 값이 일치하지 않거나 없을 경우 동작시키지 않음

2차 인증- 가장안전한 보안 대책 : 중요한 기능의 경우 2차,3차의 재인증을 강제로 수행하도록 구현

 공인인증서, OTP등 차례로 확인하는 재인증 기능

 

CSRF GET/POST

-HTTP Method에 대한 검증을 하지 않을 경우 GET/POST 메소드는 서버에서 동일한 요청처리

-GET메소드 허용시 공격자는 URL로 CSRF공격을 하여 관리자가 서버로 요청을 보내도록 유도

-따라서 POST Method만 가능하도록 로직을 추가하면 URL로 요청하는 CSRF공격을 막음

 

Submit Button

-사용자 권한 변경 요청이 관리자 권한의 요청인지 확인하는 검증 로직을 구현