2017. 5. 18.

[WEB] 세션 고정 취약점

취약점 개요
: 사용자 로그인 시 항상 일정하게 고정된 세션 ID 값을 사용하는 취약점으로 로그인 시 세션마다 새로운 세션ID가 발행되지 않는다면 세션 ID를 도용한 비인가자의 접근 및 권한 우회가 가능하므로 세션 ID의 타임아웃 기능을 설정하고 세션 ID의 고정 사용을 방지하도록 설정함.


판단기준
: 양호 - 로그인별 세션 ID가 발행되는 경우
: 취약 - 로그인 세션 ID가 고정 사용되는 경우

보안설정방법
: 인증 기능에서 사용자가 인증을 받은 후에 새로운 세션 ID를 할당 받도록 발행함

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

?>

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

참고 URL
- http://reiphiel.tistory.com/entry/session-fixation-vulnerability




Popular Posts

Recent Posts

Powered by Blogger.