Android는 관리자가 기기의 보안 상태를 확인하는 데 사용할 수 있는 다양한 기기 신호를 제공합니다. 제로 트러스트 보안 모델에서 이러한 신호는 기기에서 기업 정보에 액세스하도록 허용해야 하는지를 평가하는 데 사용됩니다.
특성 | 설명 | 완전 관리형 기기 | 회사 소유 기기의 직장 프로필 | 개인 소유 기기의 직장 프로필 (BYOD) | 관리되지 않는 기기 |
---|---|---|---|---|---|
Play 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 세이프 브라우징 | 트러스트 브로커는 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
를 반환하는지 확인합니다.