[웹 취약점 진단/모의해킹/해킹] 프로세스 검증 누락

목차

     

     

    PV - 프로세스 검증 누락

     

    ■ 점검내용

     

    인증이 필요한 웹 사이트의 중요(관리자 페이지, 회원변경 페이지 등) 페이지에 대한 접근제어 설정 여부 확인

     

    ■ 점검목적

     

    인증이 필요한 모든 페이지에 대해 유효 세션임을 확인하는 프로세스 및 주요 정보 페이지에 접근 요청자의 권한 검증 로직을 적용하여, 비인가자가 하위 URL 직접 접근, 스크립트 조작 등의 방법으로 중요한 페이지에 접근을 시도하는 것을 차단하기 위함

     

    ■ 보안위협

     

    인증이 필요한 웹 사이트의 중요(관리자 페이지, 회원변경 페이지 등) 페이지에 대한 접근 제어가 미흡할 경우 하위 URL 직접 접근, 스크립트 조작 등의 방법으로 중요한 페이지에 대한 접근이 가능함

     

    ■ 참고

     

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

     

     

    점검대상 및 판단기준

     

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

     

    양호

    인증 후에 접근해야 하는 웹 사이트의 하위 URL을 로그인하지 않고 직접 접근할 때 접근이 불가능한 경우

     

    취약

    웹 사이트의 하위 URL을 로그인하지 않고 직접 접근할 때 접근이 가능한 경우

     

    ■ 조치방법

     

    인증이 필요한 페이지의 경우 페이지별 권한 체크 로직 구현

     

     

    점검 및 조치 방법

     

    ■ 점검방법

     

    Step 1) 업무프로세스 파악


    Step 2) 권한의 종류 및 범위 파악


    Step 3) 페이지의 모든 기능을 수집하여 프로세스 상에 통제된 페이지 접근이 가능한지 확인

     

     

    ■ 보안설정방법


    * 우회될 수 있는 플로우를 차단하여야 하며, 페이지별 권한 매트릭스를 작성하여 페이지에 부여된 권한의 타당성을 체크한 후 권한 매트릭스를 기준으로 전 페이지에서 권한 체크가 이뤄지도록 구현하여야 함


    * 인증이 필요한 모든 페이지에 대해 유효 세션임을 확인하는 프로세스 및 주요 정보 페이지에 접근 요청자의 권한 검증 로직을 적용함


    * 유효 세션의 검증 및 페이지에 대한 접근 권한을 Client Side Script에 의존할 경우 사용자가 임의로 수정할 수 있으므로 Server Side Script로 구현된 프로세스를 사용

     

    ※ 웹 애플리케이션 별 상세 설정
    ∎ ASP
    (예) 인증이 필요한 페이지 소스 코드

    <% - 인증 성공 시 세션값 세팅
    Session(“sessionChk”) = True
    Session(“UserID”) = userID
    Session(“UserGrp”) = userGrp
    Session(“UserIP”) = Request.Servervariables(“REMOTE_ADDR”)
    … 중략 …
    - 사용자 그룹 리턴 함수
    … 중략 …
    Function GetUserGroup(strUserID)
    End function … 중략 …
    - 페이지에 접근 가능한 UserGroup 설정값이 ‘100’ 가정 시
    ChkUserGrp = GetUserGroup(userID)
    //세션 userID값을 통해 DB에 저장된 사용자 그룹 리턴 … 중략 …
    If Session_Check and Session(“UserGrp”) = ChkUserGrp Then
    If Session(“UserGrp”) <> 100 Then
    Response.Write(“권한이 없습니다.”)
    Response.End
    End
    Else
    Response.Redirect “Login.asp”
    Response.End
    End if
    … 중략 … %>

     

    ∎ JSP
    (예) 인증이 필요한 페이지 소스 코드

    <%
    … 중략 …
    PortalSessionManager sessionMgr = (PortalSessionManager)
    session.getAttribute("sessionMgr");
    if (sessionMgr == null || sessionMgr.getUserId() == null) {
    (new FailToAuthenticateCmd()).execute(request,response);
    }
    … 중략 …
    String usrGrp = session.getAttribute("Usrgrp") == null ?
    "" : (String)session.getAttribute("Usrgrp");
    if (!usrGrp.equals("") || !userGrp.equals(Code.getMarket())) {
    // 접근 권한을 인가할 수 없음.
    (new FailToPermissionCmd()).execute(request,response); }
    중략 …
    %>

     

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

     

    댓글

    Designed by JB FACTORY