前言
应用加固是一种用于提高软件安全性的技术,通过增加代码复杂性和模糊性来保护知识产权、防止逆向工程、提高安全性和降低反盗版风险。在HarmonyOS中,开发者可以通过配置Dev Eco Studio的混淆选项和使用第三方混淆和加固。
一、应用资产保护设计
首先我们讨论应用资产保护设计,HarmonyOS应用的典型应用资产主要包括代码资产、用户数据资产、安全密钥资产、数据库资产等,其中数据库资产主要在服务器侧,由应用自行对齐保护。根据不同的资产类型当前HarmonyOS系统提供相应的机制进行保护。
业务方案:
1、保护应用代码:
保护应用代码主要是为了防止而已攻击者对应用程序进行反向工程和盗用。
2、保护用户数据:
用户数据包括用户的个人信息、账号信息、交易记录、位置信息等等。
3、保护应用密钥:
密钥是用于加密和解密数据的关键,如果密钥泄露,攻击者可以轻松地获取加密数据的明文,从而导致数据泄露和安全问题。
二、代码混淆
代码混淆方案是基于源码混淆,为了保护应用者的代码,避免应用被恶性逆向分析,提高攻击者分析代码的难度。DevEco Studio中默认提供了代码混淆能力,混淆后的JS、TS、ArkTS代码,不容易被逆向后读懂,混淆功能支持对名称进行混淆,包括对类、方法等做混淆处理。
1、开启混淆
从的DevEco Studio版本Beta1开始,hvigor插件提供代码混淆功能。
混淆开启条件:
工程为Stage模型。
在Release编译模式下。
模块build-profile.json5文件中开启混淆配置。
"arkOptions": {
"obfuscation": {
"ruleOptions": {
"enable": true // 配置true,即可开启代码混淆功能
}
}
}
满足上述开启混淆条件后,选择目标模块点击Build -> Make Module选项开始编译。
2、混淆配置
在工程的每个模块下都能找到build-profile.json5文件,可以在该文件中配置当前模块是否开启混淆以及开启混淆时按照哪个混淆配置文件进行混淆。
混淆配置文件obfuscation-rules.txt默认开启了四项推荐的混淆选项:
-enable-property-obfuscation
-enable-toplevel-obfuscation
-enable-filename-obfuscation
-enable-export-obfuscation
开启混淆之后,如果需要更高级的混淆能力,可以通过配置混淆规则实现。
后续补充
3、使用第三方加固
除了DevEco Studio提供的代码混淆能力,开发者还可以使用第三方安全厂商提供的高级回校和加固能力。
4、调试
经过混淆工具处理后的代码名称会发生更改,这可能会使运行时crash堆栈日志难以理解,因为堆栈与源代码不一致。
此外,开启-enable-property-obfuscation、-enable-toplevel-obfuscation等选项,代码混淆可能会引发运行时crash或者是功能性错误,需要开发人员还原报错堆栈来排查定位哪些名称与属性需要配置白名单来保障功能正常。
5、反混淆
hstack是DevEco Studio为开发人员提供的用于将release应用混淆后的crash堆栈还原为源码对应堆栈的工具,支持Windows、Mac、Linux三个平台。
后续补充hstack
三、应用加密
由于应用加密特性对应用冷启动时延有影响,本特性当前通过白名单的方式受限开放,具体申请流程和方式请见选取待发布的软件包-步骤3。
能力简介
为了保护应用代码安全,保护开发者的核心资产,HarmonyOS提供了端到端的应用代码保
护机制,该机制以系统安全为基础,构建内核级应用生命周期内的代码安全保护能力。
开发者向应用市场提交上架申请,上传应用包后可选择是否加密
选择加密的应用,在经过应用市场审核后,应用市场会对上架应用做代码加密。应用在设备
上安装时,安装文件落盘后仍是处于加密状态,有效的保护应用程序;当应用程序启动时按
需解密。
应用加密采用标准AES加密算法,解密后的明文只存在于内存中,不会存储到设备,形成端
到端的加密方案,有效地提高应用程序的安全性。
系统级应用加密具体有如下优点:
应用端到端加密,应用启动后再按需解密执行。
系统级的解密优化,相对于传统加壳等加固方式对性能的影响更小。
加密影响
1、加密后的应用在程序启动后和运行过程中可能会小幅度增加性能开销。
2、加密后的应用相比不加密的应用体积更大,可能会小幅度增加下载和安装时间。
注意:
加密对应用的性能影响与被加密的代码文件大小成正相关,应用的.abc文件越大对应用冷启
动时延的影响越大。
加密效果
****加密对象为应用内编译后的代码文件,覆盖.abc文件,加密前的代码文件可被反编译,加密后的代码文件安全性会有很大提升,提高逆向分析的难度。
注意:
.abc文件除了文件头外,全部进行加密。
当前.so文件默认不进行加密,后续可能支持按照开发者配置进行.so文件的加密。
四、关键资产存储
关键资产存储(Asset Store)提供了关键敏感的隐私数据的本地加密存储,应用可以将用户高安全敏感的关键资产短数据(如用户的APP账号密码,银行卡号等)在本地加密存储,加密这些数据的密钥存储在安全的隔离区,只有合法的应用才能访问并解密这些数据。
编辑
基于属主的访问控制: 所有的关键资产都受属主访问控制保护,业务无需设置。
- 只允许关键资产被其属主(写入该关键资产的业务)访问。
- 关键资产属主身份由ASSET从系统服务中获取,即使业务身份被仿冒,仿冒者也无法获取到其他业务的数据。
- 关键资产加/解密时,其属主身份参与了完整性保护,即使关键资产属主身份被篡改,攻击者也无法获取到其他业务的数据。
基于锁屏状态的访问控制: 分为以下三种保护等级(安全性依次递增),业务可根据实际情况设置任意一种,若不设置,则默认保护等级为“首次解锁后可访问”。
- 开机后可访问:关键资产在开机后被允许访问。
- 首次解锁后可访问:关键资产在首次解锁后被允许访问。
- 解锁时可访问:关键资产仅在处于解锁状态时被允许访问。
基于锁屏密码设置状态的访问控制: 该访问控制默认不开启,业务可根据实际情况决定是否开启。
- 在用户设置了锁屏密码后,关键资产才被允许访问。
基于用户认证的访问控制: 该访问控制默认不开启,业务可根据实际情况决定是否开启。
- 关键资产在用户身份认证通过后被允许访问。
- 任意一种认证方式(指纹、人脸、PIN码)通过,均可授权本次关键资产的访问。
- 业务可通过设置认证有效期,达成一次用户认证、授权多个关键资产访问的效果。认证有效期最长可设置10分钟。
五、密钥管理
Universal Keystore Kit(密钥管理服务,下述简称为HUKS)向业务/应用提供各类密钥的统一安全操作能力,包括密钥管理(密钥生成/销毁、密钥导入、密钥证明、密钥协商、密钥派生)及密钥使用(加密/解密、签名/验签、访问控制)等功能。
密钥管理的基本概念
- 密钥生成:使用安全的随机数生成器生成密钥。
- 密钥存储:将密钥存储在安全的环境中,如硬件安全模块(HSM)或可信执行环境(TEE)。
- 密钥分发:安全地将密钥分发给需要的用户或系统。
- 密钥使用:在加密、解密、签名和验证等操作中使用密钥。
- 密钥轮换:定期更换密钥以减少密钥泄露的风险。
- 密钥撤销:在密钥泄露或不再需要时,撤销密钥的使用权限。
- 密钥销毁:在密钥生命周期结束时,安全地销毁密钥。
密钥管理的技术手段
- 硬件安全模块(HSM) :提供物理层面的密钥保护。
- 可信执行环境(TEE) :在设备内部提供一个隔离的安全区域来处理敏感数据。
- 密钥管理服务(KMS) :集中管理和分发密钥,提供密钥生命周期管理功能。