基于静态分析的Rust内存安全缺陷检测研究基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 报告日期:2022.11.25 复旦大学 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 Rust语言 ❑ 系统级安全编程语言 ▪ 内存安全 ▪ 并发安全 ▪ 效率 2006年 2011年 Memory Unsafe APIs Unsafe API call Unsafe API access call Rust实际表现如何? ❑ 调研了2020年12月31日前报告的185个内存安全漏洞[TOSEM'21] ▪ Rust在内存安全防护方面效果不错 ▪ 所有的漏洞(除了1个编译器漏洞)都需要unsafe code ▪ 大部分CVEs都是 API soundness的问题(未在可执行程序中发现)0 码力 | 28 页 | 1.55 MB | 1 年前3
应用 waPC (rust) 做软件测试工具send a list of TCP items TCP MITM 例子 • 模拟数据规则 • 自动化测试 • 验证功能 Assertion • 稳定环境 Stable environment • 报告能力(例如 junit) Reporting Basic API testing requirement API 测试也用 rust 软件测试工具 • 模拟数据规则 • 自动化测试 • Multiple unwrap_or(&mut NULL),&json!("hi"),"data is hi"); Ok(msg.to_vec()) } 自动化 HTTP 请求例子 自动化测试以循环方式执行 测验报告 HTML/ JSON 报告 Wasm Mock Server • 模拟数据规则 • 自动化测试 • 模拟数据规则 • 自动化测试 Some of its’ Host call • http request0 码力 | 30 页 | 2.50 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0} 示例 6-4:Quarter 变体也存放了一个 UsState 值的 Coin 枚举 想象一下我们的一个朋友尝试收集所有 50 个州的 25 美分硬币。在根据硬币类型分类零钱的 同时,也可以报告出每个 25 美分硬币所对应的州名称,这样如果我们的朋友没有的话,他可 以将其加入收藏。 在这些代码的匹配表达式中,我们在匹配 Coin::Quarter 变体的分支的模式中增加了一个叫做 state match 表达式就等同于 if let 和 else。回忆一下示例 6-4 中 Coin 枚举的定义, 其 Quarter 变体也包含一个 UsState 值。如果想要计数所有不是 25 美分的硬币的同时也报告 25 美分硬币所属的州,可以使用这样一个 match 表达式: let mut count = 0; match coin { Coin::Quarter(state) 进行适当的处理。 Rust 将错误分为两大类:可恢复的(recoverable)和 不可恢复的(unrecoverable)错误。对 于一个可恢复的错误,比如文件未找到的错误,我们很可能只想向用户报告问题并重试操作。 不可恢复的错误总是 bug 出现的征兆,比如试图访问一个超过数组末端的位置,因此我们要 立即停止程序。 大多数语言并不区分这两种错误,并采用类似异常(exception)这样方式统一处理它们。0 码力 | 562 页 | 3.23 MB | 26 天前3
Rust 程序设计语言简体中文版示例 6-4:Quarter 成员也存放了一个 UsState 值的 Coin 枚举 想象一下我们的一个朋友尝试收集所有 50 个州的 25 美分硬币。在根据硬币类型分类零钱的 同时,也可以报告出每个 25 美分硬币所对应的州名称,这样如果我们的朋友没有的话,他可 以将其加入收藏。 在这些代码的匹配表达式中,我们在匹配 Coin::Quarter 成员的分支的模式中增加了一个叫 做 state 6-4 中 Coin 枚举的定 138/600 Rust 程序设计语言 简体中文版 义,其 Quarter 成员也包含一个 UsState 值。如果想要计数所有不是 25 美分的硬币的同时 也报告 25 美分硬币所属的州,可以使用这样一个 match 表达式: # #[derive(Debug)] # enum UsState { # Alabama, # Alaska, 进行适当的处理。 Rust 将错误分为两大类:可恢复的(recoverable)和 不可恢复的(unrecoverable)错误。对 于一个可恢复的错误,比如文件未找到的错误,我们很可能只想向用户报告问题并重试操作。 不可恢复的错误总是 bug 出现的征兆,比如试图访问一个超过数组末端的位置,因此我们要 立即停止程序。 大多数语言并不区分这两种错误,并采用类似异常这样方式统一处理它们。Rust0 码力 | 600 页 | 12.99 MB | 1 年前3
共 4 条
- 1













