如何才能真正从交换分区中获取敏感信息?

Bob*_*Bob 8 encryption swap

当我用谷歌搜索这个问题时,我只能得到关于如何保护敏感数据、如何加密交换以及在 Linux 系统中保持“正常”交换有多“危险”的各种信息。

但是我找不到任何软件、方法或“如何”来真正从交换分区中获取(读取)任何数据。

所以我的问题是,作为一个生活在西欧的“普通”公民,真的有必要在我的电脑上擦除或加密交换吗?在有人回答“是”之前,我能否举个例子说明我如何测试并泄露我自己的交换,以便我实际上可以看到尽管我的家加密了,哪些数据是不受保护的?

bai*_*ain 10

作为生活在西欧的“普通”公民,真的有必要在我的电脑上擦除或加密交换吗?

这是一种个人判断,取决于您对数据隐私的重视程度,以及如果数据落入攻击者之手,您希望保护数据免于暴露的程度。假设您有一台笔记本电脑,有一天它被盗了 - 小偷尝试提取密码或加密密钥或其他私人数据的可能性有多大,您关心吗?很多人不在乎,但有些人在乎。诚然,大多数窃贼只是为了立即获得经济利益而出售笔记本电脑,但在某些情况下,攻击者可能会更进一步尝试访问数据本身。

在有人回答“是”之前,我能否举个例子说明我如何测试并泄露我自己的交换,以便我实际上可以看到尽管我的家加密了,哪些数据是不受保护的?

任何进程的内存都可能被换出到交换空间。内存泄漏可能很危险 - 一个明显的例子是 Heartbleed - 请参阅我如何使用 Heartbleed 窃取站点的私有加密密钥。Heartbleed 暴露的内存只属于一个进程,而你的交换空间可能暴露的内存属于每个进程。想象一个包含私钥或密码列表(例如 Web 浏览器)的进程被换出 - 这些项目将以明文形式出现在交换空间中。提取它们是在内存中筛选特定数据模式的问题 - 它可以是通过以下方式可见的纯文本 ASCII 数据strings,或者可能更复杂,如 Heartbleed 中(其中测试是某些连续字节是公共加密密钥的除数)。如果您有一个加密的 /home 分区,那么显然要查找的是一个数据块,该数据块构成将解锁用户数据的加密密钥。

一个工作示例:

  • bash -c 'echo SECRET=PASSWORD > /dev/null; sleep 1000'创建bash进程与它的堆栈上的一些机密数据

  • sysctl vm.swappiness=100增加swappiness(不是必须的,但可能使示例更容易)

  • 运行top -c,按 f,启用 SWAP 列,按 q 返回顶部进程视图,向下滚动直到看到bash -c进程

  • 在另一个终端中,从Linux 中保存 Chimnay Kanchi 的程序:如何加载系统内存?to usemem.c,编译它gcc -o usemem usemem.c,并usemem &在终端中重复运行。这将一次使用 512MB 内存块。(不管是什么原因导致内存被换出,可能是系统正常使用、进程失控或蓄意攻击,最终结果是一样的)

  • watch top,等待bash -c被交换(SWAP 列值 > 0)

  • 现在运行strings /dev/sdaX | grep SECRETX 是您的交换分区

  • 恭喜 - 您刚刚从交换分区中提取了“秘密”数据。您将看到多个 SECRET 文本副本,后跟“密码”,这些副本包括从父 bash 进程、top 进程和“bash -c”进程泄漏的完整命令行。不包含完整命令行的行已从“bash -c”进程中泄露。

  • 要证明秘密从进程内存泄漏,而不仅仅是命令行,请将行添加unsigned char secret[] = "SECRET=XXXX";到 usemem.c(就在该unsigned long mem;行的下方)。重新编译并usemem &反复运行strings /dev/sdaX | grep SECRET。这次你会看到“XXXX”的秘密被泄露了。


Oct*_*ves -1

这个问题引导我们讨论软件开发之间的问题,例如软件将敏感数据保留在内存中以及数据加密。

因此,首先您应该阅读一些有关实用软件开发和数据加密的文章。

开始阅读这篇文章: http://www.ibm.com/developerworks/library/s-data.html ?ns-311

希望能帮助到你。