如何保护我的笔记本电脑,以防止通过物理接触进行黑客攻击?

我之前搞砸了我的系统,当我启动Ubuntu时,遇到了一个黑屏。当我启动我的笔记本电脑时,我从grub菜单中选择了恢复选项,并选择了回退到根终端。我发现我能够使用添加用户命令,通过它,我可能可以在我的机器上创建一个特权用户。
这不是一个安全问题吗?
有人可能偷走我的笔记本电脑,在启动时选择恢复并添加另一个用户,那我就完蛋了。包括我的数据。
想一想,即使你以某种方式删除了那个条目,有人仍然可以从活动光盘启动,运行chroot,然后添加另一个用户,具有足够的权限来查看我的所有数据。
如果我将BIOS设置为只启动我的硬盘,不启动USB、CD/DVD和网络,还设置了BIOS密码,也没有用,因为你仍然有那个grub恢复启动条目。
我相当确定来自中国、俄罗斯的人无法通过网络入侵我的Ubuntu Trusty Tahr,因为它就是这么安全。但是,如果有人能够物理接触到我的 - 你的 - 机器,那么,这就是我提出这个问题的原因。我该如何保护我的机器,以防止通过物理接触进行黑客攻击呢?
错误报告:

36全盘加密和闪亮指甲油来装饰你的螺丝钉。现在谁不这样做呢? - mondjunge
2@ByteCommander 你可以添加超级用户。只需在/etc/password中添加另一个UID为0的用户即可。我刚刚添加了fred fred:x:0:0:fred,,,:/home/fred:/bin/bash,现在如果我以fred的身份登录并运行whoami,我会得到root - Josef
@Josef O.O 真的吗?我以为 UID 应该是唯一的... - Byte Commander
@ByteCommander:一个塑料锯和电钻可能可以打开机箱,但无法获取我的加密数据。如果你擅自动我的闪亮指甲油,我会取出硬盘并丢掉我的笔记本电脑 ;) - mondjunge
3@ByteCommander 他们应该是这样的。像adduser等管理账户的工具通常不允许你这样做,但只需编辑/etc/passwd即可。作为一个黑客,意味着忽视你应该做的事情 ;) - Josef
3@blade19899 你的新bug肯定会被拒绝。请对比一下这个已存在的bug:https://bugs.launchpad.net/ubuntu/+bug/283662 - Byte Commander
1@ByteCommander,我添加了原始的错误报告,而不是重复的那一个。 - blade19899
你应该问问自己,这是不是你真的需要担心的事情,或者你是否可以通过物理保护你的笔记本电脑来更好地降低风险(例如不随身携带,不让它无人看管)。没有什么东西能够绝对安全又可用,你不想因为一些牵强的黑客场景而使下一次恢复变得不可能。 - Relaxed
1@Relaxed 我现在的生活阶段不像以前那样经常带着笔记本电脑旅行,但是家里也可能被盗。所以,我希望我的数据是无法触及的。 - blade19899
4@blade19899 我的更广泛的观点是,你需要从风险和权衡的角度来思考,而不是绝对的观念。我不知道你是谁,也不知道你住在哪里,但是一次房屋被盗导致有人有效地使用你的数据(而不仅仅是试图卸载硬件)听起来有些牵强,并且可能比由于缺乏有效的恢复选项而导致的时间、金钱甚至数据损失更少成为一个问题。这就是为什么拥有备用的根终端是一件好事。但显然这并不意味着你不应该考虑全盘加密。 - Relaxed
2@Relaxed:对于大多数情况来说,省略单用户模式启动选项是没有意义的。有人总是可以偷走你的笔记本电脑,取出硬盘,并使用任何工具访问它。如果你想防止那些能够接触到本地键盘/显示器但无法偷走硬盘的人,那么请设置BIOS禁止从除了硬盘以外的任何设备启动,并配置GRUB不包含恢复选项。恢复引导选项是默认安装中有用的一部分。 - Peter Cordes
一起发生的入室抢劫导致有人有效地使用您的数据(而不仅仅是试图转移硬件),听起来有点牵强,可能不太值得担心,直到他们将硬件转移到决定尝试使用您的数据的人手中... 加密是值得考虑的,也没有你所说的那么困难。全盘加密并不是唯一的方法,像ecryptfs这样的文件级堆叠驱动程序也存在。它是为Ubuntu编写的! - underscore_d
@underscore_d 我认为你完全误解了我的观点。我并没有说加密很困难,或者不值得考虑。事实上,我明确写道:“但显然这并不意味着你不应该研究全盘加密。” - Relaxed
@mondjunge,所以我只需要在你背后用钥匙刮掉指甲油就能让你为了买新笔记本电脑而感到不方便?太好了!:)(故事的寓意是:永远存在着风险和方便之间的权衡。) - Wildcard
@Wildcard 正确。整个人生都是一种权衡。 - mondjunge
7个回答

