3个稳定版本
1.1.0 | 2020年10月27日 |
---|---|
1.0.1 | 2020年9月28日 |
#8 in #randomized
245KB
335 代码行数(不含注释)
包含(ELF 库,225KB) librmalloc.so
rmalloc
如果我们不随机使用地址空间的一部分,这么大的地址空间有什么意义呢?
- 一位明智的软件工程师
rmalloc
是一个改进传统 malloc
实现的 malloc
(以及 calloc
,realloc
,当然还有 free
)实现,通过利用现代处理器地址空间的大小,在分配中提供加密增强的安全性。
用法
rmalloc
最容易与简单的 LD_PRELOAD
一起使用 - 首先,获取仓库,然后像往常一样运行您要保护的程序,但在前面加上 LD_PRELOAD=path/to/librmalloc.so
。例如
LD_PRELOAD=./target/release/librmalloc.so cargo build
在 rmalloc
仓库中运行应无错误完成。
对于注重安全的用户,safety-checks
启用了默认关闭的检查,以确认内存不会被双重分配。这些检查可能导致许多应用程序不稳定,并且默认禁用。要启用安全检查构建 rmalloc
,请使用以下命令:cargo build --release --features safety-checks
。重要提示:如果您打算使用启用安全检查的 rmalloc,请阅读以下部分!
"帮帮我,我的程序报告说它崩溃了,出现了 Segmentation fault
!!!"
它可能捕获了 rmalloc 用来探测页面是否可用于新分配的段错误,并认为错误是由于其自身行为引起的。 vim
、bash
和 collect2
都这样做,仅举几例。一些应用程序假定它们对信号或信号处理有独家兴趣,因此天真地覆盖 SIGSEGV
处理器会不可修复地破坏 rmalloc
。
理论
在核心上,rmalloc
使用梅森旋转算法随机选择分配的地址。然后它将探测选定的地址是否已被分配,如果没有,它将使用高性能的 mmap
系统调用分配它。因为 mmap
函数是在 Linux 内核中实现的,所以它对 RCE 漏洞和供应链(软件更新)攻击是安全的。因为它在内核中,所以它也很快。
线程安全
rmalloc
是线程安全的。
无_std
rmalloc
是 no_std
。它适用于嵌入式使用,用于替换 glibc 或其他 malloc
。
名称 rmalloc
这是一个玩笑式crate。如果您想为几乎任何更严肃的目的使用这个名称,请随时给我发邮件。
变更日志
1.1.0
- 将安全检查设置为可选,以改善
rmalloc
兼容性
1.0.1
- 新的安全且随机的 mallocator 的首次发布
依赖关系
约 2–4.5MB
约 70K SLoC