隐私合规:移动SDK安全要求及测试内容

SDK基本安全要求

a) 应确保分发过程具备有效的完整性校验机制,避免提供的代码、资源文件遭篡改。

b) 应确保分发包、Demo包内不包含病毒、木马等恶意程序。

c) 应避免调试信息函数输出通信日志、关键变量等敏感信息。

d) 应避免分发包、Demo包内残留内网URL、测试账号、测试数据等测试信息。

e) 应避免嵌入与业务功能无关的插件、代码,或在分发包中私自打包提供其他SDK产品。

f) 申请系统权限应遵循最小必要原则,避免索要非实现业务功能所必须的权限。

数据存储安全要求 SDK数据存储安全要求

a) 应对存储于最终用户设备上的含有个人信息、重要数据的文件进行加密(如库表加密、文件加 密等),避免被宿主App、其他App、恶意程序等非法访问、篡改。

b) 宜对与宿主App或其他本地程序共同处理、使用的数据进行加密处理,并约定安全有效的解密方 案,确保数据的合法授权访问。

c) 应对存储于最终用户设备上的数字证书文件进行加密,避免数字证书泄露或遭非法篡改。

d) 应对存储于最终用户设备上的备份数据进行加密,避免备份数据泄露。

e) 应限制本地存储的配置信息、用户偏好等轻量数据读写权限,避免遭其他程序越权访问、篡改。

f) 宜限制个人信息、重要数据本地存储时间,确保到期数据自动删除。

g) 应避免本地存储去标识化数据与原始标识的对应关系信息,防止相关信息泄露导致去标识化失 效。

h) 应避免本地存储明文的鉴权信息(如账号、密码等),宜采用加随机盐的哈希值方式存储相关 数据,避免用户个人敏感信息泄露。

数据交互安全要求 SDK与宿主App、服务端数据交互应满足的安全要求

a) 应采用安全的传输协议确保SDK与服务端数据交互的机密性、完整性、可用性。

b) 涉及个人信息、重要数据传输的场景,应采用HTTPS等加密传输协议或对相关数据单独加密,确保个人信息加密传输。

c) 使用HTTPS传输协议时,宜开启SDK与服务端的双向验证机制,确保服务端身份真实性。

d) 使用HTTPS自定义证书时,应对服务端主机名进行校验,验证服务端主机身份。

e) 应使用安全的加密算法、密钥生成机制,避免使用不安全的加密算法(如RC4、AES ECB或OFB 工作模式等),避免加密算法破解。

重要组件安全要求

SDK使用系统功能组件应满足的安全要求如下:

a) 应在使用组件调用系统功能时确保其配置安全性,避免出现配置不合理导致的安全风险。

b) 应在使用组件调用系统功能时遵循最小必要原则,避免调用与实现业务功能无关的功能。

c) 调用网页视图(WebView)应确保其配置安全性,避免出现配置不合理导致的安全风险。

d) 调用网页视图(WebView)实现与服务端交互时,应符合5.1.3章节各项要求。

e) 宜在调用Intent组件时验证接收方合法性并对参数进行过滤,避免出现越权调用、隐式调用等 风险。

f) 宜在调用Intent组件时增加异常捕获机制,避免出现程序崩溃等风险。

代码及资源文件安全要求 SDK代码及资源文件安全要求

a) 宜采用代码混淆、加固等手段提高逆向分析的难度,降低关键函数、逻辑等泄露风险。

b) 宜对本地存储的so文件进行加固/混淆处理,避免敏感信息泄露。

c) 宜对本地存储的h5资源文件进行加密处理,避免资源文件遭篡改。

d) 如采用资源文件热更新技术,宜对文件解压文件名进行限制,避免更新的资源文件被非法获取。

e) 宜对本地存储的so文件进行地址空间随机化,降低缓冲区溢出攻击风险。

f) 宜对本地存储的so文件进行编译器堆栈保护,避免栈溢出时系统不对程序进行保护。

g) 宜对本地存储的密钥、证书进行加密,避免本地密钥、证书泄露或遭篡改。

h) 宜避免代码内存在硬编码或强耦合的URL地址,避免链接遭篡改。