我的猜测是,只有使用强大的算法和最重要的是良好的密码进行全盘加密,才能确保您本地存储的数据安全。这样做可能会给您提供99.99%的安全性。请参考其中一份关于如何进行此操作的指南。
除此之外,对于一个有经验的黑客来说,即使你的机器被物理接触到,也是不可能保护好的。
  • 用户/账户密码:
    如果按照你所描述的方式进入恢复模式,创建一个新的管理员用户是很容易的,因为这样你可以获得一个root shell而不需要输入密码。
    这可能看起来像是一个意外的安全问题,但实际上是为了(谁能想到呢?)恢复情况而设计的,比如你忘记了管理员密码或者搞乱了sudo命令或其他重要的东西。

  • root密码:
    Ubuntu默认没有设置任何root用户密码。然而,如果你进入恢复模式,系统会要求你设置一个root密码。这似乎很安全,但并不是绝对安全的解决方案。你仍然可以通过在启动Ubuntu之前通过GRUB添加内核参数single init=/bin/bash来启动单用户模式,这实际上也是一个无需密码的root shell。

  • 使用密码保护GRUB菜单:
    你可以通过身份验证来保护你的GRUB菜单条目,只有在输入密码后才能访问,也就是说,你可以禁止在没有密码的情况下启动恢复模式。这也可以防止修改内核参数。更多信息,请参见help.ubuntu.com上的Grub2/Passwords网页。只有在从外部介质启动或直接连接硬盘到另一台机器时,才能绕过这个设置。

  • 禁止从外部介质启动:
    在许多当前的BIOS/UEFI版本中,你可以设置启动顺序并通常排除设备的启动。然而,这些设置并不安全,因为任何人都可以进入设置菜单。你必须在这里设置一个密码,但是...

  • BIOS密码:
    通常也可以绕过BIOS密码。有几种方法:

    • 通过打开计算机箱并物理上移除CMOS电池或临时设置"Clear CMOS"跳线来重置CMOS存储器(存储BIOS设置)。
    • 使用服务键组合重置BIOS设置。大多数主板制造商在其服务手册中描述了键组合,以将混乱的BIOS设置重置为默认值,包括密码。例如,在打开电源时按住ScreenUp键,我记得这样做可以解锁一块装有AMI BIOS的宏碁主板,当时我搞乱了超频设置。
    • 最后,还有一组默认的BIOS密码,似乎总是有效的,与实际设置的密码无关。我没有测试过,但这个网站提供了一个按制造商分类的密码列表。
      感谢Rinzwind提供这些信息和链接!
  • 锁定计算机箱/阻止物理访问主板和硬盘:
    即使其他方法都失败了,数据窃贼仍然可以打开你的笔记本电脑/计算机,取出硬盘并将其连接到自己的计算机上。从那里挂载它并访问所有未加密的文件就像吃蛋糕一样简单。你必须将它放在一个安全锁定的箱子里,确保没有人能够打开计算机。然而,对于笔记本电脑来说是不可能的,对


    总结一下:目前没有什么能真正保护你的笔记本电脑免受有恶意意图的人物物理接触的使用。只有当你足够偏执以至于愿意冒着忘记密码或系统崩溃而失去所有数据的风险时,你才能完全加密所有数据。因此,加密使备份比它们已经重要的地方更加重要。然而,备份也应该进行加密,并放在一个非常安全的地方。
    或者,你可以选择不将你的笔记本电脑交给别人,并希望你永远不会丢失它。;-)

    如果你对数据不太关心,但更关心硬件的话,你可能想购买并安装一个GPS发射器到你的电脑中,但这只适用于真正偏执的人或联邦特工。


