Opciones seguras para desarrolladores

Según el documento de definición de compatibilidad de Android, Los OEMs deben proporcionar una forma de habilitar el desarrollo de apps. Sin embargo, proporcionar funciones de opciones para desarrolladores dentro de vehículos deja a esos autos vulnerables a ataques. Acceso al desarrollador las opciones ahora pueden ser restringidas por un OEM mediante un mecanismo de token criptográfico autenticado. Específicamente, un OEM puede hacer lo siguiente:

  • Establece las restricciones predeterminadas que desees antes del primer inicio.
  • Autoriza a los desarrolladores de forma segura, con tokens criptográficos, si lo prefieres.
  • Aplicar cambios de restricción una vez que un desarrollador está autenticado y autorizado

En este artículo, se describe una implementación de referencia que consiste en una restricción de depuración app del controlador y un extremo de entidad emisora de tokens remota.

Terminología

Además de la Terminología, se usan estos términos en este artículo:

  • Firma web JSON (JWS), definida en RFC 7515
  • Instituto Nacional de Estándares y Tecnología (NIST)

Diseño

Los OEMs pueden autorizar a los desarrolladores con tokens de firma web JSON (JWS) (RFC7515). En la implementación de referencia, los OEM son los que emiten los tokens de acceso y los consume la restricción app de control. Los tokens de acceso están diseñados para resistir ataques de repetición y tokens falsificados.

Figura 1: Diseño

Integración y configuración

Los OEM deben especificar las restricciones predeterminadas deseadas en el primer inicio. Esto se hace con varias superposiciones de recursos estáticos para anular los valores predeterminados en el framework del AOSP.

Las restricciones predeterminadas para el usuario del sistema sin interfaz gráfica se pueden configurar con el config_defaultFirstUserRestrictions string de entrada frameworks/base/core/res/res/values/config.xml, por ejemplo:

<!-- User restrictions set when the first user is created.
         Note: Also update appropriate overlay files. -->
    <string-array translatable="false" name="config_defaultFirstUserRestrictions">
        <item>no_debugging_features</item>
    </string-array>

Las restricciones predeterminadas para conductores, pasajeros e invitados se pueden configurar en frameworks/base/core/res/res/xml/config_user_types.xml Un OEM puede superponer| estas cadenas para establecer las restricciones predeterminadas en cada tipo de usuario de forma respectiva, por ejemplo:

<user-types>
    <full-type name="android.os.usertype.full.SECONDARY" >
        <default-restrictions no_debugging_features="true"/>
    </full-type>
    <full-type name="android.os.usertype.full.GUEST" >
        <default-restrictions no_debugging_features="true"/>
    </full-type>
</user-types>

En el AOSP, se proporciona una implementación de referencia en la siguiente ubicación:

packages/apps/Car/DebuggingRestrictionController

Prueba

Google recomienda que los OEMs comiencen con la implementación de referencias y la compilen a partir de allí.

  1. Después de configurar las restricciones deseadas en los archivos superpuestos, compila AAOS y para validar los flujos definidos. Usa la app de referencia y el servicio local habilitado con JWS para verificar tu configuración de acceso.
  2. Configura el sistema para usar tu servicio en la nube habilitado para JWS (opcional). Verifica que estés mediante la observación del flujo deseado en tu servicio de backend.