SDK 安全测试项

SDK分发缺少完整性校验

风险描述:分发过程缺少完整性校验机制可能导致APP提供者获取伪造、遭篡改的SDK代码

测试方式:访问SDK下载渠道,查验是否提供hash值对比、签名证书等完整性校验机制

内含恶意程序

风险描述:分发包内含有病毒、木马等恶意程度对APP提供者、最终用户可能造成安全威胁

测试方式:解压缩SDK分发包,扫描是否含有恶意代码、木马等恶意程序

调试日志输出敏感信息

风险描述:调试信息函数输出日志可能泄露代码逻辑等敏感信息,导致安全风险

测试方法:反编译SDK代码,查验调试信息函数是否禁用,如未禁用则查验输出日志是否含有敏感信息

残留测试信息

风险描述:残留测试数据可能导致测试服务器地址、测试账号等信息泄露,威胁运维安全

测试方式:反编译SDK代码,查验是否残留服务器地址、测试账号等信息

内嵌无关插件、SDK

风险描述:与业务功能无关的插件、SDK等可能会携带恶意程序或造成其他安全风险

测试方法:解压缩SDK分发包,查验资源文件中是否存在与业务功能无关的插件、SDK等

索要非必要权限

风险描述:索要与实现SDK业务功能无关的非必要权限可能导致合规性风险

测试方法:核验SDK权限声明情况,比照业务功能,判断是否申请与业务功能无关的系统权限

数据明文存储

风险描述:本地明文存储数据,可能导致个人信息、重要数据等遭非法访问、篡改

测试方法:进入SDK本地数据存储路径,查验是否存在明文存储的数据库文件,如有则查验其内容是否存在敏感信息

共享数据明文存储

风险描述:SDK与本地程序共同处理、使用的数据未加密,可能导致数据越权访问风险

测试方法:进入宿主APP及SDK本地数据存储路径,结合技术文件查验是否存在明文存储的共享文件,如有则查验其内容是否存在敏感信息

数字证书明文存储

风险描述:明文存储的数字证书可能遭窃取、篡改,导致传输数据被截获、伪造传输请求等安全风险

测试方法:反编译SDK代码,查验资源文件中是否存在明文存储的证书文件

备份数据明文存储

风险描述:如sdk开启数据备份功能并以明文存储备份数据,可能导致备份数据遭越权访问

测试方法:反编译SDK代码,查验是否开启了数据备份功能,如是则进入SDK备份数据存储目录,查验备份数据是否是明文存储

数据全局可读写

风险描述:如开启轻量数据全局读写权限,可能导致本地存储的配置信息、用户偏好等信息遭越 权访问、篡改

测试方法:查阅 SDK 技术信息,查验 SDK 开发过程中是否关闭或限制轻量数据读写权限

数据超期存储

风险描述:如未限制数据存储周期,可能导致个人信、重要数据超期存储

测试方法:查阅SDK技术信息,查验SDK开发过程中是否限制本地数据存储周期,进入SDK本地存储路径,查验超出存储期限数据是否删除

标识对应关系本地存储

风险描述:如本地存储区标识化数据与原始标识的对应关系信息泄露,可能导致去标识化失效

测试方法:结合SDK技术信息查询,进入SDK本地存储路径,查验是否存在本地存储的标识化数据与原始标识的对应关系信息

鉴权信息明文存储

风险描述:如本地明文存储鉴权信息(如账号、密码等)可能导致用户个人敏感信息泄露

测试方法:结合SDK技术信息,查验SDK是否仅存储鉴权信息哈希值,且哈希值计算过程中添加了随机盐

敏感信息HTTP协议传输

风险描述:HTTP协议通信使用明文传输且不验证通信方的身份及完整报文,可能导致数据泄露、中间人攻击等安全风险

测试方式:抓取HTTP协议数据包进行分析,查验是否存在明文的个人信息、重要数据等敏感信息

敏感信息明文传输

风险描述:明文传输的数据可能遭截获,导致敏感信息泄露

测试方法:抓取通信流量并分析内容,查验是否可截获明文个人信息、重要数据等敏感信息

HTTPS未开启双向认证

