SDK安全专项行动”是中国信息通信研究院安全研究所大数据应用与安全创新实验室共同发起的,实验室紧跟信息技术发展趋势,依托数据安全、移动安全等领域深厚积累,通过前瞻研究和实践探索,形成了完整的SDK评测方案和指标体系。
SDK产业安全热点、痛点,内容覆盖产品基础安全、数据存储安全、数据交互安全、重要组件安全、代码及资源文件安全5大方面,检验工作在中国信通院搭建的标准化环境中进行。
SDK基本安全要求
1.应确保分发过程具备有效的完整性校验机制,避免提供的代码、资源文件遭篡改。
2.应确保分发包、Demo包内不包含病毒、木马等恶意程序。
3.应避免调试信息函数输出通信日志、关键变量等敏感信息。
4.应避免分发包、Demo包内残留内网URL、测试账号、测试数据等测试信息。
5.应避免嵌入与业务功能无关的插件、代码,或在分发包中私自打包提供其他SDK产品。
6.申请系统权限应遵循最小必要原则,避免索要非实现业务功能所必须的权限。
数据存储安全要求
1.应对存储于最终用户设备上的含有个人信息、重要数据的文件进行加密(如库表加密、文件加密等),避免被宿主App、其他App、恶意程序等非法访问、篡改。
2.宜对与宿主App或其他木地程序共同处理、使用的数据进行加密处理,并约定安全有效的解密方案,确保数据的合法授权访问。
3.应对存储于最终用户设备上的数字证书文件进行加密,避免数字证书泄露或遭非法篡改.
4.应对存储于最终用户设备上的备份数据进行加密,避免备份数据泄露。
5.应限制本地存储的配置信息、用户偏好等轻量数据读写权限,避免遭其他程序越权访问、篡改。
6.宜限制个人信息、重要数据本地存储时间,确保到期数据自动删除。
7.应避免本地存储去标识化数据与原始标识的对应关系信息,防止相关信息泄露导致去标识化失效。
8.应避免本地存储明文的鉴权信息(如账号、密码等),宜采用加随机盐的哈希值方式存储相关数据,避免用户个人敏感信息泄露。
数据交互安全要求
SDK与宿主App、服务端数据交互应满足的安全要求如下∶
1.应采用安全的传输协议确保SDK与服务端数据交互的机密性、完整性、可用性。
2.涉及个人信息、重要数据传输的场景,应采用HTTPS等加密传输协议或对相关数据单独加密,确保个人信息加密传输。
3.使用HTTPS传输协议时,宜开启SDK与服务端的双向验证机制,确保服务端身份真实性。
4.使用HTTPS自定义证书时,应对服务端主机名进行校验,验证服务端主机身份。
5.应使用安全的加密算法、密钥生成机制,避免使用不安全的加密算法(如RC4、AESECB或OFB工作模式等),避免加密算法破解
重要组件安全要求
SDK使用系统功能组件应满足的安全要求如下∶
1.应在使用组件调用系统功能时确保其配置安全性,避免出现配置不合理导致的安全风险。
2.应在使用组件调用系统功能时遵循最小必要原则,避免调用与实现业务功能无关的功能。
3.调用网页视图(WebView)应确保其配置安全性,避免出现配置不合理导致的安全风险。
4.调用网页视图(WebView)实现与服务端交互时,应符合5.1.3章节各项要求。
5.宜在调用Intent组件时验证接收方合法性并对参数进行过滤,避免出现越权调用、隐式调用等风险。
6.宜在调用Intent组件时增加异常捕获机制,避免出现程序崩溃等风险。
代码及资源文件安全要求
1.宜采用代码混淆、加固等手段提高逆向分析的难度,降低关键函数、逻辑等泄露风险。
2.宜对本地存储的so文件进行加固/混淆处理,避免敏感信息泄露。
3.宜对本地存储的h5资源文件进行加密处理,避免资源文件遭篡改。
4.如采用资源文件热更新技术,宜对文件解压文件名进行限制,避免更新的资源文件被非法获取。
5.宜对本地存储的so文件进行地址空间随机化,降低缓冲区溢出攻击风险。
6.宜对本地存储的so文件进行编译器堆栈保护,避免栈滥出时系统不对程序进行保护。
7.宜对本地存储的密钥、证书进行加密,避免本地密钥、证书泄露或遭篡改。
8.宜避免代码内存在硬编码或强耦合的URL地址,避免链接遭篡改。