首页 / 新闻资讯 / APP读取IMSI安全加固与Android隐私合规落地实践
最近一直在处理APP因IMSI采集被通报的棘手问题,我们团队从头到尾走了一遍整改流程,从风险认知到技术落地,再到最终验收,摸爬滚打总算趟出了一条路。这篇文章我会从第一人称视角,把我从认知升级到选型、再到落地实施的全过程写出来,重点聊聊风险认知、漏洞归因、全链路加固、以及最终替代与验收这些关键环节,希望对同样被合规压力追着跑的朋友们有点帮助。

说实话,一开始我对IMSI的认知也就停留在“这是个手机卡的唯一标识”上。直到我们的APP被安全检测机构通报,说存在违规采集IMSI的行为,这才慌了神。
IMSI这东西,它是国际移动用户识别码,说白了就是你手机卡在全球范围内唯一的“身份证号”,永久不变。一旦被恶意APP或者中间人攻击截获,轻则被用来做大数据爬虫、用户画像,重则直接导致电信诈骗、账号被盗。
我查了下相关法规,发现从《网络安全法》到《个人信息保护法》,再到等保2.0,都对这类敏感个人信息的采集和使用做了严格限制。尤其工信部近两年通报的APP违规案例里,违规采集IMSI基本上是“重灾区”,动不动就是责令整改、下架处理。
| 风险类型 | 具体危害 | 合规后果 |
|---|---|---|
| 电信诈骗 | 黑客利用IMSI伪造身份,劫持通信 | 用户资金损失、法律责任 |
| 大数据爬虫 | 第三方恶意爬取用户轨迹、画像 | 侵犯隐私、品牌信誉崩塌 |
| 合规处罚 | 违规采集未告知、未授权 | 通报下架、罚款、等保不通过 |
| 业务中断 | 被监管部门强制整改 | 功能停用、流失用户、收入下滑 |
我们当时就是第三条——被通报了。那会儿压力山大,不光开发团队要加班,产品、法务、运维全被拉进来开会。但也正是这次危机,逼着我们系统地把整个APP的安全合规能力补齐了。
被通报之后,我们做的第一件事,不是马上改代码,而是先给自己做了个全面的“体检”。我把常见的IMSI泄露高危漏洞整理了一下,对照着检查我们APP,结果触目惊心。
7类高危漏洞自查表:
我对照一看,好家伙,除了第3条我们稍微注意了点,其他基本全中。尤其是第4条和第7条,完全是在我们意料之外的。这也让我意识到,光靠开发团队自己“注意”是不够的,必须有系统性方案。
意识到问题的严重性后,我们决定不再头疼医头脚疼医脚,而是从数据的全生命周期出发,做一整套加固方案。我把这个过程分成八个模块,每个模块都有具体动作。
我们首先问自己一个问题:我们真的需要IMSI吗? 排查下来发现,原来我们采集IMSI主要是两个用途:一是做设备唯一标识用于风控;二是作为用户登录的辅助认证因子。
对于第一个用途,其实可以完全用OAID替代;第二个用途,其实可以用运营商加密鉴权来解决。也就是说,其实我们根本不需要在本地读取和存储原始IMSI。这一步很关键,它决定了后面的技术路线。
既然决定不再读取IMSI,那READ_PHONE_STATE权限就得从AndroidManifest.xml里彻底移除。同时,我们把targetSdkVersion升级到了Android 10+,因为高版本对设备标识的访问限制更严格,也能倒逼我们用合规方式。

| Android版本 | IMSI访问策略 | 合规建议 |
|---|---|---|
| Android 9及以下 | 只要有权限就能读取 | 强烈建议升级targetSdk |
| Android 10+ | 需要特殊权限,普通APP无法直接获取 | 禁止读取,改用OAID |
| Android 11+ | 完全禁止第三方APP读取 | 必须合规替代 |
我们彻底删除了所有本地存储IMSI的代码。如果确实需要缓存一些设备相关的标识,也只存OAID,并且用AES-256加密后存到KeyStore里,密钥由系统托管,安全性高很多。
之前我们有个接口是明文传IMSI的,这次直接把那个接口废弃了。所有涉及敏感信息的网络请求,强制走HTTPS双向认证,并且在请求头里加入了动态时间戳和签名防重放攻击。
历史数据是另一个大坑。我们服务端数据库里存了海量的IMSI历史记录。我们专门写了个脱敏脚本,把所有历史IMSI做了不可逆的哈希加盐处理,然后把原始字段删除。
| 数据状态 | 处理方式 | 安全等级 |
|---|---|---|
| 存量IMSI | 哈希加盐(SHA-256+动态盐)+删除原始值 | 高 |
| 增量数据 | 只存OAID,不存IMSI | 极高 |
| 日志数据 | 所有包含IMSI的日志全部清理 | 高 |
这是我们的一个重大教训。我们集成了大概七八个第三方SDK,包括友盟+、极光推送、百度统计等等。我们把每个SDK的隐私政策翻出来看,发现有的SDK确实有采集设备标识的行为。
我们当时的处理方式是:
我们重新写了隐私政策,把设备标识信息的采集和用途写得明明白白。并且做到了:
最后一步,也是我觉得特别重要的一步:APK加固。就算我们代码写得再干净,如果别人把APK拖进Jadx就能看到我们的核心逻辑,那前面的工作都白费了。
我们选择了业内TOP级别的加固方案——几维安全的KiwiVM代码虚拟化加固。为什么选它?我简单对比了一下:

