< 返回版块

ZhangHanDong 发表于 2019-08-07 22:44

Tags:rust

「讨论」Rust的安全性

#security

今天的讨论有两个主题,第一个是关于在Safe Rust中绕过借用检查的一个问题,第二个是关于Libra区块链依赖Rust单一语言而引起的安全性讨论。

一、Safe Rust中绕过借用检查:

几天前(2019 年 7 月 27 日)一位用户将 Rust issue #25860 Implied bounds on nested references + variance = soundness hole 中的用例上传到了 crates.io(fake-static)。意在使大家注意到这个在此之前已经超过两年没有动静的 issue。这使我了解到原来目前的 Rust 实现还在一些边角存在着可怕的缺陷。以致于在安全 Rust 中通过精心构造的数行代码便能绕过借用检查,正如 issue 中的用例:

static UNIT: &'static &'static () = &&();

fn foo<'a, 'b, T>(_: &'a &'b (), v: &'b T) -> &'a T { v }

fn bad<'a, T>(x: &'a T) -> &'static T {
    let f: fn(_, &'a T) -> &'static T = foo;
    f(UNIT, x)
}

二、在今天某微信社区的一次区块链安全的分享中,提到Libra

墨子安全实验室创始人 苗知秋 谈到Libra选择Rust:

在实现语言上,Libra项目选择了一个非常小众但宣称安全性突出的语言RUST。然而,宣称的安全不表示实际上的安全。过于小众的语言往往缺乏长时间的锤炼,导致隐藏的问题较多。再安全的语言也无法确保实现的安全,漏洞常常来自代码实现过程,来自于人。RUST社区也在讨论随机数生成函数的安全升级。所以RUST语言虽然具有安全的特色,但是并不完美,不排除有可能成为Libra项目的阿喀琉斯之踵。 最后,过于依赖RUST语言有可能带来单一性依赖问题,如果RUST语言出现安全问题,则会波及整个Libra系统,这一点可能需要时间来解决,毕竟Libra出现时间尚短,需要时间来实现必要的多样化部署。

日报君(Chaos)发出质疑:

不过话说回来,有一点我不太同意。安全漏洞比例最大的是内存安全问题,(见微软安全响应中心的文章,70%的安全漏洞是内存问题引起的)。而Rust语言的安全性恰恰就是解决内存安全(常见的内存安全问题,当然不完美,也不可能完美)。内存漏洞是跨语言漏洞,多用一种语言就多一份风险,其实并不能改善安全性。

苗知秋回复:

这是一种经典的安全防护思路,安全问题必须从整体上考虑,不能只看局部。区块链作为去中心化的P2P架构,不怕部分节点出问题,担心的是全部节点出问题。因此如果单一使用rust语言实现,谁敢打包票说rust万寿无疆、刀枪不入?万一某天rust爆出系统性漏洞,Libra就全军覆没了。因此为了实现系统级的安全,必须要把风险分散。如果所有的rust部署节点出问题,在解决rust问题期间Go语言节点还可以支撑系统运行,Go语言出问题,在解决Go语言问题期间Java节点也可以让系统正常运行。那么如果rust,go,java同时出问题呢?概率比rust一个出问题的概率小多了啊,这就叫千斤重担万人挑,人人头上有指标[呲牙]

小结: 从安全角度来看,苗知秋的观点是有一定道理的。这可能也是以太坊多语言实现的一个原因。

关于以上两个讨论,大家怎么看呢?

boggle-solver:Boggle游戏的Rust实现

#crossbeam

Boggle是一款受欢迎的益智拼字游戏,作者用Rust来实现了它,作者主要是想练手crossbeam,因为他最近找工作的时候碰到的白板手写代码就是这个Boggle Slover。

boggle-solver

「讨论」为什么Rust突然被广泛使用?

#Reddit

为什么Rust突然被Facebook、微软等广泛推崇? 下面一个评论总结的很到位:当「工程质量」高于一切的时候,选择Rust是自然而然的事。

Reddit讨论

Rustsim 报告 #7

#rustsim

Rustsim组织是一个GitHub组织,聚焦于提供各种数值模拟的库。包括

  • alga, 抽象代数库
  • nalgebra, 线性代数库
  • ncollide, 2D和3D的碰撞检测库
  • nphysics, 2D和3D的物理模拟库

最新报告称:

  • nphysics 0.12 已经支持了连续碰撞检测
  • ncollision 0.20 对非线性冲击时间计算和Pipeline进行了重构

Read More

当你没时间维护自己的crate时,最好的善后方法是什么呢?

#crate

这个帖子给出了一个办法,就是把它交给Rust Bus组织(社区义务者),该组织会帮你管理crate。倒也是个不错的办法。

slingshot : 一个新的区块链框架

#blockchain

stellar公司出品。wow,挖掘出一点点关于Rust之父的秘史,不知道大家是否知道:Rust之父Graydon Hoare在2014年加入过这家公司作为核心团队成员(当然现在不在了),可以看下面的Stellar Report 2014。

emosaic: 马赛克生成器

#mosaic

万恶的马赛克。

img

emosaic

「新手向」「视频」和借用检查器战斗实录

#BorrowChecker

主要是简单地使用scope(花括号块)来解决生命周期问题

Read More

Polaris:一个用Rust编写的web音乐播放器

#music #web

img

Polaris

Codenano: 一种在浏览器中设计DNA(脱氧核糖核酸)纳米结构的工具

#DNA #wasm

Codenano还能够计算出一些简单的DNA碱基之间的相互作用,以帮助用户根据一些简单的标准设计出可行的DNA纳米结构。

创建纳米结构设计可能是一个乏味的过程,而codenano的设计目的是减少这一过程。它给出了一个简单的应用编程接口,在这个接口中,我们使用一个小的、简单的Rust编程语言子集来指定一个DNA纳米结构。使用这个应用编程接口不需要任何Rust的知识。然而,高级用户可以从Rust的表达中受益。

img


From 日报小组 Chaos

日报订阅地址:

独立日报订阅地址:

社区学习交流平台订阅:

评论区

写评论
jonirrings 2019-08-08 11:37

多语言分担风险也轮不到那些修了几十年都没修好的,以及完全不考虑安全设计的新语言。而是应该采用其他依照某种安全哲学设计的语言。

ChariotChai 2019-08-08 10:01

感觉大家的rust都玩出了花,而我连 borrow checker 都要过半天 QAQ

1 共 2 条评论, 1 页