7而且即使使用了全盘加密,如果你的笔记本电脑在开机状态下被盗,也无法防止冷启动攻击。 - kos
@kos 可能是真的。我曾经听说过这个,但没有详细研究过。我会把这个加到我的回答里。 - Byte Commander
14此外,如果您的笔记本电脑在任何时间段内不在您的控制之下,就不能再期望它是安全的了。例如,它现在可能会记录您的预启动密码。 - Josef
1加密您的数据不应增加丢失的风险,因为您确实有备份,对吧?仅存储一次的数据并不比不存在的数据好多少。特别是固态硬盘往往会突然故障,无法将其中的任何内容取出。 - Josef
3这是一个旧视频,但很好地解释了概念:https://www.youtube.com/watch?v=JDaicPIgn9U;如果您设置了BIOS密码,攻击者仍然可以在笔记本电脑仍然开启的情况下移除CMOS电池,以便启动定制的驱动器而不会丢失任何关键的时间;由于现在使用SSD,这变得更加可怕,因为一个定制的SSD可能能够在不到1分钟内转储甚至8GB的数据,考虑到写入速度约为150MB/s。 - kos
@Josef 好的,但是普通用户通常多久备份一次?一月一次或更少。当然,你也可以每天备份一次。这只需要纪律。但是备份也可能失败,如果你忘记了加密备份的密码,那就糟糕了。未加密的备份也容易被盗取。 - Byte Commander
2@ByteCommander但是你的固态硬盘也可能会出现故障,导致所有数据丢失。当然,如果你经常忘记密码(好吧,把它写下来放在保险箱里),加密可能会增加丢失所有数据的可能性,但并不意味着你的数据非常安全,除非你敢于对其进行加密。忘记密码或崩溃并不会“冒着一切风险”,而是因为没有备份。 - Josef
1@Josef 当然。我上一条评论表达得不够清楚。我只是想在我的回答中说,加密会导致更多可能的错误和数据丢失原因。这并不意味着未加密的数据不会丢失,我完全同意你的观点,备份是必要的。 - Byte Commander
@kos 哇,我对这个视频印象深刻。我知道这种攻击的存在,但不知道用合适的软件竟然如此容易。如果你不介意的话,我会再次编辑我的回答,并包含你最新的评论。 - Byte Commander
不,一点也不。:) 冷却棒测试给我留下了深刻的印象,起初我并没有想到剩磁能够保持那么长时间。另外,明确指出一下,这个问题也适用于Ubuntu安装:http://askubuntu.com/questions/348196/how-do-i-enable-ubuntu-using-full-disk-encryption-to-call-lukssupend-before-sl - kos
为了防止冷启动攻击,您需要设置BIOS密码。启用它是有很多道理的,只要明白它的作用以及不足之处即可。 - Naftuli Kay
除非你保护好你的笔记本电脑,否则它会泄露辐射。国家安全局不需要物理接触,他们可以远程监控你的笔记本电脑,同时解密硬盘以揭示密码。如果黑手党想要获取你的数据,他们只需通过暴力手段逼迫你解密硬盘。 - emory
@Josef所提到的攻击被称为“邪恶女仆”攻击。 - Mark E. Haase
@NaftuliTzviKay 我不认为BIOS密码能提供保护。正如kos在他的评论中所说,并且可以在视频中看到,甚至可以通过冷却内存、取出并放入另一台机器而不会丢失数据。或者攻击者可以在机器仍在运行时取出CMOS电池来绕过密码,或者甚至只需重新启动并尝试使用主密码。BIOS密码将增加另一个保护层,但并非无法破解。然而,任务越难,攻击者在达到目标之前可能会更有可能放弃。 - Byte Commander
一个更简单的攻击方式是不偷走你的笔记本电脑,而是改变一些东西然后放回原处,而你却毫不知情。他们会在你下次登录时从互联网上获取密码。 - user23013
硬盘密码怎么办?如果没有密码,你甚至无法启动或访问硬盘!虽然还有一些通用密码,但要找到它们要困难得多,如果它们存在的话。 - solsTiCe
@solsTiCe 我猜你说的HDD密码是指全盘加密?这在我的回答中已经涵盖了。如果你的笔记本电脑关机时丢失,它是安全的,但是密码可能会从正在运行的笔记本电脑的内存中被窃取。 - Byte Commander
我指的是ATA密码。不,我不是指全盘加密。你可以在BIOS中设置它,但这不是BIOS密码。http://www.admin-magazine.com/Archive/2014/19/Using-the-ATA-security-features-of-modern-hard-disks-and-SSDs - solsTiCe
@solsTiCe 啊,我现在已经读了你的文章。坦白说,我还没有使用 ATA 安全功能,所以不能告诉你太多关于它们的信息。就安全性而言,我相信它们与全盘加密相比具有可比性,关于读取访问方面是如此,但由于写入访问也可以被拒绝,它可能也能保护你的数据免受简单地被覆盖。此外,由于加密是在磁盘控制器级别上进行的,密码可能从未存储在 RAM 中,因此不能从正在运行的系统中检索出来。 - Byte Commander

