上了年纪的读者对Stagefright这个臭名昭著(可能也帮多少白帽子刷爆了bounty?)的Android平台上的安全问题(嗯,不知道最后一共登记了几个CVE)应该有所耳闻。实际上从多少年前开始,用内存不安全的语言来处理binary data就容易引入安全漏洞,对于文件格式的解析,在2014年的OSDI上就有一篇论文 Nail: A practical tool for parsing and generating data formats(来自大名鼎鼎的 Nickolai Zeldovich@MIT CSAIL 却是一篇清新的小文)
https://people.csail.mit.edu/nickolai/papers/bangert-nail.pdf
Nail实现了专门为解析不同的文件格式而设计的一种domain specific language,而它的思路在最近被Google效仿拿出来做了一套类似的东西,这就是我们今天要介绍的Wuffs
Wuffs提供了一个有点强迫症的设计,强制程序员写代码的时候要考虑到各种情况,比如说有这么一个例子:
如果上面这种基本的写法就肯定药丸,所以用Wuffs的话就会被强制写成下面这种风格:
但是有点反直觉的是,Wuffs的特点是“贼xxx快”("ridiculously fast"),至少在各种跑分测试上,Wuffs实现的代码达到了如下的性能:
-
It can decode bzip2 1.3x faster than
/usr/bin/bzcat
(C). -
It can decode deflate up to 1.4x faster than zlib-the-library (C).
-
It can decode GIF 2x-6x faster than "giflib" (C), "image/gif" (Go) and "gif" (Rust).
-
It can decode PNG 1.2x-2.7x faster than "libpng" (C), "image/png" (Go) and "png" (Rust).
不知道这是不是一个迷你版的Rust,大家可以去研究一下
https://github.com/google/wuffs
原文始发于微信公众号(安全研究GoSSIP):G.O.S.S.I.P 资源推荐 2024-05-23 安全的文件解析器 Wuffs
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论