当我年轻的时候,保罗·西蒙发布了他的热门歌曲 离开爱人的 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. 从服务中删除功能 (CapabilityBoundingSet=CAP_CHOWN CAP_KILL)。在内核中,特权进程被分解为一系列不同的功能。大多数服务不需要很多(如果有的话),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 镜像格式 和 Linux 容器技术。使用 Docker、runC、OCID、RKT、Systemd-nspawn 等启动这些容器。虽然我经常说“容器不包含”,但它们确实比不在容器内运行更好。
39. 在 VM 中运行您的容器。虚拟机提供比容器更好的隔离。像在虚拟机上运行容器一样运行容器为您提供可扩展性和彼此隔离。
40. 在不同的虚拟机上运行具有不同安全需求的容器化应用程序。在 DMZ 中的虚拟机上运行您的 Web 服务容器,但在 DMZ 之外的虚拟机上运行数据库容器。
41. 还要记住在不同的物理机器上运行最需要安全性的虚拟机,在容器内的不同虚拟机上运行(又名,深度防御)。
42. 在 只读模式下运行您的容器。 开发中的容器需要能够写入 /usr,但生产中的容器应该只能写入 tmpfs 和挂载到容器中的卷。
43. 从您的容器中删除功能。我们在容器内外运行进程时,使用的“功能”比它们需要的要多得多。您可以通过删除功能来使您的进程更安全。
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 条评论