全部产品

安全运营管理-SOC(企业版、旗舰版)for Android

本文档介绍了安全运营管理-SOC(企业版、旗舰版)SDK如何在Android系统中集成。

1, 获取安装包

您可以通过IoT安全中心 获取SOC(企业版、旗舰版)SDK

说明

安全SDK包含:安全运营管理-SOC(企业版)、安全运营管理-SOC(旗舰版),以下简称:SOC SDK。

2,SOC SDK Native 集成

2.1 集成 SDK 到 Android ROM 编译环境

  1. 在具有 Android 设备源代码及编译环境的计算机上下载 SOC SDK ,保存并解压缩到任意目录。

  2. 将 dps_sdk 目录复制到 $ANDROID_SOURCE_HOME/external 目录下。

  3. 在目标产品的 Android makefile 当中配置编译 dps_sdk 包,在 device.mk (或对等功能的文件) 当中加入以下代码:

# build dps_sdk
$(call inherit-product-if-exists,external/dps_sdk/dps_sdk.mk)
  1. 打开编辑 $ANDROID_SOURCE_HOME/external/dps_sdk/dps_sdk.mk 文件,编译内容如下:

PRODUCT_PACKAGES += \
    dps_domain \
    dps_services \
    dps_pro \
    dps_extras \
    itls_client \

SOC SDK 功能分层:

  • dps_domain 和 dps_services 为必选项,提供基础文件系统取证、进程分析、完整性检查功能,需要默认开启;

  • dps_pro 属于高阶功能,可提供进程行为、网络行为分析、漏洞修复等功能,强烈建议开启,但开启后需要对 Android 系统上运行的 APP 做一些覆盖兼容性测试。

  • dps_extra 属于增强型工具,如果需要使用安全沙箱、安全控制台、安全网络扫描组件,请按需包含。

  • itls_client 为 SOC 增强型上云连接通道,基于 ID² 和 TEE CAP 鉴权上云,如果需要请包含,并且请参考“接入公有云物联网安全中心”中的“方法一”进行适当配置。

2.2 编译前配置

  1. 用户可以在 $ANDROID_SOURCE_HOME/external/dps_sdk/packages/configure.ini当中进行服务参数的配置,具体请参考“configure.ini配置”。

说明

一般而言这个配置文件在 SDK 输出时已经配置好,ISV 用户仅需要审核和微调。 重要:通常需要微调的部分为:在 Android 产品当中,往往会采用一个 property 属性来保存产品固件的版本号,每当产品进行 OTA 或者有线烧录的时候,这个版本号都会发生变化,那么请根据您的产品当中具体的这个属性值对 $ANDROID_SOURCE_HOME/external/dps_sdk/packages/configure.ini 当中的 MANAGED_VERSION 进行仿写配置即可。

2. SDK 为 Android 7.0 以上版本提供了支持原生 AOSP 的 SELinux 和 Seccomp 安全策略,请在开始编译产品镜像之前,确认 SELinux 和 Seccomp policy 被加入到 Android 源代码当中($DPS_SDK 指代 DPS SDK 目录):

  • 找到对应的 Android 版本的 SEPolicy 目录,将 $DPS_SDK/policy/sepolicy/dps_file_contexts当中的内容复制并粘贴到 file_contexts 文本最末尾。

  • 找到对应的 Android 版本的 SEPolicy 目录,将 $DPS_SDK/policy/sepolicy/dps_android_X.te 拷贝至该目录并重命名为 dps.te。其中 X 代表 Android 版本对应字母号。

  • 找到 Android 源代码的 frameworks/av/services/mediacodec/minijail/seccomp_policy 目录,将$DPS_SDK/policy/seccomp_policy/dps_mediacodec-seccomp-arm.policy 当中的内容复制并粘贴到 mediacodec-seccomp-arm.policy 文件末尾。

  • 找到 Android 源代码的 frameworks/av/services/mediaextractor/minijail/seccomp_policy 目录,将 $DPS_SDK/policy/seccomp_policy/dps_mediaextractor-seccomp-arm.policy 当中的内容复制并粘贴到 mediaextractor-seccomp-arm.policy 文件末尾。将$DPS_SDK/policy/seccomp_policy/dps_mediaextractor-seccomp-x86.policy 当中的内容复制并粘贴到 mediaextractor-seccomp-x86.policy 文件末尾。

说明

在 Android 8 以上的版本中,需要额外配置 vendor 的 SEPolicy,一个 vendor 相关的定制 SEPolicy 范例请参考:policy/sepolicy/vendor/dps_android_o_bullhead.te。

2.3 SELinux 调试

没有使能 SELinux 的设备可以跳过这一步。

在使能 SELinux 的 Android 设备上必须要完成这一步调试,请参考文档“Android SELinux 策略开发一般方法”。

2.4 内核安全增强

由于不是必选步骤,可以略过,如果有针对内核审计相关强安全需求的用户,请参考文档“Linux 内核功能依赖参考”。

2.5 确认集成已成功

开发阶段请务必将 SELinux 置为 permissive 模式,具体方法为在产品的 BoardConfig.mk 文件里加入一行:

BOARD_KERNEL_CMDLINE += androidboot.selinux=permissive

