# 对 Jail 进行安全扫描

* 原文链接：[Security Scanning a Jail](https://freebsdfoundation.org/wp-content/uploads/2021/07/Security-Scanning-a-Jail.pdf)
* 作者：**BENEDICT REUSCHLING**

***

本专栏介绍了 FreeBSD 中有用、独特或值得了解的 Ports 和软件包。Ports 扩展了基本操作系统的功能，确保你能完成某些任务，或者简单地带来一丝微笑。跟随我们一起探索，也许你会发现一些新鲜的东西。

***

在本期中，我稍微偏离了介绍多个 Ports 的形式，专注于一个 Port：security/lynis。

Lynis 是一款用于安全审计、加固和合规性测试的工具。Lynis 与其他安全扫描工具不同的是，它尝试检测系统上可用的组件，如 Web 服务器或数据库。若找到这些组件，它会进一步检查它们的漏洞、缺失的补丁等。因此，扫描的内容会根据配置的软件和用途在每个系统上有所不同。例如，你的防火墙主机可能会接受与备份服务器不同的检查。插件扩展了 lynis 的功能，以覆盖特定的软件。扫描结束时会生成一份全面的安全报告，可能会得到你注重安全的上司的表扬，或者是你下一次安全敏感度培训的通知。

作为开源软件以及商业企业工具，它扫描各种操作系统中的安全异常。系统管理员、渗透测试人员、开发者和审计员都可以使用它来评估是否存在漏洞，不仅是已安装的软件，还有它们的配置。由于这包括操作系统以及第三方软件，因此在 FreeBSD jail 中运行它应该是一次有趣的实验。

为此，我从一个刚更新的 FreeBSD 13.0 主机创建了一个 iocage jail。请注意，你可以使用任何其他 jail 管理框架或手动构建一个 jail 来重复这个实验。进入控制台后，我运行了 `pkg install lynis`，没有安装其他任何东西（甚至没有我喜欢的 shell），只是一个纯净的 jail。这样，我们可以看到 lynis 在默认安装中检测到的内容。如果在安装任何要 jail 的软件之前就出现了某些问题，这就是所有 FreeBSD 13.0 安装（可能包括之前的版本）关心的事情——无论是在 jail 内部还是外部。

在运行扫描之前，我使用“lynis show settings”查看了当前设置。不要担心许可证密钥一行，开源版本的软件没有任何限制，运行起来没有问题。接下来，我通过执行“lynis audit system”开始扫描。

经过一些初始化后，我正确检测到的操作系统版本和硬件平台（amd64）被显示在屏幕上。这个并不意外，但后面有些地方就有趣了。“Boot and Services”部分发现，默认情况下有 10 个服务在运行（在标准 FreeBSD 系统中，使用“service -e”可以显示这些服务）。包括内核在内的八个模块被加载，这些模块实际上是从运行 jail 的主机检测到并转发到 jail 中的。但到目前为止，一切都是绿色的，直到进入“Users, Groups and Authentication”部分，在这里首次出现了红色警告。管理员帐户、唯一的 UID 和登录 shell 都似乎是 lynis 的问题所在。

![](https://github.com/user-attachments/assets/c419bd53-acd0-401b-9ba8-23acb0797e44)

“Shells”部分列出了未保护的控制台 TTY。请注意，我这里只列出了存在问题的项，其他项要么是可以接受的，要么由于缺少软件而尚未激活。安装额外软件后检查并重新检查扫描结果，看是否有任何可能打开攻击向量的变化，是一种好习惯。

![](https://github.com/user-attachments/assets/0c864651-13c2-40bd-ae46-8e1757e481b7)

Lynis 不仅会批评你应该做得更好的地方，它还会建议你在“文件系统”部分检查 /tmp 和 /var 挂载点。如果第一次扫描发现了一堆问题，不要气馁。将其视为概览和改进的总体指导。有些问题很容易修复，随后的审计应该会标识出这些问题。如果你将来设置了另一个主机，你可以事先检查这些问题，以避免重复犯同样的错误。

![](https://github.com/user-attachments/assets/147f0fcb-8a33-4694-8493-e9582cd50f89)

Lynis 报告中的许多部分为空，原因仅仅是我们还没有安装任何东西。如果有一些容易成为典型攻击目标的软件，Lynis 会更彻底地扫描这些，并将附加结果添加到报告中。总体而言，这个 FreeBSD jail 似乎没有太多问题。根据发现的情况，似乎唯一的问题是家庭目录的所有权。由于目前这个 jail 中除了 root 用户之外没有其他用户，所以我并不担心。但我会做个笔记，稍后再检查这个问题。

在“内核加固”部分，列出了应该与默认设置不同的 TCP/IP 相关 sysctl 设置。这意味着例如 `net.inet.icmp.drop_redirect` 默认设置为 `0`，但应该设置为 `1`（启用）。这个设置未启用的原因可能不仅仅是“疏忽”。可能是为了使 FreeBSD 默认在尽可能多的网络环境中正常工作，在这些环境中此选项可能会导致问题或阻止工作。由于列出了整个清单，可以轻松地将每个设置更改为推荐的值，看看网络是否仍然正常运行。如果正常，保持该选项启用是个好主意。

![](https://github.com/user-attachments/assets/fa067548-dc48-4d8d-a400-d41b50622fe4)

扫描结束时，报告列出了 4 个警告和 15 个建议。最容易修复的警告是最后一个，即运行 `pkg audit -F` 以获取最新的 Ports 安全漏洞数据库。每个建议和警告中提供的链接提供了更多关于问题及其影响的详细信息。并非所有这些问题都属于“如果我们不立即修复，就会丢失客户数据库”类型。有些是好的系统管理员实践，例如“避免 /tmp 占满”，所以不要仅仅因为它们与安全无关就忽视它们。通常，安全事件的发生不是因为单一问题，而是因为恶意人员能够将几个不相关的问题组合成一个更大的灾难。

对我来说，像 `/etc/login.conf` 中的 Umask 设置可以更严格，例如 027”这样的项目是值得花时间去探索的。谁知道呢，也许这将成为即将发布的 FreeBSD 版本中的新默认设置（比作为安全公告的一部分更好），一旦安全团队有时间进行审查。

请记住，这个小实验仅涵盖了操作系统，且随着 jail 执行其预定任务，可能会揭示更多内容。随着额外软件和服务的运行，暴露给互联网或本地网络的用户，它意味着需要进行额外的扫描。可以查看 lynis 提供的其他模式，包括渗透测试模式，因为它可能揭示更多的安全待办事项。

Lynis 并不是唯一的工具。明智的安全人员通常会使用多个工具，覆盖更广泛的可能问题，找到（或确认）其他工具的疑虑。像 portsentry、nmap、nessus、snort，以及尚未移植的 terrascan 和 openvas-scanner 等工具，都是很好的工具，可以在为时已晚之前发现并帮助解决潜在的安全问题。总是要对这些工具没有发现所有问题或没有找到最新事件保持怀疑。定期运行它们并不能成为不检查你运行的软件的安全公告并订阅其通知的借口。

哦，我刚意识到我提到了不止一个工具。但我又能做什么，不能把这些只留给自己呢？

***

**BENEDICT REUSCHLING** 是 FreeBSD 项目的文档提交者，也是文档工程团队的成员。他是 FreeBSD 基金会董事会的副主席。过去，他曾任两届 FreeBSD 核心团队。他在德国达姆施塔特应用科技大学管理一个大数据集群，还为本科生教授“Unix for Developers”课程。与 Allan Jude 一起，他是每周播客 bsdnow\.tv 的主持人。
