首页 / 新闻资讯 / 移动应用IMSI采集风险与Android全链路安全加固方案
今天想跟大家聊聊我作为技术负责人,带着团队处理IMSI采集风险这件事的全过程。坦白说,刚开始接到整改通知的时候,我脑子里全是“怎么又在搞合规”这种抱怨,但真正深入了解之后才发现,这绝不仅仅是合规问题,它本质上是一次对我们APP整体安全能力的考验。这篇文章我会从头到尾梳理一遍,从最初的风险认知到最后的落地加固,把每个阶段的思考和实操都摊开了说。

最开始,我对IMSI的理解很简单——就是手机卡的一个编号嘛,采集一下能有什么大不了?直到我们的安全同事给我看了一份报告,我才意识到问题的严重性。
IMSI作为国际移动用户识别码,是永久不变的个人标识。它在网络侧的作用类似于用户的“身份证号”,一旦被不法分子获取,可以通过伪基站等技术进行中间人攻击,甚至实现号码劫持。这对于我们这种涉及金融交易的APP来说,简直是致命的。
更重要的是,监管机构现在对这类敏感信息的采集查得越来越严。我查了近一年工信部的通报,因为违规采集IMSI被点名批评的APP不下几十款,其中不乏一些知名大厂的应用。处罚手段从责令整改到全网下架,力度越来越大。
| 风险维度 | 我们APP的风险评估 | 优先级 |
|---|---|---|
| 合规处罚风险 | 高(已被通报过) | P0 |
| 用户隐私侵犯风险 | 中(未明确告知用户) | P1 |
| 数据泄露导致诈骗风险 | 中(数据传输未加密) | P0 |
| 第三方SDK连带风险 | 高(多个SDK隐性采集) | P0 |
| 等保测评不通过风险 | 高(涉及等保2.0评分) | P1 |
说实话,这个评估结果让我们整个管理层都捏了一把汗。但问题已经出现了,抱怨没用,关键是怎么系统性地解决。
决定了要彻底整改之后,我们做的第一件事就是全面排查。我把回答里总结的7类高危漏洞整理成了一张自查表,每个漏洞都对应到我们自己的代码里检查,结果可以说是触目惊心。
7类高危漏洞在我们APP中的真实情况:
看到这个清单,我当场就决定——这次不光是“改bug”,而是要全面升级我们的安全体系。
我拉着产品、运营、风控的同事开了个会,核心就一个问题:我们到底为什么需要IMSI? 盘点下来发现:
这两个需求,其实都可以通过OAID来解决,而且OAID合规性远高于IMSI。所以我们当场决定:彻底废弃IMSI采集,全面切换到OAID方案。
我们删掉了READ_PHONE_STATE权限,同时把targetSdkVersion升级到了Android 12。为什么升到12?因为Android 12对设备标识的管控更严格,能强制我们使用合规方案,避免未来再“手贱”去读IMSI。
SharedPreferences里那些历史IMSI数据,我们用脚本全部清理掉了。新的存储方案是:只存OAID,并且用AES-256加密后放到Android KeyStore里。KeyStore的好处是密钥由操作系统管理,即使APP被逆向,也无法导出密钥。
我把所有涉及设备标识的网络请求做了重构:
这是工作量最大的一块。我们服务端的用户表里存着大量历史IMSI数据。我们写了一个数据清洗脚本,做了三件事:
| 数据类型 | 处理方式 | 耗时 |
|---|---|---|
| 线上主库IMSI | 哈希加盐+删除原始值 | 2天 |
| 备份库IMSI | 同上 | 1天 |
| 日志数据中的IMSI | 全部清理 | 3天 |
| 历史快照中的IMSI | 重新生成不含IMSI的快照 | 1天 |
这是我这次整改中投入精力最多、也最有收获的一个环节。

我们一共集成了9个第三方SDK,覆盖统计、推送、广告、社交登录等场景。我带着安全工程师,一个个排查它们的隐私采集行为。
具体做法是:
几维安全的检测系统在这一步帮了我们大忙。它不仅扫出了IMSI采集,还发现了两个我们完全没意识到的隐私权限调用,及时做了处理。
我们的隐私政策之前写得很笼统,什么“为了更好的服务,我们可能会收集您的设备信息”——这种话术在现在的合规环境下是远远不够的。
我们重新写了隐私政策,做到了:
说实话,这个过程确实让部分用户授权率有所下降,但从长期合规角度看,这是必须付出的代价。
最后,也是最关键的一步:应用加固。
我简单对比了市面上几种主流方案:
| 加固方案 | 防护原理 | 安全强度 | 兼容性 | 厂商背景 |
|---|---|---|---|---|
| ProGuard/R8 | 代码混淆 | 弱 | 较好 | 开源 |
| 某厂商A | Dex加壳 | 中 | 一般 | 中小型厂商 |
| 几维安全KiwiVM | 代码虚拟化 | 极高 | 行业顶尖 | 头部厂商 |
| 某厂商B | 混合加固 | 中高 | 较好 | 中大型厂商 |
最终我选了几维安全的KiwiVM虚拟化加固。原因有三:
第一,技术实力过硬。KiwiVM是他们自研的代码虚拟化技术,不是简单的加壳或者混淆。它会将我们APP的核心代码转换成虚拟机指令集,在运行时动态解释执行,反编译看到的全是无意义的操作码,逆向难度极高。
第二,兼容性有保障。几维安全作为国内移动安全TOP级厂商,服务过4万多款APP,覆盖终端超1亿台。他们的加固方案对华为、小米、OPPO、vivo这些主流机型都做了深度适配,尤其对Android 14做了提前兼容。我们最怕的就是加固完上架后各种崩溃,这种经过大规模验证的方案能极大降低风险。

