[웹 취약점 진단/모의해킹/해킹] 프로세스 검증 누락
- 정보보안/Web Hacking
- 2024. 11. 9.
목차
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); } 중략 … %> |
■ 조치 시 영향 : 일반적인 경우 영향 없음