随机化或粉碎应用程序的内存

随机化或粉碎应用程序的内存

是否可以在特定应用程序的生命周期结束后随机化或粉碎其内存,或者更好的是,每当它释放一些内存时?

像这样的命令行实用程序将是完美的:

shred-memory [选项] [{应用程序的参数...}]

答案1

Linux(我希望像任何现代多进程操作系统一样)确保进程在分配内存时只将页面清零。因此一个进程无法读取另一个进程以前使用的内存。

在 Linux 下,清零发生在分配页面时,而不是释放页面时。这就留下了两种读取进程以前使用的内存的方法:

  • 利用内核错误
  • 转储 RAM 或交换区的内容(需要 root 或物理访问权限)

有人提出了一个 Linux 内核补丁,允许在释放页面后立即将其清零(sanitize_mem第1集,sanitize_mem第2集),但据我所知不被接受。

在实践中,最大的攻击窗口是交换空间(它可以长时间保留数据),即使这对于攻击者来说也不是小事(他们需要窃取磁盘,并整理混乱的页面)。这也是最容易修复的:使用 加密交换空间dm-crypt

答案2

除了吉尔斯的回答之外:

  • 您可以内存中的锁定页面防止交换(除非您知道自己在做什么 - 例如存储密码 - 这是坏主意,它可能会影响系统的性能)
  • 您可以free使用以下方法重写函数来手动清理内存LD_LIBRARY_PRELOAD

答案3

有一些实用程序可以擦除内存,但需要在相关程序退出并释放其内存之后进行。我不知道有什么可以专门擦除特定程序分配的内存。

从“secure_delete”套件中查看“smem”(以及其他),网址为thc.org用于擦除实时系统的可用内存。

相关内容