安全审计清单
定义安全审计检查项和常见攻击防护规范
审计检查清单
1. 密钥安全
| 检查项 | 要求级别 | 说明 |
|---|---|---|
| 助记词不明文存储 | MUST | 必须加密存储 |
| 私钥不明文存储 | MUST | 必须加密存储 |
| 密钥不出现在日志 | MUST | 禁止记录敏感数据 |
| 密钥不通过网络传输 | MUST | 所有签名本地完成 |
| 使用后清除内存 | MUST | 及时清理敏感变量 |
| 加密使用安全随机数 | MUST | crypto.getRandomValues |
| PBKDF2 迭代次数足够 | MUST | ≥100,000 次 |
| 使用安全的加密算法 | MUST | AES-256-GCM |
2. 认证安全
| 检查项 | 要求级别 | 说明 |
|---|---|---|
| 图案复杂度验证 | MUST | 至少4点 |
| 图案错误次数限制 | MUST | 防暴力破解 |
| 图案不明文传输 | MUST | 本地验证 |
| 会话超时自动锁定 | SHOULD | 默认 5 分钟 |
| 生物识别有图案锁回退 | MUST | 防止锁死 |
3. 数据安全
| 检查项 | 要求级别 | 说明 |
|---|---|---|
| 敏感数据加密存储 | MUST | 钱包数据 |
| 缓存数据有过期机制 | SHOULD | 防止数据泄露 |
| 剪贴板敏感数据及时清除 | SHOULD | 复制后 30s 清除 |
| 不在 URL 中传递敏感数据 | MUST | 防止历史记录泄露 |
| 导出数据加密 | SHOULD | 备份文件加密 |
4. 网络安全
| 检查项 | 要求级别 | 说明 |
|---|---|---|
| 使用 HTTPS | MUST | 所有 API 请求 |
| 验证 SSL 证书 | MUST | 防中间人攻击 |
| API 请求签名 | SHOULD | 防篡改 |
| 防重放攻击 | SHOULD | 请求时间戳/nonce |
5. 输入验证
| 检查项 | 要求级别 | 说明 |
|---|---|---|
| 地址格式验证 | MUST | 防止转错链 |
| 金额范围验证 | MUST | 防止溢出 |
| 二维码内容验证 | MUST | 防恶意链接 |
| 深度链接参数验证 | MUST | 防注入攻击 |
| HTML/JS 注入防护 | MUST | XSS 防护 |
6. 授权安全
| 检查项 | 要求级别 | 说明 |
|---|---|---|
| DWEB 授权需用户确认 | MUST | 显示授权详情 |
| 签名内容可读展示 | MUST | 用户可理解 |
| 授权范围最小化 | SHOULD | 按需授权 |
| 授权可撤销 | SHOULD | 管理已授权应用 |
常见攻击防护
XSS (跨站脚本攻击)
攻击方式: 注入恶意脚本窃取数据
防护措施:
- MUST 对用户输入进行转义
- MUST 使用 Content-Security-Policy
- MUST 避免使用 innerHTML
- SHOULD 使用框架自带的 XSS 防护
检查点:
| 位置 | 检查内容 |
|---|---|
| 地址输入 | 禁止 HTML 标签 |
| 备注输入 | 转义特殊字符 |
| 二维码解析 | 验证 URL 格式 |
钓鱼攻击
攻击方式: 伪造界面骗取助记词/图案
防护措施:
- MUST 显示应用来源标识
- MUST 授权页面显示请求方信息
- SHOULD 提供反钓鱼码功能
- SHOULD 警告可疑请求
检查点:
| 场景 | 防护 |
|---|---|
| DWEB 授权 | 显示 DApp 域名 |
| 签名请求 | 解析并显示内容 |
| 深度链接 | 显示来源应用 |
重放攻击
攻击方式: 重复发送已签名的交易
防护措施:
- MUST 交易包含 nonce
- MUST 每笔交易 nonce 递增
- SHOULD 检测重复交易
中间人攻击
攻击方式: 拦截并篡改网络请求
防护措施:
- MUST 使用 HTTPS
- MUST 验证 SSL 证书
- SHOULD 证书固定 (Certificate Pinning)
- SHOULD 本地签名,服务端不接触私钥
侧信道攻击
攻击方式: 通过时序/功耗分析推断密钥
防护措施:
- SHOULD 使用恒定时间的图案比较
- SHOULD 图案验证添加随机延迟
- SHOULD 使用经过审计的加密库
社会工程攻击
攻击方式: 欺骗用户泄露信息
防护措施:
- MUST 明确告知"永远不要分享助记词"
- MUST 敏感操作需二次确认
- SHOULD 可疑操作显示警告
- SHOULD 提供安全教育内容
安全开发规范
代码审查要点
| 类别 | 检查点 |
|---|---|
| 密钥处理 | 是否加密、是否及时清除 |
| 用户输入 | 是否验证、是否转义 |
| 网络请求 | 是否 HTTPS、是否验证响应 |
| 错误处理 | 是否泄露敏感信息 |
| 日志记录 | 是否记录敏感数据 |
依赖安全
| 要求 | 说明 |
|---|---|
| 定期更新依赖 | 修复已知漏洞 |
| 检查依赖许可 | 避免法律风险 |
| 使用 lockfile | 锁定依赖版本 |
| 审计依赖 | npm audit / pnpm audit |
安全测试
| 测试类型 | 说明 |
|---|---|
| 渗透测试 | 模拟攻击 |
| 代码审计 | 静态分析 |
| 模糊测试 | 异常输入测试 |
| 依赖扫描 | 漏洞检测 |
事件响应
安全事件分级
| 级别 | 定义 | 响应时间 |
|---|---|---|
| P0 | 资产可能被盗 | 立即 |
| P1 | 敏感数据泄露 | 1 小时 |
| P2 | 功能性安全漏洞 | 24 小时 |
| P3 | 潜在安全风险 | 1 周 |
响应流程
发现安全问题
│
▼
评估影响范围和级别
│
├── P0/P1 ──► 立即下线/热修复
│
└── P2/P3 ──► 排期修复
│
▼
修复并验证
│
▼
复盘和改进合规要求
数据保护
| 要求 | 说明 |
|---|---|
| 最小数据收集 | 只收集必要数据 |
| 用户知情同意 | 告知数据用途 |
| 数据本地存储 | 敏感数据不上传 |
| 用户数据可删除 | 提供清除功能 |
加密标准
| 用途 | 算法 | 标准 |
|---|---|---|
| 对称加密 | AES-256-GCM | NIST |
| 密钥派生 | PBKDF2-SHA256 | RFC 8018 |
| 随机数 | CSPRNG | 系统级 |
| 哈希 | SHA-256/SHA-512 | FIPS 180-4 |
本章小结
- 全面的安全检查清单覆盖各个层面
- 针对常见攻击类型的具体防护措施
- 安全开发规范和代码审查要点
- 安全事件分级响应机制
- 符合数据保护和加密标准