最安全的笔记本电脑是没有任何数据的。您可以建立自己的私人云环境,然后不在本地存储任何重要的东西。
或者取出硬盘并用热熔剂熔化它。虽然从技术上回答了问题,但这可能不是最实际的方法,因为您将无法再使用笔记本电脑。但那些永远模糊不清的黑客也无法使用。
除非以上选项,还可以对硬盘进行双重加密,并要求插入USB闪存驱动器进行解密。USB闪存驱动器包含一组解密密钥,而BIOS则包含另一组 - 当然需要密码保护。如果在启动/从暂停恢复期间未插入USB闪存驱动器,则自动进行数据自毁程序。随身携带USB闪存驱动器。这种组合也恰好解决了XKCD #538的问题。

XKCD #538


8一旦您的USB闪存驱动器的接触点积累了一些灰尘,自动自毁程序肯定会给您一个愉快的惊喜。 - Dmitry Grigoryev

加密您的磁盘。这样,如果您的笔记本电脑被盗,您的系统和数据将会安全。否则:
- BIOS密码无济于事:小偷可以轻易地从您的计算机中取出磁盘,并将其放在另一台电脑上启动。 - 您的用户/根密码也无济于事:小偷可以按照上述方法轻松挂载磁盘并访问您的所有数据。
我建议您设置一个LUKS分区,并在其中设置一个LVM。您可以将引导分区保持未加密,这样您只需要输入密码一次。这意味着如果被篡改(被盗并在您毫不察觉的情况下归还给您),您的系统可能更容易受到威胁,但这种情况非常罕见,除非您认为自己正受到NSA、政府或某种黑帮的跟踪,否则您不必担心这个问题。
您的Ubuntu安装程序应该提供LUKS+LVM的安装选项,非常简单和自动化。我不会在这里重新发布详细信息,因为互联网上已经有很多相关文档可供参考。 :-)

如果可能的话,你能提供一个更详细的答案吗?从我的问题可以看出来,我对安全并不是很了解。 - blade19899
点赞了这些要点,但请注意全盘加密并非唯一方式,而且如果你将敏感文件限定在/home/yourName目录下(正如你应该做的那样!),则并不必要。你可以选择使用文件级加密驱动器(比如我在原文中提到的一个,我不会再次打扰),这是个非常可行的替代方案。我不担心别人看到/usr等地方的所有无趣内容。 - underscore_d
1@underscore_d:我确实担心/home之外的其他东西(包括其他分区中的个人和专业数据),所以对我来说加密一切更容易,但我猜每个用户都有自己的需求:-)。然而,从性能角度来看,使用ecryptfs并不是最佳选择。你可以在这里找到一些基准测试结果:链接。请确保阅读文章的第2-5页以获取实际结果(第1页只是一个介绍)。 - Peque
非常正确,感谢链接/基准。目前我还没有遇到任何性能障碍,但也许以后会有。另外,我意识到我可能需要开始考虑加密像/var/log/var/www(源代码)和/tmp这样的东西,所以全盘加密可能会变得更合理! - underscore_d
@underscore_d:是的,然后你开始考虑/etc和其他顶级目录... 最后,全盘加密是一个简单而快速的解决方案,让你每晚都能像婴儿一样安心入睡。^^ - Peque

