当我用谷歌搜索这个问题时,我仅获得有关如何保护敏感数据,如何加密交换以及如何在Linux系统中保持“正常”交换的“危险”的各种信息。
但是我找不到任何软件,方法或“方法”来真正从交换分区中获取(读取)任何数据。
因此,我的问题是,作为生活在西欧的“正常”公民,是否真的有必要擦除或加密计算机上的交换?在有人回答“是”之前,我可以举例说明如何进行测试,并泄漏掉自己的交换空间,以便我实际上可以看到尽管我的房屋是加密的,但哪些数据没有受到保护?
当我用谷歌搜索这个问题时,我仅获得有关如何保护敏感数据,如何加密交换以及如何在Linux系统中保持“正常”交换的“危险”的各种信息。
但是我找不到任何软件,方法或“方法”来真正从交换分区中获取(读取)任何数据。
因此,我的问题是,作为生活在西欧的“正常”公民,是否真的有必要擦除或加密计算机上的交换?在有人回答“是”之前,我可以举例说明如何进行测试,并泄漏掉自己的交换空间,以便我实际上可以看到尽管我的房屋是加密的,但哪些数据没有受到保护?
Answers:
作为居住在西欧的“正常”公民,是否真的有必要擦除或加密我计算机上的交换?
这是一种个人判断,取决于您对数据隐私的重视程度,以及如果数据落入攻击者的手中,则希望保护数据免遭泄露的程度。假设您有一台笔记本电脑,并且有一天它被盗了-小偷试图提取密码或加密密钥或其他私人数据的可能性有多大,您在乎吗?很多人不在乎,但有些人在乎。诚然,大多数盗窃者只是为了立即获得经济利益而出售笔记本电脑,但是在某些情况下,攻击者可能会被激励进一步尝试访问数据本身。
在有人回答“是”之前,我可以举例说明如何进行测试,并泄漏掉自己的交换空间,以便我实际上可以看到尽管我的房屋是加密的,但哪些数据没有受到保护?
任何进程的内存都可能被交换出交换空间。内存泄漏可能很危险-明显的例子是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”秘密被泄露。
这个问题使我们对软件开发之间的问题进行了讨论,例如软件将敏感数据保留在内存中和数据加密。
因此,一开始,您应该阅读一些有关实用软件开发和数据加密的文章。
开始阅读本文:http : //www.ibm.com/developerworks/library/s-data.html?ns-311
希望能帮助到你。