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

 

 

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