3个稳定版本

1.1.0 2020年10月27日
1.0.1 2020年9月28日

#8 in #randomized

0BSD 许可证

245KB
335 代码行数(不含注释)

包含(ELF 库,225KB) librmalloc.so

rmalloc

如果我们不随机使用地址空间的一部分,这么大的地址空间有什么意义呢?

  • 一位明智的软件工程师

rmalloc 是一个改进传统 malloc 实现的 malloc(以及 callocrealloc,当然还有 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 用来探测页面是否可用于新分配的段错误,并认为错误是由于其自身行为引起的。 vimbashcollect2 都这样做,仅举几例。一些应用程序假定它们对信号或信号处理有独家兴趣,因此天真地覆盖 SIGSEGV 处理器会不可修复地破坏 rmalloc

理论

在核心上,rmalloc 使用梅森旋转算法随机选择分配的地址。然后它将探测选定的地址是否已被分配,如果没有,它将使用高性能的 mmap 系统调用分配它。因为 mmap 函数是在 Linux 内核中实现的,所以它对 RCE 漏洞和供应链(软件更新)攻击是安全的。因为它在内核中,所以它也很快。

线程安全

rmalloc 是线程安全的。

无_std

rmallocno_std。它适用于嵌入式使用,用于替换 glibc 或其他 malloc

名称 rmalloc

这是一个玩笑式crate。如果您想为几乎任何更严肃的目的使用这个名称,请随时给我发邮件。

变更日志

1.1.0

  • 将安全检查设置为可选,以改善 rmalloc 兼容性

1.0.1

  • 新的安全且随机的 mallocator 的首次发布

依赖关系

约 2–4.5MB
约 70K SLoC