有几个值得注意的硬件解决方案。
首先,一些笔记本电脑,比如联想的一些商务笔记本电脑,配备了一个防篡改开关,可以检测到机箱是否被打开。在联想电脑上,需要在BIOS中激活此功能,并设置管理员密码。如果检测到篡改,笔记本电脑将会立即关闭,在启动时显示警告,并要求输入管理员密码和正确的交流适配器才能继续使用。一些防篡改探测器还会触发可听见的警报,并可配置发送电子邮件。
防篡改并不能真正阻止篡改(但它可能使从RAM中窃取数据变得更困难 - 如果检测到某些非法操作,例如试图移除CMOS电池,防篡改可能会“砖化”设备)。其主要优势在于,如果你已经建立了强大的软件安全措施,如全盘加密,那么他人就无法秘密篡改硬件而不被察觉 - 这绝对是剩下的攻击手段之一。
另一种物理安全措施是将某些笔记本电脑锁定在底座上。如果底座牢固地安装在桌子上(通过位于笔记本下方的螺丝),并且在不使用时将笔记本锁定在底座上,那么就提供了额外的物理保护层。当然,这不能阻止一个决心强烈的小偷,但它确实增加了从您的家庭或企业中盗取笔记本电脑的难度,而且在锁定状态下仍然可以完美地使用(您可以将外设、以太网等连接到底座上)。
当然,这些物理特性对于没有这些功能的笔记本电脑来说是无用的。但如果您注重安全,购买笔记本电脑时考虑这些特性可能是值得的。

此外,除了加密您的磁盘(这是无法绕过的): - SELinux和TRESOR。两者都加固了Linux内核,并试图使攻击者难以从内存中读取信息。
顺便说一下: 我们现在进入了不仅仅是担心那些想要获取您的借记卡信息的坏人(他们并不会这样做),而且经常涉及到情报机构的领域。 在这种情况下,您需要做更多的事情:
  • 尝试清除PC上的所有闭源软件(包括固件)。这包括UEFI/BIOS!
  • 使用tianocore/coreboot作为新的UEFI/BIOS。
  • 使用自己的密钥进行SecureBoot。
还有很多其他事情可以做,但这些应该足够让他们忙碌一段时间。
别忘了: xkcd ;-)

