[웹 취약점 진단/모의해킹/해킹] 불충분한 세션 만료

목차

     

     

    SC - 불충분한 세션 만료

     

    ■ 점검내용

     

    세션의 만료 기간 설정 여부 점검

     

    ■ 점검목적

     

    세션 타임아웃 기능을 구현하여 공격자가 만료되지 않은 세션 활용을 방지하기 위함

     

    ■ 보안위협

     

    세션의 만료 기간을 정하지 않거나, 만료기한을 너무 길게 설정된 경우 악의적인 사용자가 만료되지 않은 세션을 활용하여 불법적인 접근이 가능할 수 있음

     

    ■ 참고

     

    ※ 소스코드 및 취약점 점검 필요

     

     

    점검대상 및 판단기준

     

    ■ 대상 : 웹 애플리케이션 소스코드, 웹 서버

     

    양호

    세션 종료 시간이 설정되어 있는 경우

     

    취약

    세션 종료 시간이 설정되어 있지 않아 세션 재사용이 가능한 경우

     

    ■ 조치방법

     

    세션 종료 시간 설정 또는 자동 로그아웃 기능 구현(세션 종료 시간은 사이트의 특성에 따라 달라질 수 있으므로 사이트의 특성에 맞게 적정 시간 설정)

     

     

    점검 및 조치 방법

     

    ■ 점검방법

    Step 1) 인증 후 정상적으로 세션이 발행된 페이지의 리퀘스트를 취득하여 일정 시간
    (사이트에 따라 다름)이 지난 후에 재전송 시 정상 처리가 되는지 확인

     

     

    ■ 보안설정방법


    * 세션 타임아웃 구현 시 타임아웃 시간은 10분으로 설정할 것을 권고함

     

    ※ 웹 애플리케이션 별 상세 설정
    ∎ ASP
    접속자별로 세션을 생성하여 사용자 정보를 각각 저장할 수 있는 세션 오브젝트로 타임아웃 기능을 구현함

     

    ※ 세션 오브젝트: 페이지 접근을 허가하거나 금지할 때 또는, 사용자별로 정보를 저장할 때 많이 사용하며 접속자의 브라우저에서 쿠키 기능을 지원해야 세션 오브젝트 사용이 가능함


    다음과 같은 설정이 적용될 경우 사용자가 로그아웃 시 세션은 바로 삭제되며, 로그아웃 하지 않고 10분 동안 웹 서버로의 요청이 없으면 세션은 없어지게 됨

    … 중략 …
    // Session의 유지 시간 Setting
    Session.timeout = 10
    … 중략 …
    구분 설명
    Property SessionID 사용자마다 갖게 되는 고유한 세션 값
    Timeout 세션이 유지되는 기간
    Method Abandon 강제로 세션을 소멸시키는 함수
    Event Onstart 각각의 사용자가 처음 방문할 때 발생
    Onend 사용자의 세션이 끝나는 시점에 발생

     

    ∎ JSP

     

    세션 타임아웃 기능을 구현하는 방법은 session.getLastAccessedTime()를 이용하여 세션의 마지막 접근 시간으로부터 일정 시간동안 세션 접근을 하지 않은 경우 자동으로 세션을 종료하도록 함


    세션의 타임아웃은 두 가지 방법으로 설정할 수 있음

     

    Step 1) web.xml 파일에서 <session-config> 태그를 사용하여 타임아웃을 지정하는 방법
    web.xml, Weblogic.xml 중 한 곳에만 설정 (만약, 두 곳 모두 설정 시 우선순위에 의해 web.xml 설정이 적용됨)


    Web.xml : “분” 단위

    <session-config>
    <session-timeout>10</session-timeout>
    </session-config>

     

    Weblogic.xml: “초” 단위

    <session-descriptor>
    <timeout-secs>600</timeout-secs>
    </session-descriptor>
    또는,
    <session-param>
    <param-name>TimeoutSecs</param-name>
    <param-value>600</param-value>
    </session-param>

     

    Step 2) 세션 기본 객체가 제공하는 setMaxInactiveInterval() 메소드 사용
    ※ 주의할 점: web.xml 에서는 타임아웃 시간 단위가 분이지만 메소드에서는 초 단위임

    … 중략 …
    // Session의 유지 시간을 Setting
    String strTime = Param.getPropertyFromXML("SessionPersistenceTime");
    if (strTime == null) {
    session.setMaxInactiveInterval(600);
    } else {
    session.setMaxInactiveInterval((new Integer(strTime)).intValue());
    }
    … 중략 …

     

     

    조치 시 영향 : 일반적인 경우 영향 없음

     

    댓글

    Designed by JB FACTORY