当我年轻的时候,保罗·西蒙发布了他的热门歌曲 离开爱人的 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。这让我很高兴。现在,如果我们能让那些苹果家伙使用 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 镜像格式 和 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)上在生产环境中运行您的容器,Atomic Host 附带了所有已开启的安全性,针对运行容器进行了优化,具有有限的攻击面和原子更新。有什么不喜欢的呢?
48. 使用像 OpenScap 这样的工具扫描您的系统是否存在漏洞。可悲的是,新的漏洞总是不断涌现,因此您必须使您的扫描程序保持最新。(也请查看 atomic scan 以扫描您的容器。)
49. OpenScap 还具有扫描 安全配置 的功能,例如 STIG(安全技术实施指南)。
50. 为您的孩子收到的所有圣诞节 IoT 设备设置一个特殊的访客网络。我喜欢我的 Amazon Echo 和自动化灯光和电源开关(“Alexa,打开圣诞彩灯”),但这些设备中的每一个都是一个具有可疑安全性的 Linux 操作系统。
“肯定还有 50 多种避免被黑客入侵的方法”
您会在此列表中添加什么?请在评论中告知我们。
Josh Bressers 为本文做出了贡献。
15 条评论