用途:当需要审计 Rust 中的未定义行为风险时使用,包括 unsafe 代码、FFI、裸指针、别名、布局假设、生命周期延长、并发以及依赖边界。目标不是证明程序安全,而是产出精确清单、找出破损或未记录的安全契约,并给出与真实风险匹配的修复和验证步骤。
适用场景:审查 unsafe 块、unsafe 函数、unsafe trait、unsafe impl;审计 FFI 边界、导出的 C ABI 函数、回调与原生库包装;调查裸指针解引用、指针转换、transmute、packed 字段、union、MaybeUninit、ManuallyDrop 或布局敏感代码;检查 Send、Sync、Unpin、pinning、原子、锁与内部可变性;审查导入不安全抽象、生成绑定、原生代码或特性相关行为的依赖边界。若无 unsafe、FFI、布局或并发边界,应说明并将报告限于低风险结论。
主要能力:建立 unsafe 清单(文件路径、符号、风险类别);为每个不安全边界写清安全契约(前置条件、所有权、别名、生命周期、布局、线程、panic/unwind、调用方义务);对照代码检查契约是否落实;给出按严重程度排序的报告(Critical/High/Medium/Low/Info),含证据、修复建议与验证步骤;区分静态推理与动态工具结果,明确已运行、跳过及受阻的命令。
使用方式:先界定审计边界(crate、workspace、模块、特性集、平台、依赖与原生库是否在内);用 ripgrep 检索 unsafe、extern、no_mangle、export_name、repr、transmute、from_raw、into_raw、MaybeUninit、ManuallyDrop、UnsafeCell、NonNull、Send、Sync;配合 cargo metadata --format-version 1 --no-deps 与 cargo tree -e features。验证命令可包括 cargo test --workspace --all-features、cargo test --workspace --no-default-features、cargo miri test 以及地址消毒器命令。工具链或目标不适用时应记录尝试命令与阻碍,不以工具未复现为由降低问题等级。
限制:本技能并非通用 Rust lint;不覆盖范围外路径或未审计依赖;Miri、消毒器、模糊测试通过并不证明所有别名、生命周期或 FFI 契约有效;对未知 ABI 所有权、缺失头文件契约、未测试特性开关或未审查原生库应作为审计缺口报告。