제로 트러스트 신호

Android는 관리자가 기기의 보안 상태를 확인하는 데 사용할 수 있는 다양한 기기 신호를 제공합니다. 제로 트러스트 보안 모델에서 이러한 신호는 기기에서 기업 정보에 액세스하도록 허용해야 하는지를 평가하는 데 사용됩니다.

특성 설명 완전 관리형 기기 회사 소유 기기의 직장 프로필 개인 소유 기기의 직장 프로필 (BYOD) 관리되지 않는 기기
Play Integrity API 트러스트 브로커는 다음 신호를 검색할 수 있습니다.
  • 기기 무결성
  • 앱 무결성
  • Play 라이선스 세부정보
  • 새로운 Play 프로텍트 확인 결과를 포함한 환경 세부정보
  • 보안 하드웨어 존재 / 키 증명 트러스트 브로커는 PKI 사용자 인증 정보가 생성되어 보안 하드웨어에 저장되었는지 확인할 수 있습니다.
    기기 속성 증명 키 증명의 일부로 기기 속성이 증명 레코드의 일부로 포함될 수 있습니다.
    기기 보안 패치 수준 트러스트 브로커가 OS 보안 패치 수준을 검증할 수 있습니다.
    기기에 대기 중인 OTA가 있나요? 트러스트 브로커는 대기 중인 기기 OS 업데이트가 있는지 확인할 수 있습니다. 해당 사항 없음
    메인라인 보안 패치 수준 트러스트 브로커는 설치된 메인라인 트레인의 보안 패치 수준을 읽을 수 있습니다.
    등록별 ID 트러스트 브로커는 해당 엔터프라이즈와 관련된 고유한 기기 ID에 액세스할 수 있습니다. 이 ID는 직장 프로필 재생성 및 기기 초기화 후에도 유지됩니다. 해당 사항 없음
    관리 상태 (및 관리 앱) 트러스트 브로커는 이를 사용하여 기기가 관리되는지 확인할 수 있습니다. 해당 사항 없음
    디스크 암호화 트러스트 브로커는 기기가 암호화되었는지 확인할 수 있습니다 (Android 8 지원이 필요한 경우).
    OS 버전 트러스트 브로커는 기기 OS 버전을 확인하고 특정 버전을 초과하는지 확인할 수 있습니다.
    액세스 네트워크 상태 (네트워크 상태 및 Wi-Fi 상태) 트러스트 브로커는 활성 네트워크 상태(모바일 및 Wi-Fi)에 관한 정보를 가져올 수 있습니다.
    Wi-Fi 상태에 액세스 (Android 11 이하, Android 12 이상에서는 콜백 또는 주문형 접근 방식을 모두 지원) 트러스트 브로커는 활성 Wi-Fi 네트워크에 관한 정보를 가져올 수 있습니다.
    프록시 설정 트러스트 브로커는 현재 기본 HTTP 프록시 설정에 대한 정보를 가져올 수 있습니다.
    화면 잠금 품질 검사 트러스트 브로커는 액세스 권한을 부여하기 전에 기기에 특정 품질의 화면 잠금이 구성되었는지 확인할 수 있습니다.
    개발자 옵션 사용 설정됨 개발자 옵션이 사용 설정되면 트러스트 브로커가 기기에 더 광범위한 공격 노출 영역이 있는 것으로 식별할 수 있습니다.
    DNS over TLS가 사용 설정되어 있나요? 트러스트 브로커는 이를 활용하여 비공개 DNS 모드가 사용 설정되도록 할 수 있습니다.
    SafetyNet 세이프 브라우징 트러스트 브로커는 Google이 특정 URL을 알려진 위협으로 분류했는지 여부를 확인할 수 있습니다.
    외부 미디어 마운트됨 외부 저장소가 마운트되면 트러스트 브로커에 알림을 보낼 수 있습니다.
    UsageStatsManager 트러스트 브로커는 개별 앱의 사용 패턴을 조사할 수 있습니다. 1
    보안 로깅 트러스트 브로커는 컨텍스트 엔진의 일부로 이 데이터를 활용하여 규정 준수를 보장하고 동작 기반 디지털 지문을 만들 수 있습니다. 2 2 해당 사항 없음
    네트워크 로깅 트러스트 브로커는 컨텍스트 엔진의 일부로 이 데이터를 활용하여 규정 준수를 보장하고 동작 기반 디지털 지문을 만들 수 있습니다. 2 2 해당 사항 없음
    NetworkStatsManager 트러스트 브로커는 지정된 시간 간격 내에 앱의 네트워크 사용량을 쿼리할 수 있습니다. 2 1
    패키지 공개 상태 (기기에 있는 모든 앱 나열) 트러스트 브로커는 기기에 설치된 앱을 쿼리할 수 있습니다. 3 3
    휴대전화 상태 읽기 트러스트 브로커는 모바일 네트워크 정보, 진행 중인 통화 상태, 기기에 등록된 PhoneAccount 목록을 가져올 수 있습니다.
    기기가 마지막으로 재부팅된 시간 트러스트 브로커는 시스템 업타임을 가져올 수 있습니다.
    계정 가져오기 트러스트 브로커는 이를 활용하여 계정 서비스의 계정 목록에 액세스할 수 있습니다. 3 3 1
    배터리 수준의 중요한 변화 모니터링하기 트러스트 브로커는 배터리 수준의 중요한 변화를 모니터링할 수 있습니다.
    위치(Fine(Fine(미세), 87(대략) 등)) 트러스트 브로커는 기기의 물리적 위치에 액세스할 수 있습니다. 1 1

    1 사용자 동의가 있는 경우

    2 직장 프로필만

    3 액세스가 직장 프로필 정보로 제한됨

    트러스트 브로커는 com.google.android.modulemetadata 모듈의 PackageInfo에 액세스하여 versionName를 검색할 수 있습니다.

    private fun mainlineVersion(context: Context): String? {
        val moduleProvider = "com.google.android.modulemetadata"
    
        return try {
                val pm = context.packageManager
                val packageInfo = pm.getPackageInfo(moduleProvider, 0)
                packageInfo.versionName
            } catch (e: PackageManager.NameNotFoundException) {
                null
            }
    }
    

    SimpleDateFormat 클래스를 사용하여 반환된 문자열을 Date 객체로 파싱할 수 있습니다.

    private val VERSION_NAME_DATE_PATTERNS = Arrays.asList(
          "yyyy-MM-dd",
          "yyyy-MM"
    )
    
    private fun parseDateFromVersionName(text: String): Date? {
        for (pattern in VERSION_NAME_DATE_PATTERNS) {
            try {
                val simpleDateFormat = SimpleDateFormat(
                    pattern,
                    Locale.getDefault()
                )
                simpleDateFormat.timeZone = TimeZone.getDefault()
                return simpleDateFormat.parse(text)
            } catch (e: ParseException) {
                // ignore and try next pattern
            }
        }
        return null
    }
    

    Android 11 이상에서는 Android의 패키지 공개 상태를 충족하도록 AndroidManifest.xml 파일에 쿼리 선언을 추가해야 합니다.

    <manifest package="com.example.game">
        <queries>
            <package android:name="com.google.android.modulemetadata" />
        </queries>
        ...
    </manifest>
    

    트러스트 브로커는 이러한 메서드를 사용하여 기기가 관리 모드에 있는지, 어떤 관리 모드가 활성 상태인지 확인할 수 있습니다.

    기기 관리 확인

    getActiveAdmins()을 사용하여 기기가 관리 중인지 확인합니다. 이 메서드가 null를 반환하면 기기가 관리되지 않는 것입니다.

    완전 관리형 기기 확인

    isDeviceOwnerApp()를 사용하여 기기가 완전 관리형인지 확인합니다.

    회사 소유 기기에서 직장 프로필 확인하기

    isOrganizationOwnedDeviceWithManagedProfile()를 사용하여 기기에서 회사 소유 기기에 직장 프로필 관리 모드를 사용하고 있는지 확인합니다.

    개인 소유 기기에서 직장 프로필 확인하기

    isProfileOwnerApp()을 사용하여 기기에 직장 프로필이 있는지 확인하고 isOrganizationOwnedDeviceWithManagedProfile()false를 반환하는지 확인합니다.