세션 통제

2020-07-10

해당 Post는 세션 통제에 대해서 정리한 파일입니다.


1. 세션 통제의 개요

세션(session)은? 컴퓨터 과학에서, 특히 네트워크 분야에서 반영구적이고
상호작용적인 정보 교환을 전제하는 둘 이상의 통신 장치나 컴퓨터와 사용자 간의 대화나
송수신 연결상태를 의미하는 보안적인 다이얼로그(dialogue) 및 시간대를 가리킨다.

간단히 말하자면 세션은 서버와 클라이언트의 연결이라고 생각할 수 있습니다.

여기서 세션 통제는 세션의 연결과 연결로 인해 발생하는 정보를 관리하는 것 입니다.

  • 소프트웨어 개발 과정 중 요구사항 분석 및 설게 단계에서 진단 해야 하는 보안 점검 내용입니다.
  • 세션 통제의 보안 약점에는 불충분한 세션 관리, 잘못된 세션에 의한 정보노출이 있습니다.

2. 불충분한 세션 관리

일정한 규칙이 존재하는 세션ID가 발급되거나 타임아웃이 너무 길게 설정되어 있는 경우 발생할 수 있는 보안 약점입니다.

세션ID란? 서버가 클라이언트들을 구분하기 위해 부여하는 Key

  • 세션 관리가 충분하지 않으면 침입자는 세션 하이재킹과 같은 공격을 통해 획득한 세션ID로 인가되지 않은 시스템의 기능을 이용하거나 중요 정보에 접근할 수 있습니다.

    세션 하이재킹이란? 서버에 접속하고 있는 클라이언트들의 세션 정보를 가로채는 공격 기법

3. 잘못된 세션에 의한 정보 노출

잘못된 세션에 의한 정보 노출은 다중 스레드 환경에서 멤버변수에 정보를 저장할 때 발생하는 보안 약점입니다.

  • 싱글톤 패턴에서 발생하는 레이스컨디션으로 인해 동기화 오류가 발생하거나, 멤버 변수의 정보가 노출될 수 있습니다.
  • 멤버 변수보다 지역변수를 활용하여 변수의 범위를 제한함으로써 방지할 수 있습니다.

레이스 컨디션이란? 두개 이상의 프로세스가 공용 자원을 획득하기 위해 경쟁하고 있는 상태

4. 세션 설계시 고려 사항

  • 시스템의 모든 페이지에서 로그아웃이 가능하도록 UI를 구성합니다.
  • 로그아웃 요청 시 할당된 세션이 완전히 제거되도록 합니다.
  • 세션 타임아웃은 중요도가 높으면 2~5분, 낮으면 15~30분으로 설정합니다.
  • 이전 세션이 종료되지 않으면 새 세션이 생성되지 못하도록 설계합니다.

5. 세션ID의 관리 방법

  • 안전한 서버에서 최소 128비트의 길이로 생성
  • 예측이 불가능하도록 안전한 난수 알고리즘 적용
  • 노출되지 않도록 URL Rewrite 기능을 사용하지 않는 방향으로 설계
  • 로그인 시 로그인 전의 세션ID를 삭제하고 재할당
  • 장기간 접속하고 있는 세션ID는 주기적으로 재할당 되도록 설계