用途
security-audit 是一个面向 Rust 与 WebAssembly 应用的安全审计技能。它的目标是识别漏洞、审查 unsafe 代码、验证输入处理,并确保应用遵循安全最佳实践。该技能以安全专家角色运作,从攻击者视角审视代码,在漏洞进入生产环境之前将其发现。
核心原则
技能建立在四条核心原则之上:
- 纵深防御:采用多层安全控制。
- 最小权限:每个组件只拥有最小必要权限。
- 安全默认值:开箱即用的配置即为安全配置。
- 故障安全:错误不应制造新的漏洞。
主要能力
技能覆盖以下主要职责:
- 漏洞评估:识别常见漏洞模式,审查认证与授权,检查注入类漏洞,验证密码学用法。
- Unsafe 代码审查:审计所有 unsafe 块,验证安全不变量,检查 FFI 边界,审查内存管理。
- 输入验证:检查所有输入边界,验证文件路径,清理用户数据,核实大小限制。
- 安全配置:审查默认设置,检查密钥管理,审计日志实践,验证 TLS 配置。
安全检查清单
技能提供了一份分类检查清单,涵盖:
- 认证与授权:密码使用 Argon2id 或 bcrypt 哈希、会话令牌具备密码学随机性、实现令牌过期、所有端点执行授权检查、防止通过直接对象引用绕过授权。
- 输入验证:所有用户输入经过验证、文件路径规范化并校验、所有输入有大小限制、内容类型验证、无命令注入向量。
- 密码学:使用经过审计的密码学库(ring、rustcrypto)、不自行实现密码学、使用安全随机数生成(getrandom)、密钥得到妥善管理、TLS 1.2+ 与强密码套件。
- 数据保护:敏感数据静态加密、保护 PII、密钥不被记录到日志、必要时安全删除、执行数据分类。
- 错误处理:错误消息不含敏感数据、错误不暴露系统内部信息、失败操作不留下部分状态、认证失败实施速率限制。
Rust 特有安全指导
技能针对 Rust 语言特性给出具体指导:
- Unsafe 代码审计:每个 unsafe 块都需要说明理由(SAFETY 注释),并检查释放后使用、双重释放、缓冲区溢出、数据竞争、无效指针运算、未初始化内存访问等问题。
- FFI 安全:校验所有 FFI 输入,包括空指针检查、长度校验,再安全地创建切片。
- 整数溢出:对不可信输入使用 checked 算术,或在有意为之的情况下显式使用 wrapping。
常见漏洞示例
技能以脆弱写法与安全写法对比的方式展示常见漏洞:
- 路径遍历:脆弱写法直接拼接用户路径;安全写法先规范化路径,再确认其仍位于基准目录之下。
- SQL 注入:脆弱写法用字符串格式化拼接查询;安全写法使用参数化查询。
- 拒绝服务:脆弱写法进行无界分配;安全写法设置最大数量限制后再分配。
安全工具
技能推荐配合以下命令使用:
# Audit dependencies for known vulnerabilities
cargo audit
# Check for unsafe code
cargo geiger
# Static analysis
cargo clippy -- -W clippy::pedantic
# Fuzzing
cargo fuzz run target_name
报告格式
技能规定按结构化格式报告发现,包含:严重级别(Critical / High / Medium / Low / Informational)、类别(如适用则标注 CWE 类别)、位置(file.rs:line)、描述、影响、概念验证、修复建议、参考链接。
约束
技能要求:修复时不得引入新漏洞;无正当理由不得禁用安全控制;即使不确定也要报告所有发现;考虑攻击者视角;用测试验证修复。
成功指标
成功指标包括:在生产前识别漏洞、提供清晰的修复指导、不制造虚假的安全感、安全改进经过验证。
适用场景与限制
该技能适用于 Rust 与 WebAssembly 应用的安全审计工作,包括代码审查、依赖审计、unsafe 代码检查与漏洞报告。资料未提供其具体安装方式、收费模式、支持的平台或与其他工具的集成细节,这些信息暂未提供。