安全的开发者选项

根据 Android 兼容性定义文档的规定,原始设备制造商 (OEM) 必须提供一种支持应用开发的方式。不过,如果在汽车内提供与移动设备类似的开发者选项,会导致汽车容易受到攻击。现在,OEM 可以使用经过身份验证的加密令牌机制控制开发者选项。具体来说,OEM 可以:

  • 设置首次启动之前所需的默认限制。
  • 如果愿意,可以使用加密令牌安全地向开发者授权。
  • 在开发者通过身份验证并获得授权后,应用限制更改。

本文介绍了一项参考实现,其中包括 Debugging Restriction Controller 应用和远程 Token Issuer 端点。

术语

术语部分的术语外,本文还使用了以下术语:

  • JSON Web Signature (JWS),在 RFC 7515 中有定义
  • 美国国家标准与技术研究院 (NIST)

设计

OEM 可以使用 JSON Web Signature (JWS) 令牌 (RFC7515) 为开发者授权。在参考实现中,访问令牌由 OEM 颁发,并由 Restriction Controller 应用使用。访问令牌旨在抵御重放攻击和防范伪造令牌。

图 1. 设计

集成和配置

OEM 必须指定首次启动时所需的默认限制。为此,需要使用多个静态资源叠加层,以便替换 AOSP 框架中的默认值。

无头系统用户的默认限制可以使用 frameworks/base/core/res/res/values/config.xml 中的 config_defaultFirstUserRestrictions 字符串进行配置,例如:

<!-- 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>

您可以在 frameworks/base/core/res/res/xml/config_user_types.xml 中配置司机、乘客和访客的默认限制。OEM 可以叠加这些字符串,以便针对每种类型的用户分别设置默认限制,例如:

<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>

AOSP 中的以下位置提供了一项参考实现:

packages/apps/Car/DebuggingRestrictionController

测试

Google 建议 OEM 从参考实现着手进行构建。

  1. 在叠加层文件中配置所需的限制后,编译 AAOS 并验证定义的流程。使用参考应用和支持本地 JWS 的服务来验证您的访问权限设置。
  2. 将系统配置为使用支持 JWS 的云服务(可选)。验证您是否在后端服务中遵守所需的流程。