企业级安全审计方法论

做移动安全审计这些年,我见过太多「看起来安全」的App了。说白了,安全审计不是拿着工具扫一遍就完事,它是一套系统化的方法论。今天我就把这套方法论掰开揉碎,跟你聊聊。

黑盒审计 vs 白盒审计

先说说两种主流方式。我个人习惯把黑盒审计比作「闭着眼睛摸象」,白盒审计则是「开膛破肚看内脏」。

黑盒审计

你拿不到源码,只能通过APK/IPA文件、网络抓包、动态调试来搞。我在项目中遇到过不少甲方只给一个安装包,连开发文档都不给。这时候就得靠经验了。

  • 静态分析:反编译APK,看AndroidManifest.xml、看so文件、看资源文件
  • 动态分析:抓HTTP/HTTPS流量、Hook关键函数、调试JNI层
  • 网络层:检查证书校验、看有没有中间人攻击的可能
  • 本地存储:扒SharedPreferences、SQLite数据库、Keychain(iOS)
我的经验:黑盒审计最怕遇到「加固壳」。我曾经花了两天时间脱一个360加固,结果发现核心逻辑都在服务端。嗯,有时候得学会止损。

白盒审计

有源码就舒服多了。你可以直接看业务逻辑,找那些「看起来没问题但实际有坑」的地方。

  • 代码审计:重点看加密算法、Token生成、权限校验
  • 第三方SDK:检查有没有引入不安全的库,比如老版本的OkHttp
  • 混淆检查:ProGuard/R8配置是否合理,关键类有没有被混淆
  • 硬编码:API Key、Secret、数据库密码是不是直接写在代码里
注意:白盒审计不代表你能发现所有问题。有些漏洞是运行时才暴露的,比如条件竞争、内存破坏。所以我的建议是——黑盒白盒结合着来。

审计报告撰写规范

报告写得好不好,直接决定了你的审计价值。我见过太多「漏洞列表+截图」式的报告,说实话,这种报告甲方看完也就扔一边了。

一份合格的审计报告,至少包含以下内容:

  1. 执行摘要:给老板看的,用三句话讲清楚「有什么风险、多严重、怎么修」
  2. 审计范围:App版本、平台(Android/iOS)、审计时间、审计方法
  3. 漏洞详情:每个漏洞要有编号、位置、危害、复现步骤、修复建议
  4. 风险统计:按严重程度分类,高危几个、中危几个、低危几个
  5. 附录:工具列表、参考文档、测试账号等
核心原则:报告要让「不懂技术的人看得懂风险,懂技术的人看得懂修复」。

漏洞评级标准(CVSS)

CVSS v3.1是目前业界通用的漏洞评分系统。你想想看,如果没有统一标准,你说「这个漏洞很严重」,我说「还好吧」,那不就乱套了?

严重程度 分数范围 典型例子
严重 9.0 - 10.0 远程代码执行、未授权访问数据库
高危 7.0 - 8.9 SQL注入、越权操作、敏感信息泄露
中危 4.0 - 6.9 弱加密算法、日志泄露、未使用HTTPS
低危 0.1 - 3.9 信息泄露(非敏感)、调试接口未关闭

CVSS评分主要看三个维度:

  • 可利用性:攻击难度高不高?需要物理接触吗?
  • 影响程度:机密性、完整性、可用性哪个受损?
  • 环境因素:这个漏洞在你的业务场景下有多危险?
避坑指南:我曾经把一个「本地SQLite数据库未加密」评成了高危,结果甲方反驳说「数据库里只有缓存数据」。后来我学乖了——评分前先确认业务上下文。

合规性检查

合规不是技术问题,是法律问题。你App做得再安全,如果违反了GDPR,照样被罚到破产。

GDPR(通用数据保护条例)

主要针对欧盟用户数据。核心要求:

  • 数据最小化:只收集业务必需的数据
  • 用户同意:收集前必须明确告知并获取同意
  • 数据可删除:用户有权要求删除自己的数据
  • 数据泄露通知:72小时内必须报告监管机构

PCI-DSS(支付卡行业数据安全标准)

如果你的App涉及信用卡支付,那必须过这一关。关键点:

  • 加密存储:卡号、CVV、有效期必须加密
  • 网络隔离:支付数据走独立通道
  • 定期扫描:每季度做一次漏洞扫描
  • 日志审计:所有访问支付数据的操作都要记录
注意:合规检查不是「一次性」的。法规在更新,你的App也在迭代。我建议每半年做一次合规复查。

实战:金融App安全审计

好了,理论说完了,咱们来点实际的。下面是我对一个金融App做完整审计的流程,你可以直接套用。

第一步:信息收集

拿到App后,先别急着反编译。先搞清楚:

  • App是做什么的?转账?理财?借贷?
  • 目标用户是谁?国内还是海外?
  • 有没有合规要求?比如PCI-DSS?

第二步:静态分析

用jadx反编译APK,重点关注:

  • AndroidManifest.xml:有没有exported的Activity?有没有debuggable=true?
  • 网络请求:用的是HTTPS吗?证书校验怎么做的?
  • 本地存储:有没有存明文密码?Token存哪了?

第三步:动态分析

用Frida Hook关键函数,抓包看流量:

  • 登录接口:密码有没有加密?Token怎么生成的?
  • 转账接口:有没有金额篡改的可能?
  • 敏感操作:有没有二次验证?

第四步:漏洞验证

发现疑似漏洞后,一定要手动验证。举个例子:

// 假设发现了一个未授权的接口
// 用curl模拟请求
curl -X POST https://api.example.com/transfer \
  -H "Content-Type: application/json" \
  -d '{"amount": 10000, "to": "attacker_account"}'

// 如果返回200,说明存在未授权访问漏洞
// 如果返回401,说明有权限校验,继续找其他点

第五步:报告输出

按照前面说的规范写报告。记得附上复现步骤和修复建议。

实战心得:金融App的审计,重点永远在「资金安全」和「用户隐私」上。其他漏洞可以往后放,但这两个方向必须查透。

知识体系总览

下面这张图,是我自己总结的安全审计知识体系。你照着这个框架走,基本不会漏掉关键点。

企业级安全审计知识体系 审计方法 黑盒审计 白盒审计 报告规范 执行摘要 漏洞详情 漏洞评级 CVSS评分 严重等级 合规检查 GDPR PCI-DSS 实战流程 信息收集 动态分析 核心原则:黑盒+白盒结合,技术+合规并重 最终产出:一份让老板和技术都能看懂的安全审计报告

嗯,以上就是企业级安全审计的完整方法论。说白了,安全审计不是炫技,而是帮企业发现风险、降低损失。你按照这个框架走,至少能保证不遗漏关键环节。