本文作者:杉木@涂鸦智能安全实验室

鸿蒙应用开发

快速入门-入门 - 华为HarmonyOS开发者

这部分网上很多,官方也提供了很详细的开发文档,本文关注重点不在于此,不在赘述。

鸿蒙安全实现

鸿蒙生态应用安全技术白皮书-鸿蒙生态应用白皮书 - 华为HarmonyOS开发者

这里分析的鸿蒙安全实现具体参考鸿蒙生态应用白皮书V2.0,华为为了解决Android应用常见的风险做了不少安全设计;

其中列了5个android常见的应用风险,

  1. 诱导用户下载安装恶意应用
  2. 窃取用户数据
  3. 强制推送广告
  4. 利用漏洞攻击其他应用程序
  5. 盗版软件

请添加图片描述

一、开发阶段

1. 开发者注册和实名认证

注册账号-注册认证 - 华为HarmonyOS开发者

认证后需要申请开发者证书,平台保存公钥,开发者自行保存私钥,这里跟安卓区别就是不在是自签证书了;申请发布证书-发布应用(APP)-发布应用-AppGallery Connect(HarmonyOS 3.1/4.0及以下) - 华为HarmonyOS开发者

然后证书分为调试证书和发布证书,

  • 调试证书只能用户本地设备上调试,证书上有设备ID白名单以及名单上限;
  • 发布证书用于正式上架申请,只有审核通过的应用才可以上架华为应用市场和安装使用,跟iOS应用市场类似;

2. 代码安全检查

代码Code Linter检查-代码检查-代码编辑-编写与调试应用 - 华为HarmonyOS开发者

@security/no-commented-code-安全规则@security-Code Linter代码检查规则-代码检查-代码编辑-编写与调试应用 - 华为HarmonyOS开发者

请添加图片描述

{
  "files": [
    "**/*.ets"
  ],
  "ignore": [
    "**/src/ohosTest/**/*",
    "**/src/test/**/*",
    "**/src/mock/**/*",
    "**/node_modules/**/*",
    "**/oh_modules/**/*",
    "**/build/**/*",
    "**/.preview/**/*"
  ],
  "ruleSet": [
    "plugin:@performance/recommended",
    "plugin:@typescript-eslint/recommended"
  ],
  
  //具体规则,可以看到基本上只有加密算法的安全使用规则,而且不支持自定义规则
  "rules": {
    "@security/no-unsafe-aes": "error",
    "@security/no-unsafe-hash": "error",
    "@security/no-unsafe-mac": "warn",
    "@security/no-unsafe-dh": "error",
    "@security/no-unsafe-dsa": "error",
    "@security/no-unsafe-ecdsa": "error",
    "@security/no-unsafe-rsa-encrypt": "error",
    "@security/no-unsafe-rsa-sign": "error",
    "@security/no-unsafe-rsa-key": "error",
    "@security/no-unsafe-dsa-key": "error",
    "@security/no-unsafe-dh-key": "error",
    "@security/no-unsafe-3des": "error"
  }
}

3. 代码混淆

代码混淆-加固构建-编译构建-DevEco Studio - 华为HarmonyOS开发者

请添加图片描述

这块还是需要研发需要有相关安全知识,能知道哪个模块涉及安全内容需要开启混淆;

二、发布阶段

1. 应用检测与审核

发布到平台,平台会对发布应用进行审核,当然这里不大可能会公开具体的审核规则,只能根据白皮书文档的文字描述来看,平台会审核哪些部分的内容;

  • 权限检测
  • 行为检测
  • 隐私政策检测
  • 恶意应用检测
  • 生态规则检测

安全测试 - 华为HarmonyOS开发者

官方提供的应用安全测试用例写的很详细,可以根据官方的安全测试用例文档来整理扫描规则,然后套用mobsf的框架把相关反编译工具放进去进行静态扫描,已实现自定义扫描规则的目的;

只不过目前还没有相关开源工具实现,大概率是没有这个需求,因为如果是企业内部只需要使用华为应用平台的扫描能力即可,根据白皮书的描述平台的扫描是包含了这部分内容,如果是要检测华为应用市场的其他应用,下下来的安装包可能存在加密;

2. 应用加密

应用加密-安全-系统 - 华为HarmonyOS开发者

加密内容:

  • .abc文件除了文件头外,全部进行加密。
  • 当前.so文件默认不进行加密,后续可能支持按照开发者配置进行.so文件的加密

加密算法:

  • AES,但是没有找到具体的加密算法,加密key估计是保存在系统提供安全存储里边,后面会讲系统提供的安全能力这块内容;

加密影响:

  • 加密后的应用在程序启动和运行过程中可能会小幅度增加性能开销。
  • 加密后的应用相比于不加密的应用体积更大,可能会小幅度增加下载和安装时间。

3. 应用签名

上架应用市场后,平台会对审核通过的应用重新签名,也就是说开发者的签名是平台对开发者的审核,而重新签名是平台对审核通过后的应用的安装凭证;

也是防止应用热更新,运行时加载这类情况的出现,这类场景需要走平台申请,然后加白的方式才可以;

三、运行阶段

这部分在白皮书中的介绍可以说非常详细了,我这里就简单总结一下一些设计理念,以及在android中没有的东西;

1. 分级安全机制

HarmonyOS 将应用分为三个 APL(Ability Privilege Level):normal,system basic 和
system core,应用默认是normal,特殊权限要走平台申请;

2. 安全控件

安全-系统 - 华为HarmonyOS开发者

华为利用系统安全能力提供了很多安全控件给到开发者使用,具体可以参考文档,这里列两个常见的kit;

Crypto Architecture Kit(加解密算法框架服务)

