我目前正在将gnupg与雷鸟一起使用,以读取加密的电子邮件。如果我正确理解了交换行为,则包含交换后的电子邮件的内存页可能会交换出去,并在硬盘上留下痕迹,理论上可以稍后对其进行取证。
虽然当然可以在使用敏感文件的过程中仅使用加密的交换文件或全局禁用交换,但这会影响性能,可能会被忘记并需要root特权。
是否可以将某些文件或程序标记为不可交换?即使没有root访问权限?能否编写一个可以分发给技术上天真的用户并且其内存内容永远不会交换到磁盘的应用程序?
mlock
,您应该检查。
我目前正在将gnupg与雷鸟一起使用,以读取加密的电子邮件。如果我正确理解了交换行为,则包含交换后的电子邮件的内存页可能会交换出去,并在硬盘上留下痕迹,理论上可以稍后对其进行取证。
虽然当然可以在使用敏感文件的过程中仅使用加密的交换文件或全局禁用交换,但这会影响性能,可能会被忘记并需要root特权。
是否可以将某些文件或程序标记为不可交换?即使没有root访问权限?能否编写一个可以分发给技术上天真的用户并且其内存内容永远不会交换到磁盘的应用程序?
mlock
,您应该检查。
Answers:
在注释中,我建议您创建一个cgroup,将其设置memory.swappiness
为零(以最大程度减少交换),然后在其中运行应用程序。如果这样做的话,除非您运行的物理内存非常低,以至于交换该cgroup中程序的页面是使足够的物理内存可用的唯一方法,否则您的应用程序可能不会交换。
要在RHEL 6.5上执行此操作:
确保libcgroup
已安装软件包。这使您可以访问诸如cgcreate
和的用户空间工具 cgexec
。
启动并启用该cgconfig
服务,以便在重新引导之间持久保留对cgroup配置的更改。在RHEL上,此服务还应在/cgroup
树下安装所需的文件系统。
使用创建cgroup cgcreate -g memory:thunderbird
在此组中将swappiness设置为零 cgset -r memory.swappiness=0 thunderbird
使用cgsnapshot -s > /etc/cgconfig.conf
保存更新的持久性配置的cgconfig
服务(所有的变化到现在为止已经运行的变化。你可能会想保存默认的配置文件的地方,并给它使得它的持久性配置前的过一次。
现在,您可以cgexec
用来在thunderbird
cgroup中启动所需的应用程序:
[root @ xxx601〜]#cgexec -g内存:雷鸟ls
anaconda-ks.cfg a.out foreman.log index.html install.log install.log.syslog node.pp sleep sleep.c ssl-build堆栈测试
[root @ xxx601〜]#
我thunderbird
实际上没有安装,否则我会做的。不知道为什么上面的格式搞砸了。
一种替代方法cgexec
是启动雷鸟并将PID添加到tasks
应用程序的文件中。例如:
[root @ xxx601〜]#猫/ cgroup /内存/雷鸟/任务
[root @ xxx601〜]#pidof httpd
25926 10227 10226 10225 10163 10162 10161 10160 10159 10157 10156 10155 10152 10109
[root @ xxx601〜]#echo 25926> / cgroup /内存/雷鸟/任务
[root @ xxx601〜]#猫/ cgroup /内存/雷鸟/任务
25926
再有,值得一提的是,这从技术上讲并不能阻止交换,但是如果不修改应用程序本身,那可能是最好的选择。我现在刚刚发现memory.memsw.limit_in_bytes
,这似乎是强制进行无交换操作的更直接的控制方法,但我还没有进行足够的尝试,因此不能完全说出它可以完全解决您的问题。话虽如此,这可能是值得研究的。
真正的答案将是让应用程序mlock
敏感信息解决此类问题。我愿意打赌像Thunderbird这样的应用程序可以做到这一点,但是我对内部机制了解不足,无法对此发表评论。
chroot
在unshare
d --mount
名称空间中使用a 。这样做,我敢打赌最终的性能效果会比加密交换更好。
memory.swappiness=0
您认为一个核心转储,是否仍可以检查以揭示任意进程发生了什么?我不知道-但我很好奇。
MADV_DONTDUMP
。但是,大多数时候,担心交换敏感信息的人们都担心笔记本电脑被盗,交换区域被梳理。在他们启动核心转储时,系统已经完全被破坏。
是的,应用程序可以通过mlock
系统调用防止其某些内存被换出。但是,这对于您的情况并不是真正有用。
机密数据不仅在应用程序内存中。它在不同的地方(临时文件结束了/tmp
,/var/spool
等)。雷鸟本身正在显示解密的电子邮件,因此您也必须将其锁定到RAM。
如果你想确保你的磁盘将不包含机密文件的痕迹,你需要为所有以及加密你交换的临时文件(潜在的位置特别,/tmp
如果不是tmpfs的,而且大部分/var
,除了到您的主目录)。
加密交换对性能的影响很小甚至为零。加密比磁盘I / O快得多。
chroot
和和一起使用的命名空间容器swapoff
将是加密交换的更好替代方案。很好的答案-没有其他答案提到其他文件系统效果。我自己,我只是没有swap
-我没有拥有少于4GB RAM的任何计算机,我看不到使用它的任何好处。它的使用仅对涉及到挂起的任何计算机都是实用的-并且很容易编写脚本。
cgexec
雷鸟插入其中。您仍然需要root用户访问权限,但这是管理员级别的解决方案。如果要开发自己的应用程序,则可以使用mlock。