安全测试规范
定义安全测试策略、测试用例和自动化方案
安全测试类型
| 类型 | 目的 | 执行频率 |
|---|---|---|
| 静态分析 (SAST) | 代码漏洞检测 | 每次 PR |
| 依赖扫描 (SCA) | 依赖漏洞检测 | 每日 |
| 动态测试 (DAST) | 运行时漏洞检测 | 每周 |
| 渗透测试 | 模拟真实攻击 | 每季度 |
静态安全分析
代码扫描规则
| 规则类别 | 检测项 | 严重级别 |
|---|---|---|
| 硬编码密钥 | API Key、图案 | Critical |
| 敏感数据泄露 | 日志中的私钥 | Critical |
| 不安全随机数 | Math.random() 用于加密 | High |
| XSS 漏洞 | innerHTML, dangerouslySetInnerHTML | High |
| 不安全依赖 | eval(), Function() | Medium |
自动化检测
PR 提交
│
▼
静态分析扫描
│
├── Critical ──► 阻止合并
│
├── High ──► 阻止合并 + 通知
│
├── Medium ──► 警告
│
└── Low ──► 记录敏感信息检测模式
| 类型 | 检测模式 | 动作 |
|---|---|---|
| 私钥 | /[0-9a-f]{64}/i | 阻止 |
| 助记词 | 12/24 个单词序列 | 阻止 |
| API Key | 已知格式的 Key | 警告 |
依赖安全扫描
漏洞评级
| 级别 | CVSS | 要求 |
|---|---|---|
| Critical | 9.0-10.0 | 24h 内修复 |
| High | 7.0-8.9 | 7 天内修复 |
| Medium | 4.0-6.9 | 30 天内修复 |
| Low | 0.1-3.9 | 下次发布修复 |
扫描配置
依赖扫描策略:
- 每日自动扫描所有依赖
- PR 时检查新增依赖
- Critical/High 漏洞阻止合并
- 生成修复建议报告处理流程
发现漏洞
│
▼
评估影响范围
│
├── 有补丁 ──► 升级依赖
│
└── 无补丁
│
├── 可替换 ──► 更换依赖
│
└── 不可替换 ──► 添加缓解措施 + 监控安全功能测试
认证测试
| 测试用例 | 验证点 |
|---|---|
| 正确图案解锁 | 成功解锁 |
| 错误图案 5 次 | 显示延迟警告 |
| 错误图案 10 次 | 账户锁定 |
| 生物识别取消 | 回退图案锁 |
| 生物识别 3 次失败 | 强制图案锁 |
加密测试
| 测试用例 | 验证点 |
|---|---|
| 助记词加密存储 | 存储中无明文 |
| 不同图案产生不同密文 | 密文不同 |
| 图案验证 | 正确图案能解密 |
| 错误图案解密 | 解密失败 |
| 随机数唯一性 | 每次加密 IV 不同 |
输入验证测试
| 测试用例 | 输入 | 预期结果 |
|---|---|---|
| 地址 XSS | <script>alert(1)</script> | 拒绝/转义 |
| 金额溢出 | 99999999999999999 | 显示错误 |
| 负数金额 | -100 | 拒绝 |
| SQL 注入 | '; DROP TABLE;-- | 无影响 |
| 路径穿越 | ../../etc/passwd | 拒绝 |
授权测试
| 测试用例 | 验证点 |
|---|---|
| DWEB 授权显示 | 显示请求方信息 |
| 授权拒绝 | 正确返回拒绝 |
| 签名内容展示 | 可读格式显示 |
| 恶意签名请求 | 警告提示 |
渗透测试场景
场景 1: 助记词窃取
攻击路径:
- 尝试从存储读取助记词
- 尝试从内存 dump 获取
- 尝试通过日志获取
- 尝试通过网络拦截
验证点:
- 存储加密
- 内存及时清理
- 日志无敏感数据
- 无网络传输
场景 2: 中间人攻击
攻击路径:
- 代理拦截 HTTPS 请求
- 尝试篡改 API 响应
- 尝试伪造交易
验证点:
- SSL 证书验证
- 响应签名验证
- 本地签名不可篡改
场景 3: 钓鱼攻击
攻击路径:
- 伪造授权页面
- 诱骗用户签名
- 窃取资产
验证点:
- 显示请求来源
- 签名内容可读
- 可疑请求警告
场景 4: 重放攻击
攻击路径:
- 截获已签名交易
- 重复广播交易
验证点:
- nonce 机制防重放
- 交易幂等性
安全测试自动化
CI 集成
┌─────────────────────────────────────┐
│ PR 提交 │
└──────────────┬──────────────────────┘
│
┌──────────┼──────────┐
│ │ │
▼ ▼ ▼
┌───────┐ ┌───────┐ ┌───────┐
│ SAST │ │ SCA │ │ 单元 │
│ 扫描 │ │ 扫描 │ │ 测试 │
└───┬───┘ └───┬───┘ └───┬───┘
│ │ │
└─────────┼─────────┘
│
▼
┌───────────┐
│ 结果汇总 │
└─────┬─────┘
│
┌─────────┼─────────┐
│ │ │
▼ ▼ ▼
通过 警告 失败
│
▼
阻止合并安全测试报告
SecurityTestReport {
timestamp: number
staticAnalysis: {
critical: number
high: number
medium: number
low: number
findings: Finding[]
}
dependencyAudit: {
vulnerabilities: Vulnerability[]
outdatedPackages: number
}
securityTests: {
passed: number
failed: number
skipped: number
failures: TestFailure[]
}
}安全测试环境
隔离要求
| 要求 | 说明 |
|---|---|
| 独立环境 | 不影响生产数据 |
| 测试钱包 | 使用测试网 |
| 模拟攻击 | 安全沙箱内 |
| 数据清理 | 测试后清除 |
测试数据
| 数据 | 来源 | 安全要求 |
|---|---|---|
| 测试助记词 | 预生成 | 不含真实资产 |
| 测试私钥 | 预生成 | 测试网专用 |
| 攻击向量 | OWASP | 持续更新 |
漏洞响应
发现漏洞后
发现漏洞
│
▼
评估严重性
│
├── Critical ──► 立即修复 + 通知
│
├── High ──► 24h 内修复
│
└── Medium/Low ──► 排期修复
│
▼
修复并验证
│
▼
更新测试用例
│
▼
复盘总结漏洞赏金
- SHOULD 建立漏洞赏金计划
- MUST 提供安全问题报告渠道
- MUST 及时响应安全报告
本章小结
- 多层次安全测试:静态分析、依赖扫描、动态测试、渗透测试
- 自动化集成到 CI,阻止带漏洞的代码合并
- 完整的安全功能测试用例覆盖
- 渗透测试场景模拟真实攻击
- 漏洞发现后快速响应机制