基于静态分析的Rust内存安全缺陷检测研究基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 报告日期:2022.11.25 复旦大学 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 Rust语言 ❑ 系统级安全编程语言 ▪ 内存安全 ▪ 并发安全 ▪ 效率 2006年 2011年 handling drop(_0) 返回值 Auto Memory Reclaim问题:示例2 创建未初始化的变量foo Panic将导致访问未初始化内存 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 研究挑战和思路 ❑ 研究挑战:指针分析是NP-hard问题 ▪ 准确性:应采用路径敏感的指针分析算法,避免过多误报 ▪ 分析效率:应基于Rust MIR的特点对算法进行优化,使其可行 MIR的特点对算法进行优化,使其可行 ❑ 整体思路:基于编译过程中的生成的MIR进行静态分析 ▪ 路径提取:控制流图=>生成树 ▪ 别名分析:分析指针之间的关联关系 ▪ 模式识别:根据预定义的缺陷模式检测指针漏洞 路径提取 别名分析 模式识别 “SafeDrop: Detecting memory deallocation bugs of Rust programs via static data-flow0 码力 | 28 页 | 1.55 MB | 1 年前3
新一代分布式高性能图数据库的构建 - 沈游人Graph Technology Landscape 2020 • 图数据库 • 图数据建模 • 图计算引擎 • 图数据集成 • 可视化分析 • 知识图谱解决方案 • 图查询语言 • 欺诈检测 • 网络安全分析 • 社交网络分析 • BI 工具 • 图分析工具集 • 图咨询服务 Source : Graph Aware 图数据库发展趋势 AtlasGraph 研发背景 • Takeaway AtlasGraph 架构概览 存储层 副本管理 CRAQ 图原生存储 索引 LSM-Tree 容灾保障 ( BR ) 元数据层 事务管理 MVOCC 计算层 Cypher AST 优化器 图计算 内存加速引 擎 服务接口 HTTP/RPC Spark 连接器 Python UDF 执行器 索引管理 分布式架构性能可线性扩展 - 针对大规模图优化的存算引擎 - 配合 Atlas 图平台,实现无代码图分析 - Query 性能分析模块,启发式提示优化 - 内置多种分析函数,面向分析师友好 -MVOCC 保证事务一致性 - 多副本管理保证数据服务高可用 - 在线备份提供容灾保障 高速 易用 可靠 Why Rust ? Performance • Blazingly fast and memory-efficient0 码力 | 38 页 | 24.68 MB | 1 年前3
Rust 程序设计语言 简体中文版 1.85.0Rust 用来表明程 序因错误而退出。第九章 “panic! 与不可恢复的错误” 部分会详细介绍 panic。 使用 --release flag 在 release 模式中构建时,Rust 不会检测会导致 panic 的整型溢 出。相反发生整型溢出时,Rust 会进行一种被称为二进制补码 wrapping(two’s complement wrapping)的操作。简而言之,比此类型能容纳最大值还大的值会回绕 称 是否引用了变量、函数、结构体、枚举、模块、常量或者其他有意义的项。你可以创建作用 域,以及改变哪些名称在作用域内还是作用域外。同一个作用域内不能拥有两个相同名称的 项;可以使用一些工具来解决名称冲突。 Rust 有许多功能可以让你管理代码的组织,包括哪些细节可以被公开,哪些细节作为私有部 分,以及程序中各个作用域中有哪些名称。这些特性,有时被统称为 “模块系统(the module system)”,包括: 后台(back of house)。前台是招待顾客的地方;这包括接待员为顾客安排座位、服务员接受 点单和付款、调酒师制作饮品的地方。后台则是厨师和烹饪人员在厨房工作、洗碗工清理餐 具,以及经理处理行政事务的区域。 为了以这种方式构建我们的 crate,我们可以将其功能组织到嵌套模块中。通过执行 cargo new restaurant --lib 来创建一个新的名为 restaurant 的库。然后将示例0 码力 | 562 页 | 3.23 MB | 21 天前3
Rust HTTP 协议栈在终端通信场景的实践 - 胡凯服务器的程序规模小,因而通信速度很快。 ✓ 灵活:HTTP 支持传输任意类型的数据对象。 ✓ 无连接:HTTP 限制每次连接只处理一个请求,节 省传输时间。(在 HTTP/1.1 之后变更) ✓ 无状态:HTTP 协议对于事务处理没有记忆能力, 每个请求/应答之间相互独立。 Rust China Conf 2022 – 2023, Shanghai, China HTTP 协议介绍 HTTP 协议的版本演化如下: 针对网络不稳定场景: ➢ 支持用户设置速度限制范围:给消息 body 读取逻辑增加速度的上下限,以及时根据网络变化做 出操作。 ➢ 支持用户设置连接和请求的超时时间:给请求的各个区间设置定时器,以及时检测网络变化。 Rust China Conf 2022 – 2023, Shanghai, China Rust 与终端 HTTP 通信场景结合 提供用户界面表现的相关接口: ➢ 暂停、停止、重试、显示回调:利用0 码力 | 26 页 | 1.25 MB | 1 年前3
Rust 程序设计语言简体中文版Rust 用来表明程序因错误而退出。第九章 “panic! 与不可恢复的错误” 部分会详细介 绍 panic。 使用 --release flag 在 release 模式中构建时,Rust 不会检测会导致 panic 的整型 溢出。相反发生整型溢出时,Rust 会进行一种被称为二进制补码 wrapping(two’s complement wrapping)的操作。简而言之,比此类型能容纳最大值还大的值会回绕 称 是否引用了变量、函数、结构体、枚举、模块、常量或者其他有意义的项。你可以创建作用 域,以及改变哪些名称在作用域内还是作用域外。同一个作用域内不能拥有两个相同名称的 项;可以使用一些工具来解决名称冲突。 Rust 有许多功能可以让你管理代码的组织,包括哪些内容可以被公开,哪些内容作为私有部 分,以及程序每个作用域中的名字。这些功能,有时被统称为 “模块系统(the module system)”,包括: 父模块中的项不能使用子模块中的私有项,但是子模块中的项可以使用它们父模块中的项。这 是因为子模块封装并隐藏了它们的实现详情,但是子模块可以看到它们定义的上下文。继续拿 餐馆作比喻,把私有性规则想象成餐馆的后台办公室:餐馆内的事务对餐厅顾客来说是不可知 的,但办公室经理可以洞悉其经营的餐厅并在其中做任何事情。 Rust 选择以这种方式来实现模块系统功能,因此默认隐藏内部实现细节。这样一来,你就知 道可以更改内部代码的哪些部分而不会破坏外部代码。不过0 码力 | 600 页 | 12.99 MB | 1 年前3
Rust 语言学习笔记掌握的基础知识,并且重新调整了目录结构。 我个人对 Rust 语言设计的看法主要是:重大创新,却又博采众长。 Rust 为了解决内存安全问题重新设计了类型系统,提出了所有权的概念,同时 为了能够解决当前大多数语言无法检测到的运行时错误,rust 创造性地设计了 无畏并发。Rust 借鉴了很多优秀语言的设计理念,以及快速迭代的社区,这些 都是 Rust 受到赞赏的重要因素。 Rust 是一门系统级编程语言,被设计为保证内存和线程安全,并防止段错误。 #[cfg_attr(a, b)] 这表示若 a 成立,则这个就相当于#[cfg(b)]。 5.1.2.5 Linter 参数 目前的 Rust 编译器已自带的 Linter,它可以在编译时静态帮你检测不用的代码、死循环、编 码风格等等。Rust 提供了一系列的属性用于控制 Linter 的行为 allow(C) - 编译器将不会警告对于 C 条件的检查错误。 deny(C) - ["secure-password", "civet"] # 使用此处列举的各项 features 使用 features 时需要遵循以下规则: 1.feature 名称在本描述文件中不能与出现的软件包名称冲突 2.除了 default feature,其他所有的 features 均是可选的 3.features 不能相互循环包含 4.开发依赖包不能包含在内 5. features 组只能依赖于可选软件包0 码力 | 117 页 | 2.24 MB | 1 年前3
Rust分布式账务系统 - 胡宇需求分析 支付处理: ● 转账 ● 冻资 / 解资 ● 账户限额 ● 批处理事务 正确性:无双花或少付 审计监管:交易日志不可篡改,交易历史可回溯 条件事务:根据一定的条件决定事务执行与否 高可用:在部分节点失效的情况下,依旧可以提供正确的 服务 超低延迟:实时交易,超低响应延迟 水平扩展性:利用分布式事务实现钱包集群的的水平扩 展,应对高达 100 万 TPS 的流量 可演化性:业务逻辑与底层 API 解耦,当业务发生改变 时,底层 API 不用改变 分布式账务系统 设计理念 - Rust 是我们可靠的基石 分布式账务系统 存算分离 API 解耦 读写分离 层级账号 Rust ● 事务层与账户层分 离 ● 独立水平扩展 ● CQRS ● Event Sourcing ● 针对读场景,写场 景分别优化 ● 稳定的底层 API ● 灵活的顶层 API ● 树状结构 Raft 共识算法 raft-rs ● 高性能:关键路径无锁单线程 顶层架构 ● Gateway 路由层 ○ 业务 API 到底层 API 的翻 译 ○ 产生转账计划 ● Marker 事务层 ○ 使用业务 id 进行路由 ○ 执行转账计划 ○ 分发账户变动请求 ● Auticuro 账户层 ○ 使用账户 id 进行分区 ○ 执行账户变动请求 ○ 更新账户余额 分布式账务系统0 码力 | 27 页 | 12.60 MB | 1 年前3
Comprehensive Rust(简体中文) 202412C、C++ 和 Java 的互操作性。 你需要检出 AOSP。在同一机器上检出课程库,然后将 src/android/ 目录移至所检出的 AOSP 的根 目录。这将确保 Android 构建系统能检测到 src/android/ 中的 Android.bp 文件。 确保 adb sync 适用于你的模拟器或实际设备,并使用 src/android/build_all.sh 预构建所有 Android are accessed with method syntax, e.g., (a * b).saturating_add(b * c).saturating_add(c * a). 事实上,编译器会检测常量表达式的溢出情况,这便是为何该示例需要单独的函数。 5.5 类型推导 Rust 会根据变量的使用来确定其类型: fn takes_u32(x: u32) { println!("u32: &a; { let c: &mut i32 = &mut a; *c = 20; } println!("a: {a}"); println!("b: {b}"); } • 请注意,要求是相冲突的引用不能同 存在。而引用的解引用位置无关紧要。 • 上述代码无法编译,因为 a 同时作为可变值(通过 c)和不可变值(通过 b)被借用。 • 将 b 的 println! 语句移到引入 c 的作用域之前,这段代码就可以编译。0 码力 | 359 页 | 1.33 MB | 10 月前3
Hello 算法 1.0.0 Rust版1 哈希表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.2 哈希冲突 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 6.3 哈希算法 . . 更小。Java 和 C# 等编程语言默认使用 UTF‑16 编码。 2. Q & A Q:为什么哈希表同时包含线性数据结构和非线性数据结构? 哈希表底层是数组,而为了解决哈希冲突,我们可能会使用“链式地址”(后续“哈希冲突”章节会讲):数 组中每个桶指向一个链表,当链表长度超过一定阈值时,又可能被转化为树(通常为红黑树)。 从存储的角度来看,哈希表的底层是数组,其中每一个桶槽位可能包含一个值,也可能包含一个链表或一棵 栈与队列:当插入和删除操作都在链表的一端进行时,它表现出先进后出的特性,对应栈;当插入操作 在链表的一端进行,删除操作在链表的另一端进行,它表现出先进先出的特性,对应队列。 ‧ 哈希表:链式地址是解决哈希冲突的主流方案之一,在该方案中,所有冲突的元素都会被放到一个链表 中。 ‧ 图:邻接表是表示图的一种常用方式,其中图的每个顶点都与一个链表相关联,链表中的每个元素都代 表与该顶点相连的其他顶点。 双向链表常用于需要快速查找前一个和后一个元素的场景。0 码力 | 383 页 | 17.61 MB | 1 年前3
Hello 算法 1.1.0 Rust版1 哈希表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 6.2 哈希冲突 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 6.3 哈希算法 . . 更小。Java 和 C# 等编程语言默认使用 UTF‑16 编码。 2. Q & A Q:为什么哈希表同时包含线性数据结构和非线性数据结构? 哈希表底层是数组,而为了解决哈希冲突,我们可能会使用“链式地址”(后续“哈希冲突”章节会讲):数 组中每个桶指向一个链表,当链表长度超过一定阈值时,又可能被转化为树(通常为红黑树)。 从存储的角度来看,哈希表的底层是数组,其中每一个桶槽位可能包含一个值,也可能包含一个链表或一棵 栈与队列:当插入和删除操作都在链表的一端进行时,它表现出先进后出的特性,对应栈;当插入操作 在链表的一端进行,删除操作在链表的另一端进行,它表现出先进先出的特性,对应队列。 ‧ 哈希表:链式地址是解决哈希冲突的主流方案之一,在该方案中,所有冲突的元素都会被放到一个链表 中。 ‧ 图:邻接表是表示图的一种常用方式,其中图的每个顶点都与一个链表相关联,链表中的每个元素都代 表与该顶点相连的其他顶点。 双向链表常用于需要快速查找前一个和后一个元素的场景。0 码力 | 388 页 | 18.50 MB | 1 年前3
共 17 条
- 1
- 2













