본문 바로가기

30./31. Web

22. 세션고정(SF) 취약점

22. 세션고정(SF) 취약점


  • 취약점 설명

세션값을 고정하여 명확한 세션 식별자(ID) 값으로 사용자가 로그인하여 정의된 세션 식별자(ID)가 사용 가능하게 되는 취약점


  • 판단기준(조건)

- 로그인(인증절차) 전후로 세션이 변하지 않고 처음 웹 서버에 접속할때 세션을 고정하여 사용한다

- IP가 다른 두개의 PC에서 동일한 세션으로 접근이 가능하다


  • 모의해킹 시나리오
      1. 해커는 웹(Target)서버에 접근하여 정상 세션을 발급받는다.
      2. 해커는 희생자(admin)에게 해커가 받은 정상 세션을 강제로 Set-Cookie하고 웹으로 리다이렉트 하는 스크립트를 메일로 전송한다.
      3. 희생자(admin)는 해커가 보낸 메일을 확인하고 스크립트를 실행한다.
      4. 희생자(admin)는 웹(Target)에 접근할때 해커와 같은 세션으로 접근하게 된다.
      5. 희생자(admin)는 정상적으로 관리자 페이지에 로그인한다.
      6. 관리자 페이지에 로그인(인증절차)을 하여도 세션이 로그인 전후로 변하지 않는다.
      7. 해커와 희생자(admin)는 동일한 세션을 사용하기 때문에 해커는 새로고침(F5)을 할때 관리자 권한을 가져온다.




  • 조치 방안

- 로그인 전후로 세션을 재 발급한다.

PHP

<?php

session_start();

$old_sessionid = session_id();

session_regenerate_id();

$new_sessionid = session_id();


echo "Old Session : $old_sessionid<br />";

echo "New Session : $new_sessionid<br />";


print_r($_SESSION);

?>


ASP


JSP




- IP를 체크하여 멀티세션을 막는다.



※ 참고 자료

http://en.wikipedia.org/wiki/Session_fixation