Universal Keystore Kit(密钥管理服务)

3. Picker

Picker 是系统提供的一组系统实现的数据选择接口,不同于安全控件,开发者不需要集
成 picker 到应用中。应用可以直接调用系统 Picker 接口。

提供了八种picker:照片、文件、音频、相机、联系人、扫码、卡证识别、文档扫描;

4. 其他

系统根据TEE提供不少安全能力,这样也是android目前所不完全具备的;

  1. 安全存储
  2. 受控分享
  3. 系统AI接入运行时安全检测
  4. 金融级相关的安全能力

鸿蒙应用安全测试

安全测试 - 华为HarmonyOS开发者

文档列了非常详细的测试用例,其中包含了鸿蒙应用会存在的各类问题,以及对应的测试方式,但是对于企业而言,测试侧目前较难落地执行,因为缺乏相关自动化和半自动的扫描工具,而且测试侧也没有代码权限;而对于研发来说,基本依赖平台开发工具插件和平台扫描来处理,也不大可能让研发执行这些测试用例,所以目前自动化的工具还比较缺乏,暂时无法落地这块测试用例。

反编译工具

1. Disassembler反汇编工具

Disassembler反汇编工具-ArkTS编译工具链-ArkTS(方舟编程语言)-应用框架 - 华为HarmonyOS开发者

官方提供的反汇编工具;反汇编出来的是华为定义的方舟字节码;方舟字节码概述-方舟字节码-ArkTS编译工具链-ArkTS(方舟编程语言)-应用框架 - 华为HarmonyOS开发者

2. adc-decompiler

ohos-decompiler/abc-decompiler

开源反编译工具,基于 jadxabcde 实现的鸿蒙 abc/方舟字节码 的反编译工具。看代码的更新速度应该跟不上官方的迭代,准确度大概率不高。

3. adcD

.abcD

在线商业反编译工具;

4. adcde

ohos-decompiler/abcde

将方舟字节码(.abc)反编译为JavaScript代码,支持在线和离线使用,提供API密钥验证;

5. apktoolm鸿蒙版

手机端反编译工具;

静态扫描工具

1. Code Linter插件

工具简介-DevEco Studio - 华为HarmonyOS开发者

官方开发者工具的插件,目前不支持自定义规则;

2. SonarQube(适配鸿蒙)

需要部署服务以及自定义规则;

鸿蒙应用可能存在的安全风险

  1. 代码混淆需要业务自行判断业务模块是否需要开启;
  2. 官方不提供加固方案,只能找三方进行加固;
  3. 应用加密需要平台上架的时候勾选,且会存在启动延迟的问题,会存在大部分业务方不愿意启动;
  4. 跟android类似的问题,对外组件暴露、webview类似的跨端问题等,偏业务属性的问题,平台依旧无法扫描识别,只不过目前在鸿蒙的平台上的利用相对比较封闭或者说没有那么多的研究,但是这类问题依旧存在;
  5. 隐私合规相关的问题,这类问题平台虽然说了可以扫描识别,但是也不能完全避免,还是需要隐私合规条款的相关处理;

企业开发鸿蒙应用安全实现注意

既然目前暂时无法针对测试用例进行落地,但是在研发侧鸿蒙也提供了很多安全支持,这里针对平台能力之外的其他部分,整理了一份研发开发鸿蒙应用时需要注意的地方;

一、App混淆与加密

1.ArkGuard

发布的APP以及对外的SDK均需要使用ArkGuard混淆

2.字符串混淆

逆向者可以通过搜索字符串找到目标逻辑代码,混淆字符串可以让逆向人员无法通过此方式快速定位逻辑代码

3.应用加密

应用在上架时,需要选择加密

二、密钥管理与敏感数据加密

1.密钥管理

鸿蒙支持两套密码学API:

Crypto Architecture Kit:直接在当前应用上下文进行计算,通常用于临时会话密钥或者仅在内存中出现的非持久化密钥的场景。

Universal Keystore Kit:提供了密钥管理能力,会把密钥以及整个计算过程放在TEE中,密钥不出TEE。对于持久化密钥,都需要使用此框架。对于过程中高度敏感的临时密钥,也需要使用此框架。

保存在Universal Keystore Kit中的密钥,优先考虑设置成需要经过用户认证后才能使用。

2.敏感数据加密

建议使用Asset Store Kit保存敏感数据,为了逻辑的一致性,也可以考虑使用安卓和IOS版App上在用的mmkv,但是mmkv的密钥及加解密需要使用Universal Keystore Kit来进行。

三、唤醒及跨进程通信

1.唤醒

原则上,应用唤醒使用App Linking

2.跨进程通信

需要做好认证及严格的消息格式检查

四、业务开发

这块需要注意的与android区别不大,

1. 权限

在应用申请权限时应保持最小权限原则;申请权限定义信息完整;

2. 接口权限

敏感接口权限校验,涉及到个人数据或者敏感个人数据的对外交互组件或者接口是否校验调用者权限;

3. 应用Ability对外设置

不对外交互的Ability的visible属性为false;

对外交互的Ability应设置合理的访问权限;

4. web组件、want等

相关组件的入参检查、url过滤,黑白名单的方式;JavaScriptProxy属性配置检查

5. 文件路径

文件访问路径检查,防止路径穿越、文件路径拼接等而导致的沙盒绕过的问题;

6. 隐私合规相关

这块基本与android保持一致,跟监管相关;

学习资料

ohos-decompiler/Awesome-HarmonyOS-Reverse-Engineering

漏洞悬赏计划:涂鸦智能安全响应中心(https://src.tuya.com)欢迎白帽子来探索。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