Android 5.1 introdujo un mecanismo para otorgar privilegios especiales a las APIs relevantes para los propietarios de aplicaciones universales de tarjetas de circuito integrado (UICC). El La plataforma de Android carga los certificados almacenados en un UICC y otorga permiso para apps firmadas por estos certificados para realizar llamadas a un puñado de APIs especiales.
Android 7.0 extendió esta función para admitir otras fuentes de almacenamiento para UICC reglas de privilegios de operador, y así aumentar la cantidad de proveedores que pueden usar las APIs. Para una referencia de API, consulta CarrierConfigManager; para obtener instrucciones, consulta Operador Configuración.
Como los operadores tienen control total sobre el UICC, este mecanismo proporciona un forma segura y flexible de administrar apps desde el operador de redes móviles (MNO) alojados en canales de distribución de apps genéricos (como Google Play), mientras que manteniendo privilegios especiales en los dispositivos y sin tener que firmar apps con el certificado de plataforma por dispositivo o preinstalarlo como una aplicación del sistema.
Reglas en UICC
El almacenamiento en UICC es compatible con el
Plataforma Global
Especificación del control de acceso al elemento seguro. El identificador de la app
(AID) de la tarjeta es A00000015141434C00
, y el
GET DATA
se usa para recuperar las reglas almacenadas en la tarjeta. Puedes actualizar estas reglas
mediante actualizaciones inalámbricas (OTA) de las tarjetas.
Jerarquía de datos
Las reglas UICC usan la siguiente jerarquía de datos (las letras de dos caracteres y
la combinación de números entre paréntesis es la etiqueta de objeto). Cada regla se
REF-AR-DO
(E2
) y consiste en una concatenación de
REF-DO
y AR-DO
:
REF-DO
(E1
) contieneDeviceAppID-REF-DO
o una concatenación deDeviceAppID-REF-DO
yPKG-REF-DO
.DeviceAppID-REF-DO
(C1
) almacena el SHA-1 (20 bytes) o SHA-256 (32 bytes) del certificado.PKG-REF-DO
(CA
) es el nombre completo del paquete string definida en el manifiesto, codificada en ASCII, con una longitud máxima de 127 bytes.
- Se extiende
AR-DO
(E3
) para incluirPERM-AR-DO
(DB
), que es un bit de 8 bytes máscara que representa 64 permisos distintos.
Si PKG-REF-DO
no está presente, todas las apps firmadas por el certificado
se le otorgue acceso; De lo contrario, tanto el certificado como el nombre del paquete
la coincidencia.
Ejemplo de regla
El nombre de la app es com.google.android.apps.myapp
y el
El certificado SHA-1 en cadena hexadecimal es el siguiente:
AB:CD:92:CB:B1:56:B2:80:FA:4E:14:29:A6:EC:EE:B6:E5:C1:BF:E4
La regla de UICC en cadena hexadecimal es la siguiente:
E243 <= 43 is value length in hex E135 C114 ABCD92CBB156B280FA4E1429A6ECEEB6E5C1BFE4 CA1D 636F6D2E676F6F676C652E616E64726F69642E617070732E6D79617070 E30A DB08 0000000000000001
Compatibilidad con archivos de reglas de acceso
Android 7.0 agrega compatibilidad para leer reglas de privilegios de proveedor desde el permiso de reglas de firewall (ARF).
La plataforma de Android primero intenta seleccionar la aplicación de la regla de acceso
(ARA) AID A00000015141434C00
. Si no encuentra
el AID en el UICC, recurre al ARF seleccionando AID PKCS15
A000000063504B43532D3135
Luego, Android lee la
archivo de reglas de control de acceso (ACRF) en 0x4300
y busca entradas
con el AID FFFFFFFFFFFF
. Se ignoran las entradas con diferentes AID, por lo que
de seguridad para otros casos de uso.
Ejemplo de contenido de ACRF en cadena hexadecimal:
30 10 A0 08 04 06 FF FF FF FF FF FF 30 04 04 02 43 10
Ejemplo de contenido del archivo de condiciones de control de acceso (ACCF):
30 16 04 14 61 ED 37 7E 85 D3 86 A8 DF EE 6B 86 4B D8 5B 0B FA A5 AF 81
En el ejemplo anterior, 0x4310
es la dirección de ACCF, que
contiene el hash del certificado
61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81
Aplicaciones
que firman este certificado tienen privilegios de proveedor.
APIs habilitadas
Android admite las siguientes APIs.
TelephonyManager
- Método para permitir que la app del operador le solicite un desafío o una respuesta a UICC:
getIccAuthentication
- Método para verificar si se otorgó el operador a la app que realiza la llamada
privilegios:
hasCarrierPrivileges
- Métodos para anular la marca y el número:
- Métodos de comunicación directa UICC:
- Método para configurar el modo de dispositivo como global:
setPreferredNetworkTypeToGlobal
- Métodos para obtener las identidades del dispositivo o la red:
- Identidad internacional de equipo móvil (IMEI):
getImei
- Identificador de equipo móvil (MEID):
getMeid
- Identificador de acceso a la red (NAI):
getNai
- Número de serie de SIM:
getSimSerialNumber
- Identidad internacional de equipo móvil (IMEI):
- Método para obtener la configuración del proveedor:
getCarrierConfig
- Método para obtener el tipo de red de transmisión de datos:
getDataNetworkType
- Método para obtener el tipo de red para el servicio de voz:
getVoiceNetworkType
- Métodos para obtener información sobre la app de SIM de UICC (USIM):
- Número de serie de SIM:
getSimSerialNumber
- Información de la tarjeta:
getUiccCardsInfo
- GID1 (nivel de ID de grupo 1):
getGroupIdLevel1
- Cadena de número de teléfono para la línea 1:
getLine1Number
- Red móvil de tierra pública (PLMN) prohibida:
getForbiddenPlmns
- PLMN doméstico equivalente:
getEquivalentHomePlmns
- Número de serie de SIM:
- Métodos para obtener o configurar el número del buzón de voz:
- Método para enviar un código de marcador especial:
sendDialerSpecialCode
- Método para restablecer el módem de radio:
rebootModem
- Métodos para obtener o establecer modos de selección de red:
- Método para solicitar un escaneo de red:
requestNetworkScan
- Métodos para obtener o configurar los tipos de red permitidos o preferidos:
- Métodos para verificar si los datos móviles o el roaming están habilitados según la configuración del usuario:
- Métodos para verificar o establecer la conexión de datos con el motivo:
- Método para obtener la lista de números de emergencia:
getEmergencyNumberList
- Métodos para controlar las redes oportunistas:
- Métodos para establecer o borrar la solicitud de actualización de la intensidad de la señal celular:
TelephonyCallback
TelephonyCallback
tiene interfaces con un método de devolución de llamada para realizar las siguientes acciones:
notificar a la app que realiza la llamada cuando cambien los estados registrados:
- El indicador de mensaje en espera cambió:
onMessageWaitingIndicatorChanged
- El indicador de desvío de llamadas cambió:
onCallForwardingIndicatorChanged
- La causa de la desconexión de la llamada del sistema multimedia de IP (IMS) cambió:
onImsCallDisconnectCauseChanged
- Cambió el estado de conexión de datos preciso:
onPreciseDataConnectionStateChanged
- Cambió la lista de números de emergencia actual:
onEmergencyNumberListChanged
- Cambió el ID de suscripción de datos activo:
onActiveDataSubscriptionIdChanged
- Cambió la red del operador:
onCarrierNetworkChange
- La actualización del registro de la red o de una ubicación, ruta o área de seguimiento
error:
onRegistrationFailed
- La información de restricción cambia:
onBarringInfoChanged
- Cambió la configuración actual del canal físico:
onPhysicalChannelConfigChanged
Administrador de suscripciones
- Métodos para obtener información sobre suscripciones:
- Método para obtener la cantidad de suscripciones activas:
getActiveSubscriptionInfoCount
- Métodos para administrar grupos de suscripción:
- Métodos para obtener o establecer la descripción del plan de relación de facturación entre un operador y un suscriptor específico:
- Método para anular temporalmente el plan de relación de facturación entre un
el operador y un suscriptor específico para que se consideren no medidas:
setSubscriptionOverrideUnmetered
- Método para anular temporalmente el plan de relación de facturación entre un
la empresa de transportes y un suscriptor específico para que se considere congestionada:
setSubscriptionOverrideCongested
- Método para verificar si la app con el contexto dado es
autorizada para administrar la suscripción en cuestión según sus metadatos:
canManageSubscription
Administrador de SMS
- Método para permitir que el emisor cree nuevos mensajes SMS entrantes:
injectSmsPdu
- Método para enviar un mensaje SMS sin escribir en el SMS
proveedor de servicios de nube:
sendTextMessageWithoutPersisting
CarrierConfigManager
- Método para notificar que se cambió la configuración:
notifyConfigChangedForSubId
- Método para obtener la configuración del proveedor para la suscripción predeterminada:
getConfig
- Método para obtener la configuración del proveedor para la suscripción especificada:
getConfigForSubId
Para obtener instrucciones, consulta Configuración del operador.
Administrador de informes de errores
Método para iniciar un informe de errores de conectividad, que es una versión especializada de
el informe de errores que solo incluye información para depurar los errores relacionados con la conectividad
problemas:
startConnectivityBugreport
Administrador de estadísticas de red
- Método para consultar el resumen del uso de la red:
querySummary
- Método para consultar el historial de uso de la red:
queryDetails
- Métodos para registrar o cancelar el registro de la devolución de llamada de uso de red:
ImsMmTelManager
- Métodos para registrar o cancelar el registro de devolución de llamada de registro de IMS MmTel:
ImsRcsManager
- Métodos para registrar la devolución de llamada de registro de RCS de IMS o cancelar su registro:
- Métodos para obtener el estado de registro de IMS o el tipo de transporte:
Administrador de aprovisionamiento
- Métodos para registrar y cancelar el registro de actualizaciones de aprovisionamiento de funciones de IMS devolución de llamada:
- Métodos relacionados con el estado de aprovisionamiento de la capacidad de MmTel o RCS de IMS:
EuiccManager
Método para cambiar (habilitar) la suscripción en cuestión:
switchToSubscription
Servicio de mensajería del proveedor
Servicio que recibe llamadas del sistema cuando se envían SMS y MMS nuevos.
recibidos. Para extender esta clase, declara el servicio en tu archivo de manifiesto con
android.Manifest.permission#BIND_CARRIER_MESSAGING_SERVICE
permiso e incluir un filtro de intents con el valor #SERVICE_INTERFACE
acción. Se incluyen los siguientes métodos:
- Método para filtrar los mensajes SMS entrantes:
onFilterSms
- Método para interceptar los mensajes SMS de texto enviados desde el dispositivo:
onSendTextSms
- Método para interceptar mensajes SMS binarios enviados desde el dispositivo:
onSendDataSms
- Método para interceptar mensajes SMS largos enviados desde el dispositivo:
onSendMultipartTextSms
- Método para interceptar los mensajes MMS enviados desde el dispositivo:
onSendMms
- Método para descargar los mensajes MMS recibidos:
onDownloadMms
Servicio de transporte
Servicio que expone funcionalidades específicas del proveedor al sistema. Para
extender esta clase, declarar el servicio en el archivo de manifiesto de la app con el
permiso android.Manifest.permission#BIND_CARRIER_SERVICES
y
incluir un filtro de intents con la acción CARRIER_SERVICE_INTERFACE
Si el servicio tiene una vinculación de larga duración, establece
android.service.carrier.LONG_LIVED_BINDING
a
true
en los metadatos del servicio.
La plataforma vincula CarrierService
con marcas especiales para permitir que las
de servicio de la empresa de transporte se ejecutan en un
bucket de App Standby. Esto exime a la app del servicio de la empresa de transporte de
restricción de inactividad de la app y aumenta las probabilidades de que se mantenga activa cuando el dispositivo
memoria es baja. Sin embargo, si la app del servicio del operador falla por cualquier motivo,
perderá todos los privilegios anteriores hasta que la app se reinicie y la vinculación
restablecido. Por lo tanto, es fundamental mantener estable la app de servicio del operador.
Entre los métodos de CarrierService
, se incluyen los siguientes:
- Para anular y establecer las configuraciones específicas de los proveedores, haz lo siguiente:
onLoadConfig
- Para informar al sistema sobre un próximo cambio intencional en la red del operador
la app del operador:
notifyCarrierNetworkChange
Proveedor de telefonía
API de proveedor de contenido para permitir modificaciones (inserción, eliminación, actualización, consulta)
a la base de datos de telefonía. Los campos de valores se definen en
Telephony.Carriers
para obtener más detalles, consulta
la referencia de la clase Telephony
Sugerencia de redWi-Fi
Cuando compiles un objeto WifiNetworkSuggestion
, usa lo siguiente:
para establecer un ID de suscripción o un grupo de suscripciones:
- Método para configurar un ID de suscripción:
setSubscriptionId
- Método para configurar un grupo de suscripción:
setSubscriptionGroup
Plataforma de Android
En un UICC detectado, la plataforma construye objetos UICC internos que
incluir reglas de privilegios de proveedor como parte de la UICC.
UiccCarrierPrivilegeRules.java
Carga reglas, las analiza desde la tarjeta UICC y las almacena en caché en la memoria. Cuándo
se necesita una verificación de privilegios, UiccCarrierPrivilegeRules
compara el
certificado de emisor con sus propias reglas, una por una. Si se quita el UICC, el
se destruyen junto con el objeto UICC.
Validación
Validar la implementación a través de
Conjunto de pruebas de compatibilidad (CTS) con CtsCarrierApiTestCases.apk
debe contar con un UICC de desarrollador con las reglas de UICC o la asistencia de ARF correctas.
Solicita al proveedor de la tarjeta SIM de tu elección que prepare una UICC para desarrolladores con el
el ARF correcto como se describe en esta sección y usar ese UICC para ejecutar las pruebas. El
UICC no requiere un servicio celular activo para pasar las pruebas de CTS.
Prepara el UICC
En Android 11 y versiones anteriores, CtsCarrierApiTestCases.apk
es
firmado por aosp-testkey
, con valor de hash
61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81
A partir de Android 12, CtsCarrierApiTestCases.apk
es
firmado por
cts-uicc-2021-testkey
, valor de hash
CE:7B:2B:47:AE:2B:75:52:C8:F9:2C:C2:91:24:27:98:83:04:1F:B6:23:A5:F1:94:A8:2C:9B:F1:5D:49:2A:A0
Para ejecutar pruebas de API de proveedores del CTS en Android 12, el dispositivo necesita usar una SIM con el proveedor de CTS privilegios que cumplen con los requisitos especificados en la versión más reciente del el tercero Especificación del perfil de prueba de GSMA TS.48.
La misma SIM también se puede usar para versiones anteriores a Android 12
Modifica el perfil de SIM de CTS
- Agregar: Privilegios de proveedor del CTS en
instancia principal de la app
de regla de acceso (ARA-M) o ARF. Ambas firmas deben
codificadas en las reglas de privilegios de proveedor:
- Hash1(SHA1):
61:ED:37:7E:85:D3:86:A8:DF:EE:6B:86:4B:D8:5B:0B:FA:A5:AF:81
- Hash2(SHA256):
CE:7B:2B:47:AE:2B:75:52:C8:F9:2C:C2:91:24:27:98:83:04:1F:B6:23:A5:F1:94:A8:2C:9B:F1:5D:49:2A:A0
- Hash1(SHA1):
- Crear: archivos básicos (EF) USIM de ADF que no están presentes en
TS.48 y es necesario para el CTS:
- EF_MBDN (6FC7), tamaño del registro: 28, número de registro: 4
- Contenido
- Rec1: 566F696365204D61696CFFFFFFFF06915155555555FF...FF
- Rec2-n: FF...FF
- Contenido
- EF_EXT6 (6FC8), tamaño del registro:13, número de registro: 1
- Contenido: 00FF...FF
- EF_MBI (6FC9), tamaño del registro: 4, número de registro: 1
- Contenido: Rec1: 01010101
- EF_MWIS (6FCA), tamaño del registro: 5, número de registro: 1
- Contenido: 0000000000
- Contenido: 00FF...FF
- EF_MBDN (6FC7), tamaño del registro: 28, número de registro: 4
- Modificar: Tabla de servicios USIM: habilitar servicios n° 47, n° 48
- EF_UST (6F38)
- Contenido:
9EFFBF1DFFFE0083410310010400406E01
- Contenido:
- EF_UST (6F38)
- Modificar: archivos DF-5GS y DF-SAIP
- DF-5GS - EF_5GS3GPPLOCI (USIM/5FC0/4F01)
- Contenido:
FFFFFFFFFFFFFFFFFFFFFFFFFF42F618FFFFFE01
- Contenido:
- DF-5GS - EF_5GSN3GPPLOCI (USIM/5FC0/4F02)
- Contenido:
FFFFFFFFFFFFFFFFFFFFFFFFFF42F618FFFFFE01
- Contenido:
- DF-5GS - EF SUCI_Calc_Info (USIM/5FC0/4F07)
- Contenido:
A0020000FF…FF
- Contenido:
- DF-SAIP: EF SUCI_Calc_Info_USIM (USIM/5FD0/4F01)
- Contenido:
A0020000FF…FF
- Contenido:
- DF-5GS - EF_5GS3GPPLOCI (USIM/5FC0/4F01)
- Modifica: usa la cadena de nombre de proveedor Android CTS.
en los respectivos EF que contengan esta designación:
- .
- EF_SPN (USIM/6F46)
- Contenido:
01416E64726F696420435453FF..FF
- Contenido:
- EF_PNN (USIM/6FC5)
- Contenido:
Rec1 430B83413759FE4E934143EA14FF..FF
- Contenido:
- EF_SPN (USIM/6F46)
Cómo hacer coincidir la estructura del perfil de prueba
Descarga y haz coincidir la versión más reciente de las siguientes estructuras de perfiles de prueba genéricas. Estos perfiles no tendrán la regla de privilegios de proveedor de CTS personalizada ni otras modificaciones que se mencionaron anteriormente.
- Estructura del perfil de prueba genérico de GSMA TS.48
- Ejemplo de perfil de TS.48 en formato DER de eSIM
Cómo ejecutar pruebas
Para mayor comodidad, el CTS admite un token de dispositivo que restringe
para que se ejecuten solo en dispositivos configurados con el mismo token. CTS de API de Carrier
las pruebas admiten el token de dispositivo sim-card-with-certs
. Por ejemplo:
El siguiente token de dispositivo restringe las pruebas de API del operador para que se ejecuten solo en el dispositivo
abcd1234
:
cts-tradefed run cts --device-token abcd1234:sim-card-with-certs
Cuando se ejecuta una prueba sin usar un token de dispositivo, la prueba se ejecuta en todos dispositivos.
Preguntas frecuentes
¿Cómo se pueden actualizar los certificados en el UICC?
A: Usar el mecanismo de actualización OTA de la tarjeta existente
¿UICC puede coexistir con otras reglas?
A: Está bien tener otras reglas de seguridad en el UICC con el mismo AID. la plataforma los filtra automáticamente.
¿Qué sucede cuando se quita la UICC de una aplicación que depende del certificados en ella?
A: La app pierde sus privilegios porque las reglas asociadas a la UICC se destruyen cuando se elimina UICC.
¿Existe un límite para la cantidad de certificados en el UICC?
A: La plataforma no limita la cantidad de certificados. sino porque la verificación es lineal, por lo que demasiadas reglas pueden generar una latencia para la verificación.
¿Existe un límite para la cantidad de APIs que podemos admitir con esto? método?
R.: No, pero limitamos el alcance a las APIs relacionadas con los proveedores.
¿Hay algunas APIs que no puedan usar este método? Si es así, ¿cómo las aplicas? (es decir, ¿tiene pruebas para validar qué APIs se se admite con este método?)
A: Consulta la Sección Compatibilidad de comportamiento de la API de Compatibilidad con Android Documento de definición (CDD). Tenemos algunas pruebas del CTS para asegurarnos de que el el modelo de permisos de las APIs no se modifica.
¿Cómo funciona con la función de varias tarjetas SIM?
A: Se usa la SIM predeterminada que especificó el usuario.
¿Interacciona o se superpone con el acceso de otro ingeniero de ventas de alguna forma tecnologías, por ejemplo, SEEK?
A: A modo de ejemplo, SEEK usa el mismo AID que en el UICC. Entonces, las reglas
coexistir y se filtran con SEEK o
UiccCarrierPrivileges
¿Cuándo es un buen momento para revisar los privilegios del operador?
A: Después de la transmisión del estado de la SIM cargado
¿Los OEM pueden inhabilitar parte de las APIs de los operadores?
R.: No. Creemos que las APIs actuales son el conjunto mínimo, y planea usar la máscara binaria para un control más detallado en el futuro.
¿setOperatorBrandOverride
anula TODAS los demás formularios?
de operador
o cadenas de nombre? Por ejemplo, SE13, UICC SPN o NITZ basado en la red?
Sí, la anulación de marca del operador tiene la prioridad más alta. Cuando está configurado, anula ALL otras formas de cadenas de nombres de operadores.
¿Qué hace la llamada al método injectSmsPdu
?
A: Este método facilita el restablecimiento o la copia de seguridad de SMS en la nube. El
La llamada a injectSmsPdu
habilita la función de restablecimiento.
Para el filtrado de SMS, ¿la llamada a onFilterSms
se basa en
¿Quieres filtrar los puertos de UDH de SMS? ¿Las apps del operador tienen acceso a TODOS los SMS entrantes?
A: Los operadores tienen acceso a todos los datos de SMS.
La extensión de DeviceAppID-REF-DO
para admitir
32 bytes parece ser
incompatible con la especificación de GP actual (que solo permite 0 o 20 bytes), ¿por qué
¿presentan este cambio? No es suficiente SHA-1 para
evitar las colisiones? ¿Ya propusiste este cambio a GP, ya que esto podría
ser incompatible con versiones anteriores de la ARA-M/ARF existente?
R.: Para ofrecer seguridad preparada para el futuro, esta extensión presenta SHA-256
para DeviceAppID-REF-DO
además de SHA-1, que actualmente es
la única opción en el estándar GP SEAC. Te recomendamos que uses SHA-256.
Si DeviceAppID
es 0 (vacío), ¿aplicas la regla a
todas las apps para dispositivos que no están cubiertas por una regla específica?
A: Las APIs de operador requieren que se propague DeviceAppID-REF-DO
.
Estar vacío está destinado a fines de prueba y no se recomienda para fines operativos
de Google Cloud.
Según tus especificaciones, PKG-REF-DO
solo se utiliza
sin DeviceAppID-REF-DO
, no debería aceptarse. Sin embargo,
sigue descrito en la Tabla 6-4 de la especificación como que extiende el
definición de REF-DO
. ¿Es intencional? ¿De qué manera el código
se comporta cuando solo se usa PKG-REF-DO
en REF-DO
?
A: La opción de tener PKG-REF-DO
como un solo valor
El elemento de REF-DO
se eliminó en la versión más reciente.
PKG-REF-DO
solo debe ocurrir en combinación con
DeviceAppID-REF-DO
Suponemos que podemos otorgar acceso a todos los permisos basados en el operador o tener un control más detallado. Si es así, ¿qué define la asignación entre el bit y los permisos reales? ¿Un permiso por clase? Un permiso por método? ¿64 permisos diferentes son suficientes a largo plazo?
A: Esto se reserva para el futuro, y agradecemos las sugerencias.
¿Puedes definir con más detalle DeviceAppID
para Android?
específicamente? Este es el valor de hash SHA-1 (20 bytes) del publicador
certificado usado para firmar la app, así que el nombre no debería reflejar eso
propósito? (El nombre podría ser confuso para muchos lectores, ya que la regla entonces
se aplica a todas las aplicaciones firmadas con el mismo certificado de publicador).
A: El certificado de almacenamiento DeviceAppID
es compatible con el
especificación existente. Intentamos minimizar los cambios de especificaciones para reducir la barrera
la adopción. Para conocer más detalles, consulta Reglas sobre UICC.