10. 프로세스 검증 누락

[프로세스 검증 누락]

O 중요정보 및 민감정보가 포함된 페이지에 대한 인증 절차 및 권한 검증, 접근 통제 미흡 등 웹 어플리케이션의 정상적인 프로세스를 악의적인 사용자가 강제로 우회하여 악의적인 행위를 할 수 있는 취약점


O 근거 자료

  ☞ 주요정보통신기반시설 기술적 취약점 분석 평가 상세 가이드(p.704)

  ☞ OWASP TOP10 2021


O 판단 기준

양호
권한이 없거나 인증 후 접근 가능한 페이지 등에 인증 절차를 우회해 접근 또는 데이터 열람 및 변조 등이 불가능한 경우
취약
권한이 없거나 인증 후 접근 가능한 페이지 등에 인증 절차를 우회해 접근 또는 데이터 열람 및 변조 등이 가능한 경우


O 점검 방법

- 인증이 필요한 페이지에 대해 충분한 검증 절차의 존재 여부 점검


O 조치 방법

- 우회될 수 있는 플로우 차단

- 페이지별 권한 매트릭스 작성 후 페이지에 부여된 권한 타당성 체크

인증이 필요한 모든 페이지에 대해 유효 세션 확인 프로세스 적용

- 중요 정보(회원정보 변경 등) 페이지와 같은 중요 정보를 표시하는 페이지의 경우 본인 여부 재인증 로직 구현

- 유효 세션 검증 및 페이지에 대한 접근권한은 클라이언트 사이드 스크립트가 아닌 서버 사이드 스크립트를 통해 인증 및 필터링 수행

- 스트리밍 서비스를 제공하는 경우 다음과 같은 보안 조치 적용

: M3U8 파일 및 미디어 콘텐츠에 대한 접근 제어 적용

: TS 파일 암호화

:  M3U8 플레이 리스트 생성 시 암호화된 TS 파일 사용


O 시큐어 코딩(Secure Coding) 예시 

# ASP ▶
<% 
    // 인증 성공 시 세션값 세팅
    Session("sessionChk") = True
    Session("UserID") = userID
    Session("UserGrp") = userGrp
    Session("UserIP") = Request.Servervariables("REMOTE_ADDR")

    ··· 중략 ···

    // 사용자 그룹 리턴 함수
    
    ··· 중략 ···
    
    Fuction 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);  
    }

    ··· 중략 ··· 

%>


# M3U8 플레이 리스트 ▶
// (1)
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD     
#EXT-X-KEY:METHOD=AES-128,URI="https://A_Company.com/key/123456789"
#EXTINF:10.008778,
sq00.ts
#EXTINF:10.008778,
sq01.ts
#EXTINF:9.985556,
sq02.ts
#EXTINF:10.008778,
sq03.ts

··· 중략 ··· 

#EXT-X-ENDLIST

// (2)
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="https://B_Company.com/key/[KEY-Value]/0",IV=0x0000 
#EXTINF:10.008778,
sq00.ts
#EXT-X-KEY:METHOD=AES-128,URI="https://B_Company.com/key/[KEY-Value]/1",IV=0x0001
#EXTINF:10.008778,
sq01.ts
#EXT-X-KEY:METHOD=AES-128,URI="https://B_Company.com/key/[KEY-Value]/2",IV=0x0002
#EXTINF:8.333333,
sq02.ts
#EXT-X-KEY:METHOD=AES-128,URI="https://B_Company.com/key/[KEY-Value]/3",IV=0x0003
#EXTINF:10.008778,
sq03.ts

··· 중략 ···

#EXT-X-END



[불충분한 인가]

O 소스코드 내 노출되거나 유추하기 쉬운 URL, 파일 경로 등의 사용 및 접근 통제 미흡으로 인가되지 않은 관리자 페이지, 중요 페이지, 민감 데이터, 기능 등에 접근 가능한 취약점


O 근거 자료

개인정보의 안전성 확보조치 기준 제6조(접근통제)

☞ 주요정보통신기반시설 기술적 취약점 분석 평가 상세 가이드(p.696)

OWASP TOP10 2021


O 판단 기준

양호
유추하기 쉬운 URL, 또는 파라미터 값 변조 등을 통해 관리자 페이지, 중요페이지 등 비인가 페이지 및 기능에 접근이 불가능한 경우
취약
유추하기 쉬운 URL, 또는 파라미터 값 변조 등을 통해 관리자 페이지, 중요페이지 등 비인가 페이지 및 기능에 접근이 가능한 경우


O 점검 방법

- admin, master, administrator, root 등을 입력하여 관리자 페이지 접근 시도

- 관리자 전용 포트(8000, 8888 등)로 접속 시도

- 소스코드 내 노출되거나 주석처리 되어 있는 페이지나 파일경로 또는 기능(버튼, 함수 등) 확인 후 직접 접근 및 주석해제 후 활용 시도

- URL 파라미터 값을 변조해 비인가 페이지에 접근 시도


O 조치 방법

- 관리자 페이지는 유추하기 어려운 주소로 변경

- 특정 사용자만 접근 가능하도록 IP주소 제한 등 접근제어 실시

- 중요페이지 각각에 대해 접근 권한 검증을 위한 세션 관리 구현

- 소스코드 내 주석 등으로 불필요한 URL 및 기타 정보 노출 제한

- URL 변경이 어려운 경우 HTTP header내 추가 식별값(Referer Value 등) 추가 및 검증