这些建议没什么帮助。无论是SELinux还是TRESOR,在有人物理接触的情况下都无法阻止对方入侵。它们并不是为了应对这种威胁模式而设计的。使用它们只会产生虚假的安全感。顺便说一句,清除闭源代码与提供针对有人物理接触的安全性毫无关系。 - D.W.
1@D.W. "TRESOR(递归缩写,代表“TRESOR Runs Encryption Securely Outside RAM”)是一个Linux内核补丁,提供基于CPU的加密以防止冷启动攻击" - 因此,在这种情况下,TRESOR绝对有所帮助。但这只是一个附带的观点。我写了“另外”,因为如果您不加密磁盘(在物理访问场景中),这些东西实际上并不起任何作用。然而,当你提高物理安全性时,你不应该忘记攻击者仍然可以启动并进行数字攻击,例如利用漏洞。 - ljrk
@D.W. 如果你的个人电脑虽然加密得很好,但容易受到特权升级攻击,那就挺糟糕的。这就是为什么如果要从物理层面保护系统安全,还应该在软件方面进行一些加固措施。 我明确表示他们已经对Linux内核进行了加固,并且还应该做额外的工作。对于闭源软件也是同样的情况。你的硬盘可能加密得很好,但如果UEFI中存在后门键盘记录器,那么对抗情报机构也无济于事。 - ljrk
如果您使用全盘加密并且不让您的计算机无人看管运行,那么特权升级攻击就无关紧要了,因为攻击者不会知道解密密码。(正确使用全盘加密需要在无人看管时关闭/休眠计算机。)如果您使用全盘加密并且确实让您的计算机无人看管,那么任何一种方法都可以绕过全盘加密,例如连接USB设备等,即使您使用TRESOR、SELinux等技术也是如此。再次强调,这些技术并非针对此威胁模型设计的。这个答案似乎没有反映出仔细的安全分析。 - D.W.
@D.W. 他们可以尝试确保漏洞无法接管系统。仅此而已,但这是一件非常好的事情。再说一遍:如果你的个人电脑在遭受物理攻击时没有任何防护措施,那就不好了,因为攻击者可能只需操纵你正在浏览的某个网站,甚至通过多种漏洞获取 root 权限。当然,如果你的个人电脑始终处于关闭状态或未连接到互联网,这些工具并不能起到太大作用,但它们足够了。而且,在物理访问场景中,冷启动攻击仍然存在风险。 - ljrk
1用模棱两可的“努力”一词,任何事情都可以合格——rot13加密可以试图确保攻击无法接管系统。这并不会成功,但我可以形容它在尝试中。我的观点是,你所特别指出的防御措施对于阻止这类攻击并不有效。SELinux/TRESOR无法阻止冷启动。要分析安全性,你必须从威胁模型开始,并分析针对该特定威胁模型的防御措施。安全性不是将听起来不错的无数额外限制一一添加的过程,其中还包含着一些科学内容。 - D.W.
@D.W. TRESOR确实会防止冷启动攻击。当然,你可以创建一个威胁模型,并以更专业的方式进行防护。但在那种情况下,我们需要了解他的硬件情况、具体环境以及哪些攻击会被认为合格等等。我们没有这些信息。相反,我试图给出一些有帮助的回答。提问者显然对安全性不是特别关注。因此,我想提醒大家不要忽视软件方面,因为很不可能他只在离线状态下使用笔记本电脑。再次强调:我开始时用的是“此外”。这并不是作为其他答案的替代,而是额外的安全措施。 - ljrk

因为您稍微改变了问题,这是我对修改部分的回答:
如何保护我的设备,以防止通过物理访问进行入侵?
答案:你不能 有很多先进的硬件和软件系统,如防篡改检测、加密等,但归根结底都是这样的:
你可以保护你的数据,但一旦有人接触到你的硬件,就无法保护你的硬件。如果在别人接触后继续使用任何硬件,那会危及你的数据! 使用具有防篡改检测功能的安全笔记本电脑,当有人试图打开它时会清除内存,使用全盘加密,在不同位置加密存储备份数据。然后尽量防止他人物理接触你的硬件。但如果你认为有人接触过你的硬件,清除数据并丢弃它。
下一个问题你应该提出是:如何获取未被篡改的新硬件。

使用ATA密码保护您的硬盘/固态硬盘
这将防止在没有密码的情况下使用该磁盘。这意味着您无法在没有密码的情况下启动,因为您无法访问MBR或ESP。如果磁盘在另一台机器中使用,仍然需要密码。
因此,您可以为您的硬盘/固态硬盘使用所谓的用户ATA密码。通常在BIOS中设置(但这不是BIOS密码)。
为了增加安全性,您还可以在磁盘上设置主ATA密码,以禁用制造商密码的使用。
您也可以使用hdparm在命令行界面上执行此操作。
请格外小心,因为如果丢失密码,可能会丢失所有数据。

http://www.admin-magazine.com/Archive/2014/19/Using-the-ATA-security-features-of-modern-hard-disks-and-SSDs

注意:这里也存在一些弱点,因为有软件声称可以恢复ATA密码,甚至声称可以移除它。所以它也不是100%安全的。
注意:ATA密码并不一定与FED(全盘加密)一起使用。