基于静态分析的Rust内存安全缺陷检测研究基于静态分析的Rust内存安全缺陷检测研究 报告人:徐辉 报告日期:2022.11.25 复旦大学 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 Rust语言 ❑ 系统级安全编程语言 ▪ 内存安全 ▪ 并发安全 ▪ 效率 2006年 2011年 struct List{ val: u64, prev: Option>>, next: Option >>, } 方法一:智能指针 方法二:允许使用裸指针 Unsafe Rust ❑ Unsafe Rust功能: ▪ 解引用裸指针 ▪ 调用unsafe函数 ▪ 调用FFI(其它语言接口) ❑ 使用条件:必须标注unsafe Auto Memory Reclaim问题:示例2 创建未初始化的变量foo Panic将导致访问未初始化内存 大纲 一、问题背景 二、Rust指针缺陷检测方法 三、实验结论 四、论文发表心得 研究挑战和思路 ❑ 研究挑战:指针分析是NP-hard问题 ▪ 准确性:应采用路径敏感的指针分析算法,避免过多误报 ▪ 分析效率:应基于Rust MIR的特点对算法进行优化,使其可行 ❑ 0 码力 | 28 页 | 1.55 MB | 1 年前3
Rust API可靠性分析与验证• 现用方法的局限性 • 基于程序合成+模糊测试的可靠性分析方法 Rust China Conf 2021 – 2022, Online, China 自我简介 • 本(2019)硕(2022)毕业于复旦大学 • 目前在蚂蚁集团安全计算部门开发应用于机密计算的Rust系统软件 • 研究生期间主要从事Rust测试与验证工具的研究,本人所在的是国内最早 开展Rust程序分析相关研究的实验室 • 所有动态检查都不应该被违背(可以被安全的移除),除非panic是一种 允许的行为 Rust China Conf 2021 – 2022, Online, China 现有的可靠性分析方法及其局限性 模糊测试(afl.rs, libfuzzer):分支覆盖率;用例程序的构造 符号执行(klee, angr):路径爆炸;求解困难 静态分析(MirChecker, Rudra, SafeDrop):分析特定问题;假阳性0 码力 | 13 页 | 1.68 MB | 1 年前3
洛佳 组件化驱动、ROM运行环境与RustSBI• 笔名洛佳 • 华中科技大学网络空间安全学院研一 在读(导师:周威老师) • 研究方向:物联网安全、系统安全 • 热爱开源,乐于尝试新技术 • RustSBI项目维护者 • 致力于向科研、教学和产业界推广 Rust语言 汲取Rust嵌入式和操作系统生态经验,总 结而成的新一代驱动开发方法。动、静态 基地址结合,高灵活性;一次开发,同时 复用于嵌入式、固件和内核中。 # 组件化驱动 分 可 拆 为 组 件 。灵 活 组 合 组 件 ,构 成 符 合 应 用 需 求 的 组 件 化 操 作 系 统 。 系 统 软 件 开 发 新 模 式 组 件 化 驱 动 组件化驱动的组成方法 寄 存 器 表 示 外 设 功 能 抽 象 功 能 成 熟 开 源 标 准 的 抽 象 设 计 适配embedded-hal等外设功能标准抽象 面 向 功 能 的 外 设 结 构 联合所有权、泛型等,暴露外设所有功能 型允许的操作函数能通过编译,否则 拒绝编译,避免不安全行为; • 开源标准抽象的功能,使用抽象规定 的调用方法。本芯片外设专属的功能 也可通过专有函数使用; • 用户代码简短易懂,容易编写和调 试,降低开发成本。 *BL808组件化驱动操作GPIO按钮和灯 组件化外设的分类和设计方法 通 用 连 接 外 设 U A R T 、 S P I 和 I 2 C 等 , 通 过 互 斥 I0 码力 | 21 页 | 3.12 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Rust 版两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单、直接且有效。然而刷题就如同玩“扫雷”游戏,自学能力 强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被炸得满头是包,并在挫折中步步退缩。通读教材 也是一种常见做法,但对于面向求职的人来 案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的 “知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领, 相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。 我深深赞同费曼教授所言:“Knowledge isn’t free. You have to pay attention AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事实上,在计算机问世之前,算法和数据结构就已经存在于世界的各个角落。早期的算法相对简单,例如古 代的计数方法和工具制作步骤等。随着文明的进步,算法逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。0 码力 | 387 页 | 18.51 MB | 10 月前3
Hello 算法 1.1.0 Rust版两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单、直接且有效。然而刷题就如同玩“扫雷”游戏,自学能力 强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被炸得满头是包,并在挫折中步步退缩。通读教材 也是一种常见做法,但对于面向求职的人来 案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的 “知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领, 相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。 我深深赞同费曼教授所言:“Knowledge isn’t free. You have to pay attention AlphaGo 的精彩棋局、ChatGPT 的自然交互,这些应用都是算法在计算机上的精妙演绎。 事实上,在计算机问世之前,算法和数据结构就已经存在于世界的各个角落。早期的算法相对简单,例如古 代的计数方法和工具制作步骤等。随着文明的进步,算法逐渐变得更加精细和复杂。从巧夺天工的匠人技艺、 到解放生产力的工业产品、再到宇宙运行的科学规律,几乎每一件平凡或令人惊叹的事物背后,都隐藏着精 妙的算法思想。0 码力 | 388 页 | 18.50 MB | 1 年前3
Hello 算法 1.0.0 Rust版两年前,我在力扣上分享了“剑指 Offer”系列题解,受到了许多读者的鼓励和支持。在与读者交流期间,我 最常被问的一个问题是“如何入门算法”。逐渐地,我对这个问题产生了浓厚的兴趣。 两眼一抹黑地刷题似乎是最受欢迎的方法,简单、直接且有效。然而刷题就如同玩“扫雷”游戏,自学能力 强的人能够顺利将地雷逐个排掉,而基础不足的人很可能被炸得满头是包,并在挫折中步步退缩。通读教材 也是一种常见做法,但对于面向求职的人来 案,即使不是最 优解,也至少是一次积极的尝试。本书虽然不足以让你直接拿到 Offer,但会引导你探索数据结构与算法的 “知识地图”,带你了解不同“地雷”的形状、大小和分布位置,让你掌握各种“排雷方法”。有了这些本领, 相信你可以更加自如地刷题和阅读文献,逐步构建起完整的知识体系。 我深深赞同费曼教授所言:“Knowledge isn’t free. You have to pay attention 内容结构 本书的主要内容如图 0‑1 所示。 ‧ 复杂度分析:数据结构和算法的评价维度与方法。时间复杂度和空间复杂度的推算方法、常见类型、示 例等。 ‧ 数据结构:基本数据类型和数据结构的分类方法。数组、链表、栈、队列、哈希表、树、堆、图等数据 结构的定义、优缺点、常用操作、常见类型、典型应用、实现方法等。 ‧ 算法:搜索、排序、分治、回溯、动态规划、贪心等算法的定义、优缺点、效率、应用场景、解题步骤0 码力 | 383 页 | 17.61 MB | 1 年前3
Comprehensive Rust(简体中文) 20241262 12.4.1 解答 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 13 方法和特征 67 13.1 方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 13.2 特征(Trait) 内存管理 99 19.1 回顾:程序的内存分配 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 19.2 内存管理方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 19.3 所有权 . . . . . . FromIterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 25.4 练习:迭代器方法链 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 25.4.1 解答 . . . . . . . . .0 码力 | 359 页 | 1.33 MB | 11 月前3
Hello 算法 1.2.0 繁体中文 Rust 版兩年前,我在力扣上分享了“劍指 Offer”系列題解,受到了許多讀者的鼓勵與支持。在與讀者交流期間,我 最常被問到的一個問題是“如何入門演算法”。漸漸地,我對這個問題產生了濃厚的興趣。 兩眼一抹黑地刷題似乎是最受歡迎的方法,簡單、直接且有效。然而刷題就如同玩“踩地雷”遊戲,自學能 力強的人能夠順利將地雷逐個排掉,而基礎不足的人很可能被炸得焦頭爛額,並在挫折中步步退縮。通讀教 材也是一種常見做法,但對於面向求職的人 ,即使不是最 佳解,也至少是一種積極的嘗試。本書雖然不足以讓你直接拿到 Offer,但會引導你探索資料結構與演算法 的“知識地圖”,帶你了解不同“地雷”的形狀、大小與分布位置,讓你掌握各種“排雷方法”。有了這些本 領,相信你可以更加自如地刷題與閱讀文獻,逐步構建起完整的知識體系。 我深深認同費曼教授所言:“Knowledge isn’t free. You have to pay attention AlphaGo 的精彩棋局、 ChatGPT 的自然互動,這些應用都是演算法在電腦上的精妙演繹。 事實上,在電腦問世之前,演算法和資料結構就已經存在於世界的各個角落。早期的演算法相對簡單,例如 古代的計數方法與工具製作步驟等。隨著文明的進步,演算法逐漸變得更加精細和複雜。從巧奪天工的匠人 技藝、到解放生產力的工業產品、再到宇宙運行的科學規律,幾乎每一件平凡或令人驚嘆的事物背後,都隱 藏著精妙的演算法思想。0 码力 | 388 页 | 18.82 MB | 10 月前3
Comprehensive Rust(繁体中文)解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 13 Read 和 Write 67 13.1 方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 13.2 特徵 . . . FromIterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 25.4 練習:疊代器方法鏈結 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 25.4.1 解決方案 . . . . . . . . . 天:上午 20 第 3 部分 歡迎參加第 1 天課程 今天是學習 Rust 基礎知識的第一天,我們會探討許多內容: • 基本的 Rust 語法:變數、純量和複合型別、列舉、結構體、參照、函式和方法。 • Types and type inference. • 控制流程結構:迴圈、條件式等。 • 使用者定義的型別:結構體和列舉。 • 模式配對:解構列舉、結構和陣列。 課程時間表 Including0 码力 | 358 页 | 1.41 MB | 11 月前3
Comprehensive Rust(繁体中文) 202406解決方案 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 13 Read 和 Write 65 13.1 方法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 13.2 特徵 . . . FromIterator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 25.4 練習:疊代器方法鏈結 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 25.4.1 解決方案 . . . . . . . . . 天:上午 19 第 3 部分 歡迎參加第 1 天課程 今天是學習 Rust 基礎知識的第一天,我們會探討許多內容: • 基本的 Rust 語法:變數、純量和複合型別、列舉、結構體、參照、函式和方法。 • Types and type inference. • 控制流程結構:迴圈、條件式等。 • 使用者定義的型別:結構體和列舉。 • 模式配對:解構列舉、結構和陣列。 課程時間表 Including0 码力 | 356 页 | 1.41 MB | 1 年前3
共 24 条
- 1
- 2
- 3













