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

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. 从服务中删除 capability (CapabilityBoundingSet=CAP_CHOWN CAP_KILL)。在内核中,特权进程被分解为一系列不同的 capability。大多数服务不需要很多(如果有的话),并且 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 镜像格式 和 Linux 容器技术的应用程序。使用 Docker、runC、OCID、RKT、Systemd-nspawn 等启动这些容器。尽管我经常说“容器不包含任何东西”,但它们确实比不在容器内运行更好。

39. 在 VM 中运行你的容器。虚拟机提供比容器更好的隔离。像在虚拟机上运行容器一样,可以为你提供可扩展性和彼此隔离。

40. 在不同的虚拟机上运行具有不同安全需求的容器化应用程序。在 DMZ 中的虚拟机上运行你的 Web 服务容器,但在 DMZ 之外的虚拟机上运行数据库容器。

41. 还要记住,在不同的物理机器上,在容器内的不同虚拟机上(即深度防御)运行需要最高安全性的虚拟机。

42. 在只读模式下运行你的容器。开发中的容器需要能够写入 /usr,但生产中的容器应该只能写入 tmpfs 和挂载到容器中的卷。

43. 从你的容器中删除 capabilities。我们在容器内外运行的进程具有比它们需要的更多的“capabilties”。你可以通过删除 capabilties 来使你的进程更安全。

44. 不要以 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。我订阅了该 RSS,并密切关注任何适用于我维护或使用的软件包的内容。各种提要的链接在此处:http://www.securityfocus.com/rss

规则 50-52:不要从你的浏览器复制并粘贴到你的终端;
如果 #50,那就不要敢于按回车键。慢慢撤销,然后走开一会儿。
如果 #50 和 #51:第一条(在我看来)是会被解雇类型的犯罪——以 sudo/root 身份执行这两者。

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

很棒的文章,感谢分享!

这里,这里。每当我看到一个项目鼓励其用户通过运行管道连接到 root shell 的 curl 命令来安装他们的软件时,我都会感到震惊。这是不负责任的、放肆的,并且树立了一个不良的先例。

回复 ,作者是 斯蒂芬(未验证)

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

哎呀,现在你的系统对普通的 Linux 高级用户来说已经没法用了。

首先,SELinux 的管理仍然不是给胆小鬼准备的。 什么时候有一个像样的前端来管理它的权限,再告诉我,我会再看看。 在那之前,我会等等。

其次,“企业级内核”? 这到底是什么意思? 只能选择 Red Hat 或 Suse 作为你的发行版吗? 抱歉,我是一个铁杆 Debian 粉丝,愉快地运行着 testing 分支。 :-)

第三,安全响应团队? 还是只有 Red Hat 或 Suse? 同上。

第四,摆脱 Flash。 我承认我很想这样做。 不幸的是,仍然有太多的视频网站需要它,才能删除它。 甚至,我仍然无法通过 Chrome 成功访问 Youtube 视频。 我必须回到 Firefox 和 Flash。 如果 Google 都做不到,你凭什么认为其他人能做好?

第五,systemd。 我喜欢这个概念,但讨厌,极其讨厌它的实现。 简直就是个流产儿。 仅仅因为这个就要打破 POSIX 兼容性吗? 没有文本文件用于配置? 只有一个不可读的二进制块,只能通过一个应用程序读取? 我永远无法理解 Red Hat 为什么就是不明白这一点。 附:Poettering 几乎持续不断地人身攻击他的批评者,并且拒绝承认他个人项目的缺点,这些都没有帮助。

我反对的还有很多,但我想你明白我的意思了。

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

非常有用! 谢谢

Creative Commons License本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
© . All rights reserved.