50 种避免在 2017 年被黑客入侵的方法

Paul Simon 概述了“离开爱人的 50 种方法”,而我们介绍了保护系统的 50 种方法。
830 位读者喜欢这篇文章。
Improve your DevOps security game with Ansible Vault

Opensource.com

当我年轻的时候,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. 我用手机做的一件很酷的事情是设置我的信用卡公司,让他们每次我的信用卡被收费时都给我发短信。这样,如果号码被盗,我会更快地知道。

我不在手机上进行网上银行交易——只在我的 Linux 计算机上进行。

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 为本文做出了贡献。

User profile image.
Daniel Walsh 在计算机安全领域工作了近 30 年。Dan 于 2001 年 8 月加入 Red Hat。

15 条评论

这是一个很棒的建议!而且非常及时。

我儿子的帐户刚刚因可疑活动而被关闭,并且正在设置可用的恢复地址和身份验证方法。

您会认为 #1 下列出的内容应该是管理员已经做的事情。我可以说这并不总是正确的。我见过这种情况会导致重大问题,但外面的公司就是不明白。他们认为“我规模不够大,黑客不会关心我”。这与事实相去甚远。

> 7. 不要安装或使用 Flash。Firefox 不再支持它,希望大多数 Web 服务器都在远离它。

说 Firefox 不再支持 Flash 是不正确的。Firefox 只是阻止了一些跟踪 SWF,Firefox 53 可能会使 Flash 成为点击播放。Web 服务器与 Flash 无关,而是网站。

我赞扬您列出如此详尽的清单,但其详尽性同时也是人们做得如此之少的原因,这似乎太难了。
我不确定它是否在您的清单上,因为它要阅读的内容太多了,但我坚持的一个基本原则是永远不要将任何真正重要的东西(例如我的银行帐户)无线连接。我拒绝使用任何要求我提供信用卡信息的公司的“有帮助的”应用程序。这些是合法的公司,但他们怎么会如此愚蠢/鲁莽?

很棒的清单,感谢您整理出来。我一直在努力使我的世界更安全,因为有一段时间以来我比我应该做的更松懈(孩子、家庭、工作……)。我喜欢您关于加密网站的观点,并且能够非常轻松地为我的个人博客设置 SSL。看起来有很多替代方案都提供简单的一键式 SSL,这与几年前的情况大相径庭!

惊人的清单。谢谢您,特别是对于 SELinux 提示!

我前几天发现很多人不知道 Security Focus 有一个 CVE 文件的 RSS。我订阅了它,并密切关注任何适用于我维护或使用的软件包的内容。各种订阅源的链接在此处:http://www.securityfocus.com/rss

规则 50-52:不要从浏览器复制并粘贴到终端;
如果 #50,那么不要胆敢按回车键。慢慢撤消,走开一会儿。
如果 #50 和 #51:在我看来,头号会被解雇的冒犯行为——都以 sudo/root 身份执行。

免责声明——我指的是“管道下载”eval,没有任何关于 HTTPS、哈希总和、gpg 等的检查或思考。curl -L this.sh | bash;installer 例如 hashbang dot sh 站点对于任何不熟悉它的人来说都是一个很好的例子。我在 GitHub 等网站上看到了很多这些“安装程序”,有些人愿意为了方便而牺牲安全性/常识。但是……这只是一个人对日益增长的趋势的看法。

很棒的文章,感谢分享!

没错,没错。每当我看到一个项目鼓励其用户通过运行管道到 root shell 的 curl 命令来安装他们的软件时,我都会感到震惊。这是不负责任的、自以为是的,并且开创了一个不良的先例。

回复 ,作者:Stephen (未验证)

很棒的综合文章,我可以补充一点,永远不要从管理员用户帐户运行您的日常工作系统,而是设置一个单独的非管理员帐户以用作您的常规工作站。

啊,您现在有了一个普通 Linux 高级用户无法使用的系统。

首先,SELinux 管理仍然不适合胆小的人。请告诉我什么时候有体面的前端来管理它的权限,我会再看一眼。在那之前,我会等待。

其次,“企业级内核”?这甚至是什么意思?只有 Red Hat 或 Suse 作为您的发行版选择?抱歉,我是一个铁杆 Debian 粉丝,很高兴运行测试版。:-)

第三,安全响应团队?再说一遍,只有 Red Hat 或 Suse?见上文。

第四,摆脱 Flash。我同意您,我很想这样做。不幸的是,仍然有太多视频网站需要它才能删除它。哎呀,我仍然无法通过 Chrome 成功访问 Youtube 视频。我必须回到 Firefox 和 Flash。如果 Google 做不到,您怎么认为其他人会做对呢?

第五,systemd。我喜欢这个概念,但讨厌、讨厌、讨厌它的实现。这是一个堕胎。仅仅因为破坏 POSIX 合规性?没有用于配置的文本文件?一个只能通过单个应用程序读取的不可读的二进制块?我永远不会理解为什么 Red Hat 仍然不明白这一点。附言 Poettering 对其批评者的近乎持续的人身攻击以及拒绝承认其宠物项目的缺点无济于事。

我反对的还有更多,但我认为您明白了。

感谢 Daniel 分享如此信息。
我认为如果一个人想保持安全,就应该避免使用任何技术:)) 因为普通用户将无法应用所有这些建议。

非常有用!谢谢

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 许可。
© . All rights reserved.