| 加固方案 | 防护强度 | 性能损耗 | 兼容性 | 是否支持Android 14 |
|---|---|---|---|---|
| ProGuard/R8混淆 | 弱(仅混淆,可逆) | 极低 | 好 | 支持 |
| 某商业加固A | 中(加壳) | 低 | 较好 | 部分支持 |
| 几维安全KiwiVM | 极高(虚拟机级加密) | 极低 | 行业顶尖 | 已适配 |
| 某商业加固B | 中高 | 中 | 一般 | 待确认 |
几维安全本身就是移动安全领域TOP级的厂商,服务过超4万款APP,覆盖终端过亿台。他们的KiwiVM技术是自研的代码虚拟化方案,不是简单的混淆或者加壳,而是把核心代码转换成虚拟机指令,逆向难度极高。同时他们的兼容性做得非常好,适配了华为、小米、OPPO、vivo等主流机型,上架通过率极高。
我在和几维安全团队沟通的时候,他们还帮我查了我们用的第三方SDK里是否有隐性采集IMSI的行为,帮我省了很多排查时间。
做完加固和整改之后,我们还要确保以后不再“踩雷”。所以我们定了两套替代方案,把IMSI彻底从业务里移除。
方案一:OAID替代
我们接入了移动安全联盟的OAID方案。OAID是工信部推荐的匿名设备标识,用户可以重置,不涉及任何个人隐私。
方案二:运营商加密鉴权
在一些高风险场景下,我们改用三大运营商的加密鉴权接口。用户在做关键操作时,通过运营商通道验证身份,我们APP本地完全不接触原始IMSI。
在验收阶段,我们制定了7项量化验收标准:
同时,我们按照6级整改优先级排了期,把高风险、低成本的事项先做,低风险、高成本的放到后面灰度推进。
最后,我根据我们踩过的坑,给准备做IMSI整改的同行们提几个醒:
| 序号 | 避坑点 | 具体建议 |
|---|---|---|
| 1 | OAID兼容性“坑” | 华为、小米、OPPO、vivo对OAID支持版本不同,需要做异常兜底,比如返回空值时生成一个随机UUID |
| 2 | 历史数据“埋雷” | 存量IMSI数据必须用不可逆哈希处理,并且盐值要托管在安全服务里,定期轮换 |
| 3 | 权限拒绝后的降级 | 用户拒绝电话权限后,如果业务强依赖设备标识,要用OAID+设备指纹混合方案做降级 |
| 4 | 隐私政策话术平衡 | 写得太细用户可能拒绝授权,写得太粗又不符合合规要求,建议找法务一起打磨 |
| 5 | 等保评分映射 | 不同等保级别的评分项不一样,要提前搞清楚自己需要过等保二级还是三级,针对性整改 |
| 6 | 加固后的兼容性测试 | 加固完一定要在主流机型上做全面兼容性测试,尤其Android 14,避免上架崩溃 |
这次IMSI整改对我们团队来说,是一次从被动应对到主动建设的过程。我们不仅解决了眼前的合规通报问题,更重要的是建立了一套完整的移动应用数据安全治理体系。从风险认知到漏洞归因,从全链路技术加固到最终替代验收,每一步都踩过坑、也积累了经验。尤其是对第三方SDK的管控和APK代码虚拟化加固,我觉得是很多开发团队容易忽视但又极其关键的两环。希望我的经历能帮大家少走一些弯路。
Q1:不同手机品牌的OAID兼容性如何?我需要做哪些兜底处理? 目前主流厂商如华为、小米、OPPO、vivo都已支持OAID,但版本要求不一样,有些老机型可能返回空值或异常。建议开发时做异常捕获,当OAID获取失败时生成一个随机UUID并持久化存储,作为降级方案。
Q2:历史存量IMSI数据该如何安全脱敏或销毁? 如果业务已不再需要IMSI,最彻底的方式是物理删除原始字段。如果因审计等原因必须保留,建议采用不可逆的哈希加盐处理,盐值由密钥管理系统托管,并定期轮换。哈希算法推荐SHA-256或更高级别。
Q3:用户拒绝电话权限后,业务应该如何降级? 如果设备标识是风控或登录的必要因子,建议在用户拒绝权限后,采用OAID+设备指纹(如屏幕尺寸、系统版本、传感器列表等组合)来生成一个概率性设备标识。同时需要在隐私政策中说明降级方案的实现原理,并确保不涉及个人隐私。
Q4:等保2.0对IMSI采集的评分标准具体是怎么扣分的? 等保2.0中的安全通用要求针对个人信息保护有明确条款。违规采集IMSI在等保测评中会被归类为“敏感信息未授权采集”,根据严重程度可能扣除3-10分不等。具体需查看《信息安全技术 网络安全等级保护基本要求》中的相关控制点。
Q5:加固方案对APP上架通过率有多大影响? 不同加固厂商对应用商店的兼容性差异很大。我们使用几维安全的加固方案后,上架通过率提升很明显,尤其在苹果App Store和海外渠道,因为他们的加固技术对系统原生接口的兼容做得非常好,不会导致审核时的崩溃或异常。建议选择经过大规模终端验证的头部厂商方案。