当我年轻的时候,Paul Simon 发布了他的热门歌曲 离开爱人的 50 种方法。受这首歌的启发,我收集了 50 种系统管理员和普通人可以避免被黑客入侵的方法
“你只需从后门溜走,杰克”
1. 备份您的数据。如果您遭到勒索软件攻击,如果您有备份,则无需付款。
2. 当您不得不在公共场所为手机充电时,使用 syncstop,或者带上自己的备用电池。
3. 利用审计子系统。有很多很酷的工具可以帮助监控您的系统。如果您确实发生了入侵,审计系统很可能能够告诉您发生了什么以及攻击者做了什么。
4. 说到日志,将日志卸载到中央服务器始终是一个好主意,因为如果黑客侵入您的系统,他要攻击的第一件事就是日志系统以掩盖其踪迹。拥有一个良好的入侵系统来监视日志也很有帮助。
“制定新计划,斯坦”
5. 在强制模式下运行 SELinux(请参阅 stopdisablingselinux.com)。没想到我会花这么长时间才讲到这一点?SELinux 可以防止零日漏洞的升级。当 Shell Shock 出现时,SELinux 是唯一的防御手段。
6. 尽可能在 SELinux 沙箱中运行应用程序——它在容器流行之前就是一个容器。还要关注 Flatpack 的开发,它很快应该会开发出沙箱功能。
7. 不要安装或使用 Flash。Firefox 不再支持它,希望大多数 Web 服务器都在远离它。
8. 使用受限的 SELinux 用户来控制用户在您的系统中的操作。如果您运行的是共享登录系统,请将用户设置为 guest_t。
“你无需腼腆,罗伊”
9. 利用 systemd 工具来帮助保护您的服务。大多数系统攻击都将通过在网络上侦听的服务进行。Systemd 提供了很好的方法来锁定服务。例如,使用 PrivateTmp=yes。PrivateTmp 利用挂载命名空间为服务器的 /tmp 设置一个私有的 tmpfs 挂载。这可以防止被黑客入侵的服务访问主机 /tmp 中的内容,并可能根据在 /tmp 上侦听的服务攻击系统的其余部分。
10. InaccessibleDirectories=/home 是一个 systemd 单元标志,它使用挂载命名空间从服务视图中消除 /home(或任何其他目录),这使得被黑客入侵的服务更难以攻击内容。
11. ReadOnlyDirectories=/var 是另一个 systemd 单元标志,它使用挂载命名空间将目录内容转换为只读模式。您可能应该始终以 ReadOnlyMode 运行 /usr。这将防止被黑客入侵的应用程序重写二进制文件,因此下次启动服务时,您就已经被黑客入侵了。
12. 从服务中删除 capabilities (CapabilityBoundingSet=CAP_CHOWN CAP_KILL)。在内核中,特权进程被分解为一系列不同的 capabilities。大多数服务不需要很多(如果有的话),systemd 提供了一个简单的开关来从服务中删除它们。
13. 如果您的服务不打算使用网络,那么您可以使用 PrivateNetwork=yes 为该服务关闭网络。只需在服务单元文件中打开此项,即可利用网络命名空间并关闭该服务可用的所有网络。通常,黑客实际上并不想侵入您的机器——他只是想将其用作攻击服务器来攻击其他机器。如果服务看不到网络,它就无法攻击它。
14. 控制您的服务可用的设备。Systemd 提供了 DeviceAllow 指令,用于控制服务可用的设备。DeviceAllow=/dev/null rw 将限制对 /dev/null 以及仅此设备节点的访问,从而禁止访问任何其他设备节点。该功能是在设备的 cgroup 控制器之上实现的。
15. 即将推出的 systemd 系统中的一项新功能是 ProtectSystem Strict,它可以打开所有这些命名空间,以完全锁定服务运行的环境。
“让自己自由”
16. 不要使用没有 SELinux (SEAndroid) 且处于强制模式的手机。幸运的是,我听说现在超过 90% 的 Android 手机都在强制模式下运行 SEAndroid。这让我很高兴。现在,如果我们能让那些 Apple 员工也使用 SELinux 就好了。
17. 仅从受信任的来源安装软件。不要安装您在互联网上找到的可疑的东西。这适用于您的手机、计算机系统、虚拟机、容器等等。
18. 我不在手机上进行网上银行交易——只在我的 Linux 计算机上进行。如果黑客偷了我的信用卡,我损失 50 美元;如果他进入我的银行帐户,我损失的就更多了。我想我老了。(别打扰我的草坪。)
19. 我用手机做的一件很酷的事情是设置我的信用卡公司,让他们每次我的信用卡被收费时都给我发短信。这样,如果号码被盗,我会更快地知道。
20. 当您需要安全地通信时,请使用 Signal 安全消息应用程序。
“跳上巴士,格斯”
21. 在您的系统上运行 Linux。当我第一次为我父亲安装计算机系统时,我刚到家,他的系统就被病毒感染了。我返回并在他的系统上安装了 Linux,从那以后他一直都在运行它。我相信 Linux 通常是一个更安全的系统,因为它在设计方式上就是如此,但我也相信桌面不太可能被黑客入侵,因为用户群较小。有些人会争辩说,Windows 多年来已经有了很大的改进,但对我来说,我仍然坚持我所知道的。
22. 仅运行具有 安全响应团队 监控发行版安全性的发行版。企业软件非常重要。
23. 运行企业级内核。在容器中,单点故障是内核。如果您想保持其安全,请使用企业级内核,这意味着它具有最新的安全修复程序,但不是最前沿的。请记住,最新的内核带有最新的安全修复程序,但它也带有大量可能存在漏洞的新代码。
“你无需多讨论”
24. 大多数黑客攻击都是社会工程——例如,电子邮件链接、Web 浏览器攻击和电话。这里最好的选择是接受教育并保持怀疑态度。没有人会从尼日利亚给您钱。美国国税局不会打电话到您家要求付款。如果您从您的银行收到电子邮件中的网站链接,请不要使用该链接。直接在 Web 浏览器上键入地址。
25. 始终保持您的系统完全更新,并安装最新的安全补丁。过时且具有已知安全漏洞的系统数量令人担忧。脚本小子依赖于您不更新您的系统。
26. 连接到网络上的服务时,始终使用 HTTPS。Chrome 和 Firefox 现在具有强制执行此操作的模式。如果一个网站到 2016 年还不支持安全通信,那么它可能不值得您访问。
27. 在您的容器中使用 seccomp。这限制了内核上的攻击面,内核是单点故障。限制进程可以讨论的内容。
“只需放下钥匙,李”
28. 使用 YubiKey 存储私钥。
29. 加密您系统上的数据。至少对于笔记本电脑,保持您的 homedir 和其他数据目录加密。几年前我在伦敦乘坐地铁,我的笔记本电脑被“偷了”——火车车厢的门关上了,我注意到我的笔记本电脑不见了,火车正在驶出车站。幸运的是,磁盘已加密。
30. 为您的所有网站使用 Let's Encrypt。现在没有理由不运行 HTTPS 了。
31. 永远不要在不同的 Web 服务器上使用相同的密码。这一个很难不落入陷阱。像 Let's Encrypt 这样的工具有很大帮助。如果您使用 ssh 密钥登录系统,那就更好了。
32. 使用双因素身份验证 (2FA)。密码几乎变得毫无用处。使用 YubiKey 等工具使双因素身份验证变得容易。我们都有手机。在您的大脑中有一个秘密,并在手机上生成一个秘密总是比密码更好。
33. 最让我恼火的是网站总是要求我设置一个帐户——难道我们不能做得更好吗?始终为您的网站密码使用密码生成工具。我是老派:我使用 Password Safe 并剪切并粘贴到 Web 浏览器中。我听说其他人使用 LastPass 和其他集成您的手机和 Web 服务的工具效果很好。
34. 设置像 FreeIPA 这样的服务用于身份服务。使用 Kerberos 等工具进行身份验证和授权使跟踪员工及其对系统的访问权限变得更加容易(并且它具有很酷的加密服务)。使用 Active Directory 还可以,但我有点偏见。
35. 当您必须使用经常需要键入的密码时,请使用容易记住的句子而不是单词。我记住密码的首选方法是使用一个由几个单词组成的短语,该短语易于键入。
“让自己自由”
36. 使用 USBGuard 保护您的系统免受恶意 USB 设备的侵害。
37. 在过去的几年里,我一直在研究容器,所以现在让我们深入研究容器的安全性。首先在强制模式下打开 SELinux 的系统上运行它们。如果您的系统不支持 SELinux,请将发行版切换到支持 SELinux 的发行版。SELinux 是防止使用文件系统突破容器的最佳工具。
38. 尽可能在容器内运行您的服务。我相信这是未来——使用 OCI Image Format 和 Linux 容器技术的应用程序。使用 Docker、runC、OCID、RKT、Systemd-nspawn 等启动这些容器。虽然我经常说“容器不包含”,但它们确实比不在容器内运行更好。
39. 在 VM 中运行您的容器。虚拟机比容器提供更好的隔离。在虚拟机上运行类似容器的内容为您提供可伸缩性和彼此隔离。
40. 在不同的虚拟机上运行具有不同安全需求的容器化应用程序。在 DMZ 中的虚拟机上运行您的 Web 服务容器,但在 DMZ 之外的虚拟机上运行数据库容器。
41. 还要记住在不同的物理机器上运行需要最高安全性的虚拟机,在容器内的不同虚拟机上运行(又名深度防御)。
42. 在 只读模式下运行您的容器。 开发中的容器需要能够写入 /usr,但生产中的容器应该只能写入 tmpfs 和挂载到容器中的卷。
43. 从您的容器中删除 capabilities。我们在容器内外运行的进程具有比它们需要的更多的“capabilities”。您可以通过删除 capabilities 来使您的进程更安全。
44. 不要以 root 身份在容器中运行您的进程。大多数服务永远不需要 root 权限,或者它们需要 root 权限才能绑定到端口 < 1024,然后切换到非 root 用户。我建议始终以非 root 用户身份运行应用程序。
45. 使您的容器保持更新,并安装最新的 CVE 修复程序。使用像 OpenShift 这样的系统来构建和维护您的容器镜像是一个好主意,因为它会在出现新的安全修复程序时自动重建容器镜像。
46. 我的一位同事说:“Docker 完全是在您的主机上以 root 身份运行来自 Internet 的随机代码。” 从受信任的来源获取您的软件。不要抓取您在 docker.io 上找到的第一个 Apache 应用程序。操作系统很重要。
47. 在有限的容器化优化主机上运行您的生产容器,例如 Atomic Host,它随附所有开启的安全性,针对运行容器进行了优化,具有有限的攻击面和原子更新。有什么不喜欢的呢?
48. 使用像 OpenScap 这样的工具来扫描您的系统是否存在漏洞。可悲的是,新的漏洞总是不断涌现,因此您必须保持扫描仪的更新。(也请查看 atomic scan 以扫描您的容器。)
49. OpenScap 还具有扫描 安全配置的功能,例如 STIG(安全技术实施指南)。
50. 为您的孩子收到的所有圣诞节 IoT 设备设置一个特殊的访客网络。我喜欢我的 Amazon Echo 和自动化灯光和电源开关(“Alexa,打开圣诞灯”),但这些设备中的每一个都是一个具有可疑安全性的 Linux 操作系统。
“一定还有 50 多种方法可以避免被黑客入侵”
您会在此列表中添加什么?请在评论中告诉我们。
Josh Bressers 为本文做出了贡献。
15 条评论