관계없는 명시적 역할 액세스 제어 조건 검토[Security Center 1.5의 새로운 기능]Review extraneneous explicate role access control conditions [New in Security Center 1.5]

  • 릴리스 버전: Washingtondc
  • 업데이트 날짜 2024년 02월 14일
  • 읽기6분
  • Explicit Roles 플러그인은 모든 사용자에게 내부 자원에 액세스할 수 있는 snc_internal 역할 또는 외부 자원에 액세스할 수 있는 snc_external 역할을 부여하도록 의무화하는 것이 좋습니다.

    이 플러그인을 설치하면 기존의 모든 사용자에게 snc_internal 역할이 할당되고 기존 접근 제어 목록(ACL)이 역할 조건으로 채워집니다. 자동화 논리 또는 인스턴스 관리자의 개입으로 인해 snc_internal 또는 snc_external 역할이 이미 더 엄격한 역할 요구 사항을 포함하는 ACL에 잘못 추가될 수 있습니다. ACL에 매핑된 역할을 포함하는 모든 사용자에 대해 ACL 역할 평가를 통과하므로 snc_internal 또는 snc_external 추가하는 것은 ACL의 의도된 목적에 비해 너무 광범위할 수 있습니다. 권한이 낮은 사용자에게 ACL을 통해 액세스 권한이 부여되는 경우 데이터 유출이 발생할 수 있습니다.

    예를 들어 snc_internal 역할과 관리자 역할을 모두 테이블 내의 동일한 ACL에 매핑할 필요가 없습니다. ACL은 관리자에게 액세스 권한을 부여하기 위한 것이며, 이 경우 snc_internal 역할은 실수입니다. 또는 ACL은 모든 snc_internal 사용자에게 액세스 권한을 부여하기 위한 것이므로 관리자 역할이 필요하지 않습니다. Explicit Roles 플러그인이 설치되면 다른 역할에 대한 조건도 포함하면서 snc_internal 또는 snc_external에 대한 역할 조건을 포함하는 ACL을 검토합니다. 역할이 특정 사용 사례에 대해 작동할 수 있는 경우 발견 사항을 주기적으로 검토해야 합니다.

    다음 백그라운드 스크립트를 실행하여 이미 다른 역할에 매핑된 ACL에 snc_internal되거나 snc_external 추가된 ACL 목록을 캡처합니다. ACL이 snc_internal 또는 snc_external 역할을 가진 사용자에게 액세스 권한을 부여해야 하는지 여부를 확인합니다. 권한이 낮은 사용자가 ACL을 통해 액세스할 수 없는 경우 snc_internal 또는 snc_external 역할을 제거합니다. 이러한 역할을 제거하면 사용자에게 남은 역할이 없는 경우 ACL로 보호되는 자원에 액세스하지 못할 수 있습니다.

    var ExplicitRolesEnabled = new GlidePluginManager().isActive('com.glide.explicit_roles');
    
    // Only check if Explicit Roles is enabled
    if (ExplicitRolesEnabled) {
    
        var counterBadInternalACLs = 0;
        var counterBadExternalACLs = 0;
        var sysIdSncInternal = '7fcaa702933002009c8579b4f47ffbde';
        var sysIdSncExternal = '940ba702933002009c8579b4f47ffbe2';
        var api = new SNC.RoleManagementAPI();
    
        var gr = new GlideRecord('sys_security_acl_role');
        gr.addQuery('sys_user_role', sysIdSncInternal);
        gr.query();
        while (gr.next()) {
            var aclSysId = gr.sys_security_acl;
            var gr2 = new GlideRecord('sys_security_acl_role');
            gr2.addQuery('sys_security_acl', aclSysId);
            gr2.addQuery('sys_user_role', '!=', sysIdSncInternal);
            gr2.addQuery('sys_user_role', '!=', sysIdSncExternal);
            gr2.query();
    
            while (gr2.next()) {
                // exclude the roles if that contain snc_external
                var role = gr2.sys_user_role;
                var containedRoles = api.findAllContainedRolesForRole(role);
                if (containedRoles.contains(sysIdSncExternal))
                    continue;
                gs.print('Found an ACL with snc_internal and yet another role=' + role + '; ACL sys_id=' + aclSysId);
                counterBadInternalACLs++;
                break;
            }
        }
    
        var gr = new GlideRecord('sys_security_acl_role');
        gr.addQuery('sys_user_role', sysIdSncExternal);
        gr.query();
        while (gr.next()) {
            var aclSysId = gr.sys_security_acl;
            var gr2 = new GlideRecord('sys_security_acl_role');
            gr2.addQuery('sys_security_acl', aclSysId);
            gr2.addQuery('sys_user_role', '!=', sysIdSncInternal);
            gr2.addQuery('sys_user_role', '!=', sysIdSncExternal);
            gr2.query();
    
            while (gr2.next()) {
                // exclude the roles if that contain snc_internal
                var role = gr2.sys_user_role;
                var containedRoles = api.findAllContainedRolesForRole(role);
                if (containedRoles.contains(sysIdSncInternal))
                    continue;
                gs.print('Found an ACL with snc_external and yet another role=' + role + '; ACL sys_id=' + aclSysId);
                counterBadExternalACLs++;
                break;
            }
        }
    
        gs.print('Total number of ACLs with snc_internal and other roles: ' + counterBadInternalACLs);
        gs.print('Total number of ACLs with snc_external and other roles: ' + counterBadExternalACLs);
    }

    추가 정보

    속성 설명
    구성 이름 com.glide.explicit_roles, sys_security_aclsys_security_acl_role
    구성 유형 시스템 속성(/sys_properties_list.do)
    데이터 유형 데이터 유형 없음
    권장 값 권장 값 없음
    기본값 기본값 없음
    범주 접근 통제
    보안 위험
    • 심각도 점수: 4.2
    • CVSS 점수: 중간
    • 보안 위험 상세 정보: 자동화 또는 인스턴스 관리자의 개입으로 인해 src_internal 또는 src_external 역할이 이미 더 엄격한 역할 요구 사항을 포함하는 ACL에 추가될 수 있습니다. ACL에 매핑된 역할을 포함하는 모든 사용자에 대해 ACL 역할 평가를 통과하므로 두 역할 중 하나를 추가하면 ACL을 사용하기에는 너무 광범위하며 권한이 낮은 사용자에게 ACL을 통해 액세스 권한이 부여되면 데이터 유출이 발생할 수 있습니다.
    참조 명시적 역할