完成上述的必选或者可选步骤之后,就可以按照通常设备 ROM 编译的方式进行编译了。编译结束之后通过一下几个 checklist 来确保 SOC SDK 成功集成到了设备 ROM:

  1. 在编译工作机上,进入 $ANDROID_SOURCE_HOME/out/target/<your_product>/目录。

  2. 确认 system/bin/ 目录下具有 dps 文件夹,即 /system/bin/dps 存在,其中具有 bin, lib(64), etc 三个文件夹。

  3. 确认 system/bin/linker64 以及 system/bin/linker 形成符号链接,指向 ./dps/bin/linker64 和 ./dps/bin/linker。

  4. 确认 system/bin/logd 不存在。

  5. 确认 system/etc/init/ 下存在 dps.rc 文件。

  6. 确认 system/etc/seccomp_policy/ 当中几个 .policy 文件以及 /vendor/etc/seccomp_policy 当中的几个 .policy 文件中含有 DPS 指定的 syscall 白单。

完成上述确认之后尝试刷机,并且进行开机 check list:

  1. 可以正常启动到 launcher,adb 功能以及 logcat 功能正常。

  2. adb shell 进入系统,通过 ps 命令,确认三个进程:dpsd、logd、sagent 均运行,且稳定(1分钟以内进程号不变)。

3,接入公有云物联网安全中心

SOC SDK 需要和阿里云物联网平台服务端之间建立一个安全的 MQTT 连接,才能正常工作,因此,我们需要将它接入阿里云物联网平台。

下面介绍常用的三种接入阿里云物联网的方式,在集成过程中,只需要根据实际需求选中其中一种方式即可,对于没有集成 TEE PRO 的 Android 设备,推荐使用方法一。在某些已经集成了 TEE PRO 的 Android 设备上,推荐方法二。

方法一:复用 ID2+TEE-CAP 建立 的 iTLS 上云通道

在目标设备 Android 系统当中,如果事先没有集成 TEE-PRO,则可以通过 APP + Linkkit SDK + ID2+TEE CAP 建立了 iTLS 上云通道的话,这个通道可以复用给 SOC 使用。

我们强烈推荐您使用这种方式让 SOC SDK 连入阿里云物联网,通过 ID2 认证的 MQTT over iTLS 通道可以让你的数据传输更加安全。

整体的数据链路通道如下图所示:整体的数据链路通道

具体操作步骤如下:

  1. $ANDROID_SOURCE_HOME/external/dps_sdk/dps_sdk.mk 文件中确认启用了 itls_client 选项。

  2. 使用 PC 浏览器打开阿里云物联网平台控制台

  3. 进入控制台之后单击对应的实例,依次单击“设备管理”--“产品”,单击“创建产品”。

注意

认证方式必须选择ID²

4. 创建成功后,进入产品详情页面,点击上方的“Product Secret xxxxx 查看”按钮,获取产品证书信息。

说明

产品证书信息ProductKey 和 ProductSecret后续会用到。

  1. 在 Android Studio 导入的 SDK 包当中的 $ANDROID_SOURCE_HOME/external/dps_sdk/client/example/itls_client 应用程序工程,找到 res/raw/deviceinfo 文件,将 Product key 和 Product secret 填入相应的字段。测试阶段可以在这里填写每个设备的唯一标识到 deviceName 字段。

{
    "productKey": "<your_product_key>",
    "deviceName": "<unique_id_of_device>",
    "productSecret": "<your_product_secret>",
    "deviceSecret": "itls_secret",
    "subDevice": [
      {
          "productKey": "",
          "deviceName": ""
      },
      {
        "productKey": "",
        "deviceName": ""
    }
  ]
}
  1. 完成之后编译运行这个 APP,可使用自签证书对其进行签名,并输入打包好的 apk 文件,命名为 itls_client.apk,复制到 dps_sdk/client/prebuilt/itls_client.apk

  2. 重新编译系统镜象,此时这个 itls_client.apk 会被预装到目标设设备,开机自启动且在有网络连接的时候自动接入阿里云物联网平台。

  3. 按照文末的“确认集成已成功”进行验证。

说明

安全开发实践:

  • 上述的 Product Key 和 Product Secret 是产品账号的私密信息,强烈建议不要配置到 deviceinfo 明文,而是通过 nvram 烧录等方式配置到 ROM,并在 APP 当中通过接口获取;

  • 上述的 deviceName 由于当前产品的每个出货的设备个体都需要做到不相同且唯一,因此建议您根据自身设备 ID 对这个字段进行配置和获取(譬如使用 IMEI,MAC 或者烧录到 nvram 的设备ID 等)。

  • 请对上述 APP 进行改造,确保系统开机之后自动启动(注册 BOOT_COMPLETED broadcast receiver),以及网络切换之后重新激活。

  • 其它隐藏 APP 界面,launcher 图标等您可自行决定处理。

方法二:自定义客户端接入上云

如果希望自定义客户端接入时,可使用 SOC 提供的客户端示例代码,自行修改后完成客户端上云。

客户端示例代码位于 SDK 的 client 目录下供您参考。您也可以独立编译,编译步骤如下:

  1. 请在 dps_sdk.mk 的 PRODUCT_PACKAGES 列表中添加 cloud_agent_example 项。

  2. 请自行在 Android init.rc 文件中启动客户端服务。并在 SDK 的 packages/service.ini 文件当中注释掉 “start sagent”项目。

  3. 按照正常方式编译设备镜像,cloud_agent_example 会被编译至镜像的 /system/bin/ 目录下。

4,确认集成已成功

上述两种方法,无论采用哪一种,在集成成功,设备上线之后,即可在阿里云物联网平台“设备管理”--“设备”以及 阿里云物联网安全中心 接入管理 -- 直连设备 -- 设备列表 页面看到设备接入条目。

在物联网安全运营中心管理控制台中对此设备进行“取证”操作,稍置一段时间后(约5分钟),界面提示取证通过。即表明集成成功。