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 프록시 설정에 관한 정보를 가져올 수 있습니다. | 예 | 예 | 예 | 예 |
화면 잠금 품질 검사 | 신뢰 브로커는 액세스 권한을 부여하기 전에 기기에 특정 품질의 화면 잠금이 설정되어 있는지 확인할 수 있습니다. | 예 | 예 | 예 | 예 |
개발자 옵션 사용 설정됨 | 개발자 옵션이 사용 설정된 경우 신뢰 브로커는 기기를 더 광범위한 공격 노출 영역이 있는 것으로 식별할 수 있습니다. | 예 | 예 | 예 | 예 |
TLS를 통한 DNS가 사용 설정되어 있나요? | 신뢰 브로커는 이를 활용하여 비공개 DNS 모드가 사용 설정되어 있는지 확인할 수 있습니다. | 예 | 예 | 예 | 예 |
SafetyNet 세이프 브라우징 | 신뢰 브로커는 Google이 특정 URL을 알려진 위협으로 분류했는지 여부를 확인할 수 있습니다. | 예 | 예 | 예 | 예 |
외부 미디어 장착됨 | 외부 저장소가 마운트되면 신뢰 브로커에 알림을 보낼 수 있습니다. | 예 | 예 | 예 | 예 |
UsageStatsManager | 신뢰 브로커는 개별 앱의 사용 패턴을 연구할 수 있습니다. | 예 | 예 | 예 | 예1 |
보안 로깅 | 신뢰 브로커는 이 데이터를 문맥 엔진의 일부로 활용하여 규정을 준수하고 행동 기반 지문을 생성할 수 있습니다. | 예 | 예2 | 예2 | 해당 사항 없음 |
네트워크 로깅 | 신뢰 브로커는 이 데이터를 문맥 엔진의 일부로 활용하여 규정을 준수하고 행동 기반 지문을 생성할 수 있습니다. | 예 | 예2 | 예2 | 해당 사항 없음 |
NetworkStatsManager | 신뢰 브로커는 지정된 시간 간격 내에 앱의 네트워크 사용량을 쿼리할 수 있습니다. | 예 | 예 | 예2 | 예1 |
패키지 공개 상태 (기기의 모든 앱 나열) | 신뢰 브로커는 기기에 설치된 앱을 쿼리할 수 있습니다. | 예 | 예3 | 예3 | 예 |
휴대전화 상태 읽기 | 신뢰 브로커는 모바일 네트워크 정보, 진행 중인 통화 상태, 기기에 등록된 PhoneAccount 목록을 가져올 수 있습니다. | 예 | 예 | 예 | 예 |
기기가 마지막으로 재부팅된 시점 | 신뢰 브로커가 시스템 가동 시간을 가져올 수 있습니다. | 예 | 예 | 예 | 예 |
계정 가져오기 | 신뢰 브로커는 이를 활용하여 계정 서비스의 계정 목록에 액세스할 수 있습니다. | 예 | 예3 | 예3 | 예1 |
배터리 수준의 주요 변화 모니터링 | 신뢰 브로커는 배터리 수준의 주요 변화를 모니터링할 수 있습니다. | 예 | 예 | 예 | 예 |
위치(세부, 대략 등) | 신뢰 브로커가 기기의 실제 위치에 액세스할 수 있음 | 예 | 예 | 예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
를 반환하는지 확인합니다.