我的系统使用全盘加密进行加密,即除 /boot 之外的所有内容都使用 dmcrypt/luks 进行加密。我担心冷启动攻击,研究人员证明,可以提取内容约5分钟。
您能否提供以下方面的说明:
- 如何在关机/重启过程的最后步骤触发 kexec 进入新内核(以确保干净卸载,防止文件系统损坏,确保旧内核被覆盖)
- 如何创建那个内核,它会清除所有的内存
即您能解释一下如何在 Ubuntu 上执行相同操作吗?
如何检测关机?如何启动 RAM 清除?当用户点击“关机”或启动“恐慌脚本”时,应该清除 RAM。
谢谢你的努力!
前期工作:
- Tails RAM Wipe 介绍
- 有关 tails RAM Wipe 实现的更多信息
- Liberte Linux RAM Wipe 介绍
- 有关 Liberte Linux RAM Wipe 实现的更多实现细节
- memtest 不会删除所有内容
- 测试 RAM Wipe 是否正常工作
- Tails 邮件列表讨论
- 另一个 Tails 邮件列表讨论
- 内核错误报告
如果您希望看到该功能成为现实,请对 Ubuntu Brainstorm 进行投票!
答案1
如果您没有使用旧 RAM(如 DDR2、512 MB 或 1024 MB),那么您不必担心 CBA。
查看原始研究这里(PDF)。
如果您仔细阅读,您会发现只有 DDR2 及更早的版本容易受到这种攻击。DDR3 电压损失太快,无法让计算机机箱拆卸和冻结程序。因此,开门前只需拔掉插头即可。
还,这张纸确认 DDR3 不易受到 CBA 的影响。如果您确实想要保护自己,因为您有 DDR2 RAM,那么请在 BIOS 中启用:
- 断电后自动启动
- 启动时检查 RAM
并执行与 DDR3 相同的操作,但拔掉插头后再重新插入。您的计算机将自行启动并通过检查来清除内存。如果清除效率不够高,启动过程将再次将系统加载到内存中。这将太快而无法允许 CBA。
来自关联您在评论中提供:
因此,总而言之,不应将冷启动攻击视为获取可疑计算机系统内存的主要方法。相反,在对该系统进行冷启动攻击之前,应尝试其他技术,包括软件和基于硬件的获取(即 FireWire)。但是,如果出现上述技术不可用(即缺少 FireWire 连接或系统登录控制台或无法获取远程内存)或无效的情况,则可以实施冷启动攻击,前提是调查人员了解问题可能如何以及在何处出现和出错。
正如本研究所示,冷启动攻击不能被确定为特别可靠或可靠的,因为在本文进行的大多数实验中,内存驻留加密密钥无法始终如一地找到或提取,尽管它们应该可以找到或提取。对于各种字符串和关键字搜索也是如此,这些搜索应该会找到比大多数实验中发现的更多的字符串和关键字。此外,正如已经证明的那样,仅仅对计算机内存进行闪存冻结并不能保证成功获取所述内存。已经研究过的其他因素和变量已经充分研究了这些问题及其根本原因。因此,本研究的作者认为,冷启动攻击在某些情况下可用于获取嫌疑系统的内存,但这种方法不应被视为万能药,而应在所有其他途径都用尽时作为最后的手段。
最后,即使是成功获取且几乎没有遭受任何损失,也可能无法在法庭上作为有力的证据,至少在出现判例并且可以使用合理且易于理解的方法证明所获取内存的完整性之前是如此。研究仍在继续,以建立一种更合适、更可靠的方法来获取嫌疑人计算机的内存……
此外,如果您查看实验结果,您会发现他们仅在系统 2 和 6 中成功提取了 AES 密钥,而当您查看系统 2 的规格时,这些都是热启动攻击 - 1024 MB RAM 533 MHz - 这是旧东西。另一个系统 - 具有 256 RAM / 128 RAM 的系统 6 - 我想这个是不言自明的。
这就是为什么他们的结论是:
搜索仍在继续,以建立一种更合适、更可靠的方法来获取嫌疑人计算机的内存……
实际上,我认为如果您有非常非常重要的数据,您不仅应该使用全驱动器加密,还应该将其保存在单独的加密文件中。使用级联算法加密,并使用与磁盘加密期间使用的密码不同的密码。您想要一种安全的关闭 PC 的方法吗?这里是:
- 将安全数据保存在 True Crypt 级联算法加密文件中
- 使用 Serpent
- 创建一个脚本来处理关机:
对于 Windows:
truecrypt.exe /wipecache
shutdown -s -f -t 1
对于 Linux:
truecrypt /wipecache
shutdown -h now
清除缓存可确保关机后 RAM 中不会残留任何易受攻击的数据。如果有人执行冷启动攻击,他们最多只能访问您的系统。他们不会将数据存储在单独加密的文件中。
答案2
加州大学洛杉矶分校的 Peter AH Peterson 编写了一项概念验证技术,并开发了使用加密 RAM 安全运行系统的理论,解决方案是明确地旨在防止冷启动攻击。他的论文名为 Cryptkeeper。我不知道他是否提供下载该软件,或者是否可以从 UCLA 获得许可。但是,至少在原则上,显然可以设计一个即使 RAM 的全部内容被泄露也能安全的 RAM 加密系统。
该解决方案的测量性能影响介于 9% 的开销和速度降低之间9,具体取决于场景的“病态”程度。9% 的数据适用于使用 Firefox 浏览网页,但他们没有说明哪种用例会使性能降低 9 倍。
Peterson 的解决方案并不像您建议的那样“擦除”RAM。相反,它使用“安全密钥隐藏机制”来防止仅通过获取 RAM 内容就泄露解密密钥。我不确定实现的细节,但我认为它在论文中有所解释。
该论文发表于 2010 年。
可以在 IEEE ieeexplore 网站上购买。也可以从某人的网站以 PDF 格式免费下载;在 google 上搜索“cryptkeeper RAM”时,它会出现...但我不确定这个结果会在那里停留多久。
我很想把这个问题写成评论而不是回答,因为这个解决方案不会像你问的那样“擦除”RAM。但是,我相信如果 Peterson 的研究在技术上是正确的,那么这将产生与擦除 RAM 相同的实际效果——甚至可能“更好”的效果。原因是,如果熟练的物理攻击者预计会发生这样的操作——例如,在操作完成之前从设备中拔出电池或按住电源按钮,他们可能会中断系统程序擦除 RAM 的尝试。Peterson 的解决方案更安全,因为它不基于必要的时间窗口,在该时间窗口内允许计算机继续执行指令以完成擦除。相反,内存是不断地受到保护,即使 CPU 本身在您有机会对攻击者做出反应之前就因某种令人难以置信的技术而瞬间死亡。
我说的“令人难以置信的技术壮举”是指像 Stuxnet 这样的技术。
答案3
我可以想象memtest86可以很好地清除 RAM。我一直想尝试下面的方法,但还没有。如果我尝试了,我会更新它。
阅读kexec
手册页。不要尝试kexec
.iso,但您需要解压 iso 并获取可启动二进制文件。在上面的 memtest86 网站上,您可以直接下载二进制文件。
您必须kexec
首先使用命令来加载您要启动的内容。
因此我认为你可以做的是:
kexec -l {path-to-memtest86-bootable-binary} --append=console=ttyS0,115200n8
当你准备扣动扳机时:
kexec -e
我认为(但可能错了)--append=console=ttyS0,115200n8
memtest86 可以通过串行端口工作。因此,如果您有一个串行端口,即使它没有显示在视频输出上,您也可以验证它是否正常工作,这是可能的,因为 memtest86 不执行视频初始化。终止任何正在运行的 X 实例可能是个好主意。
Debiankexec-tools
软件包(Ubuntu 上也提供)将其挂接到关机脚本中,因此如果您进行编辑,/etc/default/kexec
您可以告诉关机过程kexec
作为最后一件事而不是重新启动来调用。也就是说,如果您对干净关机感兴趣的话。
在紧急情况下,async; kexec -e
就可以起作用。
但是,有些芯片组一旦初始化,如果寻址了某些内存区域,就可能导致锁定。我不知道这在实践中会如何发生。
如果不起作用,一个很好的折衷方案kexec
是将 memtest86 安装到您的引导加载程序中,将其设置为默认引导项,并延迟 1 秒直到自动选择(或不延迟并依靠按键来调出 memu)。这可以让您从“全新启动”状态相当快地进入 memtest86,但不是立即进入。
请注意,这不考虑视频 RAM。解决办法是将视频 RAM 设置为块设备,并输出/dev/random
到块设备进行几次迭代。
答案4
问题在于,如果您的计算机正在运行并且屏幕被锁定。此时,AES 密钥存储在 RAM 中,而用户远离计算机。入侵者可以打开计算机机箱并移除 RAM 模块,同时保持其通电,并将它们放在读取其内容的单独设备中。在提取之前无需关闭系统或冻结模块。RAM 不值得信赖,无法保存 AES 密钥,但处理器的缓存可以,就像名为 TRESOR 的解决方案一样。不幸的是,这需要旧的 Linux 内核,以及修补和编译内核的高级知识。