주요정보통신기반기설 기술적 취약점 분석 평가 방법 상세가이드/WEB 진단

21. 프로세스 검증 누락 WEB [PV] - 주요정보통신기반시설 기술적 취약점 분석 평가 방법 상세 가이드(2021)

재민스 2021. 11. 10. 10:46

가. 취약점 개요

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

    목적 : 인증이 필요한 모든 페이지에 대해 유효 세션임을 확인하는 프로세스 및 주요 정보 페이지에 접근 요청자의 권한 검증 로직을 적용하여, 비인가자가 하위 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); }
중략
   %>

  

라. 조치시 영향

    일반적으로 영향 없음