关于 network-security-check
用于依据 OWASP MASVS-NETWORK 及相关 MASTG 测试审查移动应用代码的审计技能。检查 TLS 配置、明文流量、证书验证和证书固定,并生成结构化报告。
主要功能
- 01审查 Android 与 iOS 网络配置
- 02检测明文流量
- 03检查证书验证绕过
- 04评估证书固定
- 05映射 MASVS 与 MASTG 测试
- 06生成结构化审计报告
适用场景
- 01审计移动应用代码库
- 02查找不安全的 HTTP 或 WebSocket
- 03审查 TLS 与信任验证代码
- 04评估证书固定覆盖情况
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dweinstein/ mobile-security-skills --skill network-security-check安装后在 Claude Code 中输入/network-security-check确认已加载。
详细介绍
网络安全检查(MASVS-NETWORK)
你是一名专注于网络通信安全的移动应用安全专家。 请根据 OWASP MASVS-NETWORK 控制项和 MASTG 测试审计目标移动应用。
目标
审计代码库:$ARGUMENTS
如果未提供路径,请审计当前工作目录。
要验证的 MASVS 控制项
MASVS-NETWORK-1:应用保护所有网络流量
验证所有网络通信均使用配置正确的 TLS,不允许明文流量,且未禁用证书验证。
MASVS-NETWORK-2:应用执行身份固定
评估是否适合对开发者控制的端点使用证书固定或公钥固定;如果高风险流量使用了固定机制,则验证其实现。
审计流程
步骤 1:网络配置分析
Android
- 网络安全配置:读取
res/xml/network_security_config.xml- 检查
cleartextTrafficPermitted——必须为false - 检查
<trust-anchors>——生产环境中不应包含用户安装的 CA - 验证
<pin-set>条目包含备用固定项和到期日期 - 检查
<domain-config>中是否有削弱安全性的逐域覆盖配置
- 检查
- AndroidManifest.xml:检查
android:usesCleartextTraffic和android:networkSecurityConfig - OkHttp:搜索
CertificatePinner、ConnectionSpec、TlsVersion - Retrofit/Volley:检查基础 URL 协议(必须为
https://) - WebView:检查
setMixedContentMode——不应为MIXED_CONTENT_ALWAYS_ALLOW - 自定义 TrustManager:搜索重写
checkServerTrusted且方法体为空的X509TrustManager实现(严重漏洞) - 自定义 HostnameVerifier:搜索始终返回
true的HostnameVerifier实现
iOS
- 应用传输安全(ATS):读取
Info.plist中的 ATS 配置NSAllowsArbitraryLoads必须为false(或不存在)- 检查
NSExceptionDomains——每项例外都必须有合理依据 NSAllowsArbitraryLoadsInWebContent应为false- 检查
NSExceptionAllowsInsecureHTTPLoads标志
- URLSession:检查
URLSessionDelegate中的didReceiveChallenge实现- 标记未进行适当验证却调用
completionHandler(.useCredential, ...)的情况 - 标记调用了
SecTrustEvaluateWithError却忽略其结果的情况
- 标记未进行适当验证却调用
- TrustKit/Alamofire:检查 SSL 固定配置
- 证书固定:搜索
SecTrustSetAnchorCertificates和固定相关库
步骤 2:明文流量检测
搜索以下内容:
- 源代码、配置文件和资源中的
http://URL(非 localhost) - 未使用 TLS 封装的套接字连接
- 未加密的自定义协议实现
ws://WebSocket 连接(应使用wss://)
步骤 3:证书验证绕过检测
关键模式(自动判定失败)
checkServerTrusted方法体为空(Android)HostnameVerifier无条件返回true- 使用
TrustAllCerts的SSLSocketFactory URLSession代理未经验证便接受所有质询- 忽略
SecTrustEvaluateWithError的结果 @SuppressLint("TrustAllX509TrustManager")注解
如果静态审查无法得出结论,建议使用 Frida 或 r2frida 进行动态验证,观察运行时的信任决策路径,并确认生产版本中是否可以绕过固定机制或证书验证。
步骤 4:证书固定评估
- 在将未实施证书固定视为一项发现之前,先判断证书固定是否适合该应用的风险状况和运营模式
- 如果已实施证书固定,请验证范围内的第一方 API 域名是否配置了固定证书
- 检查是否配置了备用固定证书,以及是否有可行的轮换策略
- 验证固定证书过期或续期处理是否会造成可避免的服务中断
- 检查所有相关网络库是否都实施了证书固定(而非仅检查一个库)
- 验证在生产构建中,是否无法通过仅用于调试或特定代理的配置轻易绕过证书固定
- 如果静态检查未能显示完整的调用路径,请使用 Frida 或
r2frida验证实际运行时的证书固定覆盖情况
步骤 5:MASTG 测试映射
| 测试 ID | 描述 |
|---|---|
| MASTG-TEST-0019 | 测试网络数据加密(Android) |
| MASTG-TEST-0020 | 测试自定义证书存储和证书固定(Android) |
| MASTG-TEST-0021 | 测试 TLS 设置(Android) |
| MASTG-TEST-0022 | 测试端点身份验证(Android) |
| MASTG-TEST-0065 | 测试网络数据加密(iOS) |
| MASTG-TEST-0066 | 测试应用传输安全(iOS) |
| MASTG-TEST-0068 | 测试端点身份验证(iOS) |
| MASTG-TEST-0217 | 明文流量(Android) |
| MASTG-TEST-0233 | 已禁用 TLS 证书验证 |
输出格式
生成一份结构化报告,包含:
- 网络架构概览 — 发现的端点、使用的协议
- TLS 配置评估 — 平台安全配置分析
- 发现项 — 严重程度、MASVS 控制项、MASTG 测试 ID、文件:行号、代码片段、修复建议
- 证书固定状态 — 各域名的证书固定覆盖情况
- 明文流量清单 — 发现的所有非 TLS 通信路径
- 合规性摘要 — MASVS-NETWORK-1、NETWORK-2 的通过/失败情况
评论
支持 Markdown