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