본문 바로가기

정보보안/애플리케이션 보안

[웹 애플리케이션 취약점] 불충분한 세션 관리 취약점

불충분한 세션 관리 취약점

① 개념

  • 웹 애플리케이션에서 사용자가 로그인할 때 매번 동일한 세션 ID를 발급하거나 세션 타임아웃을 너무 길게 설정하였을 경우 공격자가 사용자의 세션을 재사용하여 해당 사용자의 권한을 탈취할 수 있는 취약점

 

② 공격과정 

  1. admin 계정으로 로그인 및 세션 쿠키 정보 획득
    • 웹 프록시를 통해 admin 로그인 후, 세션ID(PHPSESSID) 정보 획득
    • (ex.Cookie: PHPSESSID=..특정 패턴이 있는 세션 ID..)
  2. 다른 브라우저에서 탈취한 세션 ID 정보로 로그인
    • HTTP 세션 하이재킹 : 탈취한 세션 ID를 이용하여 다른 브라우저에서 admin 계정 세션을 가로채기를 성공하는 것.

 

③ 취약점 판단 기준

  • 세션 ID를 분석 및 변조하여 로그인 시도 시 로그인에 성공할 경우 해당 취약점이 존재하는 것으로 판단

 

④ 대응책

  • 세션ID는 로그인 시마다 추측할 수 없는 랜덤한 값으로 새롭게 발급한다.
  • 세션 타임아웃 설정을 통해 일정 시간(일반적으로 10-30분 사이) 요청이 없으면 자동 로그아웃 되도록 구현한다.
    • (PHP 설정) php.ini를 통한 적절한 세션 타임아웃 설정 
      #php.ini 설정파일
      ...
      session.gc_maxlifetime = 600 # 10분
      session.gc_maxlifetime을 통해 초 단위 세션 유지 시간을 지정하여 해당 시간동안 아무런 요청이 없으면 세션을 자동으로 삭제한다.
  • 부적절한 세션 쿠키 전송 방식을 필터링한다.
    • httponly 속성과 secure 속성을 통한 보안
      #php.ini 설정파일
      ...
      session.cookie_httponly = 1 # or True
      seesion.cookie_secure = 1 # or True
      (httponly 속성이 붙은 쿠키) HTTP/HTTPS를 통해 전송할 때만 사용되며, 클라이언트 스크립트를 통한 참조가 불가능하게 만드는 속성. 웹서버 응답 헤더의 Set-Cookie(클라이언트에 쿠키 설정을 위한 필드) 헤더 필드를 보면 HttpOnly가 써져있으며,  document.cookie와 같은 스크립트를 통한 참조가 불가능하다.(secure 속성이 붙은 쿠키) HTTPS(SSL/TLS)를 통한 통신일 경우에만 해당 쿠키를 전송할 수 있는 속성. 전송 구간 암호화를 통해 평문 쿠키가 전송 과정에서 노출되는 것을 방지하며, Set-Cookie 필드에 secure 라고 써져있다.