Android는 관리자가 신호를 보내어 메시지를 전송하는 데 사용할 수 있는 기기의 보안 상태를 결정합니다 제로 트러스트 보안 모델에서, 이러한 신호는 기기에서 사용할 수 있습니다.
기능 | 설명 | 완전 관리형 기기 | 회사 소유 기기의 직장 프로필 | 개인 소유 기기 (BYOD)의 직장 프로필 | 비관리 기기 |
---|---|---|---|---|---|
재생 Integrity API | 신뢰 브로커는 다음 신호를 검색할 수 있습니다.
|
예 | 예 | 예 | 예 |
보안 하드웨어 있음/키 증명 | 신뢰 브로커는 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 세이프 브라우징 | 트러스트 브로커는 특정 URL이 알려진 위협으로 분류했습니다. | 예 | 예 | 예 | 예 |
외부 미디어 장착됨 | 외부 저장소가 마운트되면 트러스트 브로커가 알림을 받을 수 있음 | 예 | 예 | 예 | 예 |
UsageStatsManager | 트러스트 브로커는 개별 앱의 사용 패턴 연구 가능 | 예 | 예 | 예 | 예1 |
보안 로깅 | 트러스트 브로커는 이 데이터를 컨텍스트의 일부로 활용할 수 있음 규정 준수를 보장하고 동작 기반 디지털 지문을 생성 | 예 | 예2 | 지원2 | 해당 사항 없음 |
네트워크 로깅 | 트러스트 브로커는 이 데이터를 컨텍스트의 일부로 활용할 수 있음 규정 준수를 보장하고 동작 기반 디지털 지문을 생성 | 예 | 지원2 | 지원2 | 해당 사항 없음 |
NetworkStatsManager | 신뢰 브로커는 지정된 시간 간격 내에 앱의 네트워크 사용량을 쿼리할 수 있습니다. | 예 | 예 | 예2 | 예1 |
패키지 공개 상태(기기의 모든 앱 나열) | 신뢰 브로커는 기기에 설치된 앱을 쿼리할 수 있습니다. | 예 | 해당함3 | 해당함3 | 예 |
읽기 전화 상태 | 트러스트 브로커는 모바일 네트워크 정보, 진행 중인 모든 호출, PhoneAccount 목록 기기에 등록됨 | 예 | 예 | 예 | 예 |
기기가 마지막으로 재부팅된 시점 | 트러스트 브로커는 시스템 업타임을 얻을 수 있음 | 예 | 예 | 예 | 예 |
계정 가져오기 | 신뢰 브로커는 이를 활용하여 계정 서비스의 계정 목록에 액세스할 수 있습니다. | 예 | 예3 | 예3 | 예1 |
배터리 수준의 중요한 변화 모니터링 | 신뢰 브로커는 배터리 수준의 큰 변화를 모니터링할 수 있습니다. | 예 | 예 | 예 | 예 |
위치 (세분함, 대략적 등) | 신뢰 브로커가 기기의 실제 위치에 액세스할 수 있음 | 예 | 예 | 예1 | 예1 |
1 사용자 동의가 있는 경우
2 직장 프로필만
3 직장 프로필 정보에만 액세스할 수 있음
메인라인 버전 가져오기
트러스트 브로커는 클러스터의 PackageInfo에
com.google.android.modulemetadata
모듈을 통해
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
}
}
다음을 사용하여 반환된 문자열을 Date
객체로 파싱할 수 있습니다.
SimpleDateFormat
클래스:
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
를 반환하는지 확인합니다.