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


8

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

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

因此,我的问题是,作为生活在西欧的“正常”公民,是否真的有必要擦除或加密计算机上的交换?在有人回答“是”之前,我可以举例说明如何进行测试,并泄漏掉自己的交换空间,以便我实际上可以看到尽管我的房屋是加密的,但哪些数据没有受到保护?



Answers:


10

作为居住在西欧的“正常”公民,是否真的有必要擦除或加密我计算机上的交换?

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

在有人回答“是”之前,我可以举例说明如何进行测试,并泄漏掉自己的交换空间,以便我实际上可以看到尽管我的房屋是加密的,但哪些数据没有受到保护?

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

一个工作示例:

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

  • 这样做sysctl vm.swappiness=100可以增加交换性(不是必需的,但是可以使示例更容易)

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

  • 在另一个终端中,从Linux保存Chimnay Kanchi的程序:如何增加系统内存的负载?usemem.c,编译gcc -o usemem usemem.c,并运行usemem &在终端反复。一次将占用512MB的内存块。(无论是什么原因导致内存被换出,可能是正常的系统使用情况,失控的进程或有意的攻击,最终结果都是相同的)

  • 观察顶部,等待bash -c被交换(SWAP列值> 0)

  • 现在运行strings /dev/sdaX | grep SECRET,其中X是您的交换对象

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

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


+1是一个很好的解释和一个很好的例子。
Jobin 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.