본문 바로가기

Information Security/Hacking

불충분한 세션 관리 취약점 (Insufficient Session Management Vulnerability)

반응형

Cookie

* 불충분한 세션 관리 취약점 : 웹 상에서 사용자가 로그인을 할 시, 매번 동일 세션ID(일정 패턴 존재) 발급 또는, 세션 타임아웃을 너무 길게 설정한 경우, 공격자에 의해 세션이 탈취될 수 있는 취약점

 

 

 

* 공격 예시

ex) 웹 프록시를 통해 사용자가 로그인 시, 발생하는 Cookie 정보를 획득(HTTP Session Hijacking), 탈취한 세션ID로 로그인 하여, 해당 사용자의 권한으로 악성 행위 가능.

로그인 및 세션 쿠키 정보 획득
Cooxie 툴을 이용한 Cookie정보 삽입

 

 

 

* 취약점 판단 기준 : 세션 ID 분석 및 변조하여 로그인에 성공할 경우, 취약한 것으로 판단

점검 위치 행위 취약 반응
로그인 후 세션 ID 세션 값을 변조하여, 로그인 시도 다중 로그인 성공
로그인 후 세션 ID 로그인과 로그아웃을 반복하여 수집된 세션 ID의 패턴 분석 타 사용자 로그인 성공

 

 

 

* 대응책

1) Session ID 추측이 불가능 하도록, 매번 랜덤한 값으로 새롭게 발급하는 코드로 구성

2) Session Timeout 설정으로 일정시간(권장 10~30분 사이) 요청이 없을 경우, 자동 로그아웃 되도록 구현

3) httponly 및 secure 속성 활성화

- php.ini에서 session.cookie_httponly = 1 (또는 True) 설정으로, 클라이언트 스크립트(JavaScript, VisualBasic)을 통한 참조가 불가능 하도록 설정 (JavaScript를 통한 XSS 방지 등...)

- php.ini에서 session.cookie_secure = 1 (또는 True) 설정으로, HTTPS(SSL/TLS) 통신일 경우에만 해당 쿠키 전송하도록 설정

개발자 도구 상, 응답 헤더 확인 시, 설정 사항에 대한 확인 가능

4) 중요 정보 페이지는 캐쉬를 사용하지 못하도록 설정

- 기반 시스템 별(HTML, ASP etc..) no-cache 설정을 통해, 페이지 요청 시마다 매번 서버로부터 새롭게 전송받아 중요 내용에 대한 노출을 방지

// HTML인 경우 (head 부분에 포함)
<META http-equiv="Expires" content="-1">
<META http-equiv="Pragma" content="no-cache">
<META http-equiv="Cache-Control" content="No-Cache">


// ASP인 경우  
<%  
Response.Expires = 0  
Response.AddHeader "Pragma","no-cache"  
Response.AddHeader "Cache-Control","no-cache,must-revalidate"  
%>  


// JSP인 경우  
<%  
response.setHeader("Cache-Control","no-store");  
response.setHeader("Pragma","no-cache");  
response.setDateHeader("Expires",0);  
if (request.getProtocol().equals("HTTP/1.1"))
        response.setHeader("Cache-Control", "no-cache");
%>  


// PHP인 경우  
<?  
header("Pragma: no-cache");  
header("Cache-Control: no-cache,must-revalidate");  
?>
반응형