# iOS M3常见安全问题处理方案
# 适用人群
所有用户。
用户对M3进行了安全扫描,针对安全扫描后的对应问题应对处理方案做下陈述:
# 包含不仅限于下表内容
序列号 | 设备 | 安全问题 | 安全风险问题描述 | 风险等级 | 第三方评估详情 | 第三方修复建议 | 修复状态 | 研发回复 | 影响版本 |
---|---|---|---|---|---|---|---|---|---|
1 | iOS | InnerHTML 的 XSS 攻击风险 | 该应用存在 InnerHTML 的 XSS 攻击风险 | 高 | 高 | 建议开发者使用函数封装 | 无需改动 | 检测到的仅为显示页面,不涉及操作和敏感信息 | 所有 |
2 | iOS | 是否存在注入攻击风险 | 在iOS越狱环境下,越狱插件通过DYLD_INSERT_LIBRARIES环境变量注入dylib动态库,从而执行恶意代码或插件,HOOK应用程序关键函数,打乱程序执行流程,危害程序信息安全。 | 高 | 高 | 建议客户端对dylib注入进行检测 | 无需改动 | 暂不支持,苹果系统安全性较高 | 所有 |
3 | iOS | 是否存在篡改和二次签名打包的风险 | 应用被篡改后二次打包不仅损害开发者的利益,而且也使APP用户遭受到不法应用的恶意侵害。 | 高 | 高 | 建议开发者校验 embedded.mobileprovision 文件中的 teamID 是 否是应用的 teamID,或者判断 BundleID 是否被修改 | 无需改动 | 线上app对二次签名有加固处理,改变包名不可使用 | 所有 |
4 | iOS | 反dylib注入 | 在iOS越狱环境下,越狱插件通过DYLD_INSERT_LIBRARIES环境变量注入dylib动态库,从而执行恶意代码或插件,HOOK应用程序关键函数,打乱程序执行流程,危害程序信息安全。 | 高 | 高 | 建议客户端对dylib注入进行检测 | 无需改动 | 暂不支持,苹果系统安全性较高,可客开开发,也可提产品需求; | 所有 |
5 | iOS | 客户端未设置证书校验 | 客户端未设置证书校验 | 中 | 中 | 建议客户端设置证书校验 | 无需改动 | 暂不支持,苹果系统安全性较高,可客开开发,也可提产品需求; | 所有 |
6 | iOS | 是否存在格式化字符串漏洞 | 中 | 中 | 发现存在格式化字符串漏洞 fprintf fscanf printf sprintf sscanf vsprintf | 无需改动 | 使用到的函数是苹果官方支持的方式,无需去做封装处理 | 所有 | |
7 | iOS | 是否存在创建可执行权限内存风险 | 通过 mprotect 函数,可以修改内存空间的读写属性,使内存空间 具备可读可写可执行权限。 | 中 | 中 | 建议开发者不要使用 mprotect 函数修改内存空间读取权限。 | 无需改动 | 检测到的mprotect函数,未使用来对内存空间读取权限 | 所有 |
8 | iOS | 输入记录保护 | iOS中安装了键盘记录程序(可以在非越狱状态运行),则使用系统键盘输入的内容易被键盘记录程序记录,导致内容泄露 | 中 | 中 | 使用自定义软键盘。参考https://github.com/ibireme/YYKeyboardManager | 需要客开添加 | 所有 | |
9 | iOS | 屏幕录像保护 | 和输入记录类似,恶意程序可以对用户输入的敏感信息(主要是密码)进行窃听。 | 中 | 中 | 重写输入框避免字符变化。 | 无需改动 | 目前M3中密码框的录屏操作会被苹果自动屏蔽,也就是显示空白;另,M3可提示用户截屏操作,并上传截屏记录。 | 所有 |
10 | iOS | 软键盘随机化排布 | 在使用自定义软键盘进行敏感信息输入的情况下,有可能被恶意软件进行屏幕点击位置劫持,获取对应的点击位置,得到其输入内容 | 中 | 中 | 每次调用键盘时候,需要对键盘进行随机化排布(通常是利用数组表示键排布,则需要对数组进行随机打乱)。 | 需要客开添加 | 所有 | |
11 | iOS | 在敏感数据输入时是否使用不安全的系统键盘 | 系统会启动输入法的自动更正提示,在用户输入过程中利用缓存的 输入记录来更正用户的输入,而这些输入记录都是明文存储在本地 缓存文件中,可被导出查看;系统键盘可被录屏并进行输入还原。 | 中 | 中 | 在敏感数据输入时使用专业的安全键盘,可以有效防止输入敏感内 容时被监听。 | 需要客开添加 | 所有 | |
12 | iOS | 代码混淆 | 检测 iOS 应用的源代码是否经过混淆处理。 | 中 | 中 | 1.使用静态检测引擎对 IPA 文件进行解压缩。2.对解压缩后的文件进行分析,提取相关函数信息3.检查函数名称是否被混淆为无意义的名称,发现存在未混淆的函数名。 | 无需改动 | 一、苹果安全机制本就很高,逆向难度很大二、代码混淆会影响上架苹果审核 | 所有 |
13 | iOS | 弱哈希算法使用漏洞 | 弱 HASH 算法指安全级别低的 HASH 算法,包括 SHA1 和 MD5。 | 低 | 低 | 开发者自查应用开发中勿使用 CC_SHA1 的方式进行数据哈希,推荐使用 CC_SHA256 算法进行数据哈希操作 | 无需改动 | m3中使用到的hash目前主要为md5、sha1,针对此类使用,目前不会存在安全问题。版本目部分使用SM国密算法。 | 所有 |
14 | iOS | 越狱设备运行风险 | 程序中使用弱 HASH 算法时,HASH 算法可能被黑客攻击导致 | 低 | 低 | 越狱指充分开放 iOS 系统的用户操作权限,将用户对系统的操作权限由越狱前的读提到读写,可以任意擦写系统任意区域的运行状态。 | 无需改动 | M3对app有越狱检测,并会弹框提醒 | 所有 |
15 | iOS | 动态库文件信息是否可被读取 | HASH 校验方法失效。HASH 校验方法失效可能造成客户端隐私数 | 低 | 低 | 无需改动 | 检测到的库均为苹果系统库,本就支持调用 | 所有 | |
16 | iOS | 是否存在日志数据泄露风险。 | 据泄露、文件被篡改、传输数据被获取等后果,导致用户敏感信息 | 低 | 低 | 调试信息函数 NSLog 和 printf 可能输出重要的调试信息,其中包含 的信息可能导致用户信息泄露,泄露核心代码逻辑等,为发起攻击提供便利 | 无需改动 | 线上版本无日志输出,已屏蔽 | 所有 |
17 | iOS | 是否使用 URL Schemes。 | 被窃取。 | 低 | 低 | 如果 URL Scheme 只是启动打开应用,没有传输信息或操作应用内的逻辑可以忽略本检测项。 | 无需改动 | APP中使用到的地方是加参数打开对应的页面 | 所有 |
18 | iOS | 是否存在外部函数显式调用风险。 | 攻击者可以通过静态分析程序中的外部函数调用关系,获取和跟踪 程序逻辑,然后对外部函数调用进行 HOOK 拦截、篡改业务逻辑等 | 低 | 低 | 建议通过定义函数指针,并通过函数指针的方式调用函数,从而消 除函数间的调用关系。 | 无需改动 | 检测到的函数调用是苹果支持或者推荐的方式 | 所有 |
19 | iOS | 出口合规证明信息是否正确 | 上架需要勾选加密选项 | 低 | 低 | 无需改动 | M3上架无需出口合规证明信息 | 所有 | |
20 | iOS | 是否存在系统调用暴露风险。 | iOS系统提供了大量的共享库供开发者使用应用程序使用了这些封装的库函数,编译后很容易通过反编译工具找到函数内的调用关系,攻击者可以通过分析函数的调用关系,来获取核心业务逻辑,对关键系统函数进行HOOK 拦截,导致信息泄漏等 | 低 | 低 | 建议开发者在代码中封装关键系统函数,不调用外部的系统函数。 | 无需改动 | 检测到的函数调用是苹果支持或者推荐的方式 | 所有 |
21 | iOS | xml文件中是否存在敏感信息 | 低 | 低 | 无需改动 | 检测到的xml仅为错误显示页面中的key | 所有 | ||
22 | iOS | js文件中是否存在敏感信息 | 低 | 低 | 无需改动 | 检测到的仅为key,不包含敏感信息的值 | 所有 | ||
23 | iOS | 是否存在超大的自定义函数。 | 过于庞大的接口函数,不仅不便于维护,而且容易产生可被攻击者利用的安全漏洞,严重影响程序本身的安全。 | 低 | 低 | 建议开发者避免编写超大函数 | 无需改动 | 存在,无需修改,对业务执行没有影响 | 所有 |
24 | iOS | 是否存在缓冲区溢出漏洞 | 缓冲区溢出指系统对接收的输入数据长度没有进行有效检测,向缓 冲区内填充数据超过了缓冲区本身的容量,导致数据溢出到被分配 空间之外的内存空间,使得溢出的数据覆盖了其他内存空间的数据。 | 低 | 低 | 建议开发者自查,使用苹果推荐的替代函数,如strlcpy、strlcat。iOS 底层框架也会使用存在缓冲区溢出漏洞的API,请根据实际情况修复 | 无需改动 | 以上函数只存在与部分三方库文件,目前长期稳定使用,未发现问题 | 所有 |
25 | iOS | 中是否调用 malloc 方法 | 低 | 低 | 无需改动 | malloc存在少量的使用,并对使用后及时释放 | 所有 | ||
26 | iOS | 是否存在 Web Storage 数据泄露风险 | 低 | 低 | 无需改动 | 需要使用,存敏感数据会加密处理 | 所有 | ||
27 | iOS | 二进制程序保护 | 编译好的可执行文件可以容易地被Hopper或者IDA这类软件反编译。在没有进行函数名和逻辑混淆的时候,则容易被反汇编得到关键逻辑进而进行破解 | 低 | 低 | 利用iOS ClassGuard可以进行类名混淆,利用LLVM-obfuscator进行相关的逻辑混淆 | 无需改动 | 苹果审核机制是不允许代码混淆的,如被发现有被拒风险。标准产品无需做代码混淆。 | 所有 |
28 | iOS | 认证失败锁定 | 测试账户在登陆时候多次输入密码错误或修改密码时候多次错误是否会导致账号被锁定。 | 低 | 低 | 后台中,通过维护一张currentErrorMap(线性安全),使用用户名作为key,使用错误次数作为value;并且重写其add方法,检测其错误次数,如果错误次数达到阈值,则写入1到数据库中isLocked字段中,禁止登陆。 | 无需改动 | pc管理端可以设置出现错误次数后锁定 | 所有 |
29 | iOS | 界面切换保护 | 当用户在登录界面写入账号密码之后,若界面切换时候未能清除用户输入的密码,则可能导致手机丢失后被直接使用已输入的信息进行登录。 | 低 | 低 | 加入清除密码的相关代码 | 无需改动 | 需要客开添加;另,退到后台有界面模糊功能 | 所有 |
30 | iOS | 通信协议安全 | APP使用HTTP协议进行通信过程中可能会遭受中间人攻击,威胁数据安全。 | 低 | 低 | 使用HTTPS协议进行通信 | 无需改动 | 建议使用https传输数据 | 所有 |
31 | iOS | 手机网络环境切换后未进行风险提示 | 网络环境切换后,客户端未进行风险提示 | 低 | 低 | 建议对网络切换进行风险提示 | 无需改动 | 暂不支持,苹果系统安全性较高,可客开开发,也可提产品需求; | 所有 |
32 | iOS | 键盘记录保护 | 自定义软键盘的键位需要随机、无按键阴影,以防止攻击者通过记录屏幕触点或截图,进行键盘记录 | 低 | 低 | 建议客户端使用自定义软键盘 | 需要客开添加 | 所有 |
编撰人:admin