风险描述:未开始HTTPS双向证书校验可能导致加密数据遭劫持、解密。导致数据泄露等风险

测试方法:配置证书文件并进行流量分析,查验是否使用了HTTPS单项认证机制

HTTPS未验证主机名

风险描述:缺少主机名校验机制,SDK可能与仿冒的服务器建立通信,导致中间人攻击

测试方法:反编译样品文件,查验是否使用了自定义SSL证书,如是则查验HTTPS相关设置是否开启主机名校验

随机数不安全使用

风险描述:随机数生成机制设置不当可能导致生产的随机数可被预测,威胁秘钥安全性

测试方式:反编译样品,查验是否使用了不安全的随机数方法

加密算法不安全使用

风险描述:对称加密算法相关设置不当可能导致加密失效,导致加密文件遭破解、传输数据遭截获等

测试方法:反编译样品文件,查验是否使用了不安全的AES/DES加密算法

系统组件的不安全配置

风险描述:系统组件策略、规则不安全配置可能导致相关组件遭恶意调用,为恶意行为提供便利

测试方法:反编译样品文件,查验组件调用过滤规则、调用路径是否存在不安全的配置

webview组件不安全配置

风险描述:webview组件加载网页、功能、资源时,如果存在不安全配置,可能导致数据泄露、劫持、篡改等风险

测试方法:反编译样品文件,查验webview相关功能是否存在不安全配置

intent越权调用

风险描述:intent组件调用未进行严格过滤,可能导致构造特殊格式的URL越权调用activity组件

测试方法:反编译样品文件,查验intent调用是否进行了严格过滤

intent隐私调用漏洞

风险描述:使用隐式intent调用时,并未对消息接受方进行限制,可能导致intent内容泄露

测试方法:反编译样品文件,查验是否隐私调用了intent函数

应用本地拒绝服务漏洞

风险描述:如调用intent函数是未校验输入参数,如存在异常输入,可能导致崩溃

测试方法:对intent导出的组件传递一个不存在的序列化对象,查验是否导致程序进程崩溃

代码未混淆、加固

风险描述:代码未进行混淆、加固可能降低反编译难度,易暴露代码逻辑,导致安全机制遭绕过、破解等风险

测试方法:反编译文件,查验代码关键类名、逻辑、赋值等是否进行混淆处理

so文件未混淆、加固

风险描述:so文件包含动态链接库文件,未混淆、加固可能导致代码运行逻辑等信息泄露

测试方法:反编译样品文件,静态扫描代码文件,查看样品文件是否对so文件进行混淆加固

未限制解压文件名

风险描述:热更新禁止未限制解压文件名可能导致文件被解压到任意路径,导致恶意文件覆盖正常文件

测试方法:反编译样品文件,查验是否使用ziparchive实现解压功能且允许任意文件名

动态加载dex文件篡改

风险描述:热更新机制允许动态加载dex文件且未限制dex编辑,可能导致目标文件被篡改

测试方法:反编译样品文件,查验是否允许动态加载dex文件,如是,则检查dex文件是否可修改

未使用编译器堆栈保护技术

风险描述:向内存缓冲区内填充数据位超过缓冲区本身的容量,可能导致溢出的数据覆盖在合法数据上,导致内存中执行的程序地址被修改

测试方法:反编译样品文件,查验so文件是否使用了编译器堆栈保护技术

未使用地址空间随机化技术

风险描述:如应用程序的地址空间布局固定,其区域的基地址可能被获取,导致注入代码被执行

测试方法:反编译样品文件,查验so文件是否使用了地址空间随机化技术

秘钥明文硬编码

风险描述:代码中存在秘钥信息硬编码,可能导致鉴权信息泄露、加密流程遭破解

测试方法:反编译样品文件,查验代码内加密函数、方法是否存在明文的硬编码秘钥信息

URL信息硬编码

风险描述:代码内存在URL明文信息,可能导致后端服务器域名、接口等信息泄露

测试方法:反编译样品文件,查验代码内是否存在明文URL地址信息

猜你喜欢

转载自blog.csdn.net/m0_38036918/article/details/131397182
今日推荐