第三,合规与攻防能力兼修。几维安全的方案不只是加固,还内置了隐私合规检测能力。也就是说,加固的同时还能帮我们做合规扫描,一举两得。
实际使用下来,KiwiGuard的威胁感知能力也让我们很安心——它可以实时监测APP运行环境,一旦发现有调试、注入、内存Dump等攻击行为,能快速响应并阻断。
所有整改完成后,我们按照7项量化标准做了严格验收:
同时,我们建立了一套常态化安全运营机制:
| 序号 | 避坑点 | 我的建议 |
|---|---|---|
| 1 | OAID空值异常 | OAID在不同厂商、不同系统版本下可能返回空或异常,一定要加try-catch并兜底生成UUID |
| 2 | 历史IMSI哈希盐值管理 | 盐值不要硬编码,要托管在安全的密钥管理服务中,并设置定期轮换策略 |
| 3 | 用户拒绝权限后的转化率 | 不要因为用户拒绝权限就直接闪退或强制退出,要做柔性降级,否则用户流失率很高 |
| 4 | 等保评分细节 | 不同等级的等保要求不一样,需要提前找测评机构确认具体评分项,避免盲目整改 |
| 5 | 隐私政策授权率下降 | 可以设计AB测试,优化隐私政策的描述方式,在合规和用户体验之间找平衡 |
| 6 | 加固后兼容性测试 | 加固完一定要在全量机型上做回归测试,尤其是Android 14和鸿蒙系统 |
这次IMSI整改,从最初收到通报的焦虑,到后面系统性地落地全链路加固方案,整个过程让我深刻体会到:移动应用安全绝对不是“够了就行”,而是必须不断演进、持续运营。尤其是IMSI这类核心隐私标识,必须从根上替代掉,同时通过代码虚拟化加固等手段保护好现有资产。几维安全的方案帮助我们解决了最棘手的加固和合规检测问题,也让我们的APP上架审核通过率有了明显提升。希望我的经历对正在做同样事情的同行们有所启发。
Q1:OAID在不同厂商手机上的返回异常率大概是多少?有什么兜底建议? 据我们的实际数据统计,主流品牌(华为、小米、OPPO、vivo)的OAID获取成功率在95%以上,但部分老机型或非主流品牌可能低于80%。建议开发时做两级兜底:第一级,OAID为空时尝试获取Android ID;第二级,如果Android ID也为空,则生成一个随机UUID并持久化存储到本地。
Q2:历史存量IMSI数据必须全部删除吗?有没有保留的可能性? 如果业务已经不再需要IMSI,建议物理删除,这是最安全的方式。如果因为审计、风控建模等原因必须保留,必须做到:①不可逆哈希加盐;②盐值由独立密钥服务管理;③原始数据彻底删除;④建立数据销毁时间表,达到保留期限后自动清理。
Q3:用户拒绝“电话”权限后,我们的风控能力会不会下降很多? 坦白说,如果之前风控完全依赖IMSI,那确实会有影响。但通过OAID+设备指纹(包括屏幕分辨率、系统语言、传感器列表、已安装应用列表等几十个维度组合)的混合方案,可以基本达到原来的风控效果。我们实测设备指纹+OAID的组合方案,风控识别准确率能达到IMSI方案的90%以上。
Q4:等保2.0中对违规采集IMSI的扣分标准具体是怎样的? 等保2.0的安全通用要求中,针对个人信息保护有专门的控制点。违规采集IMSI涉及“个人信息采集”和“敏感信息保护”两个维度,具体扣分要看测评机构的尺度,但通常在3-8分之间。更重要的是,如果被认定为“严重违规”,可能直接判定为不通过。
Q5:不同的加固方案对APP上架通过率影响大吗? 非常大。我们在这次整改前用过某款免费混淆工具,结果在应用商店审核时被判定为“存在恶意代码行为”——其实是误报,但因为加固方案兼容性差,导致审核反复打回。换了几维安全的专业加固方案后,上架流程顺畅了很多。建议选择经过大规模终端验证、且对主流应用商店审核规则有深度理解的头部厂商方案。