Debian 安全手册
第 10 章 - 遭受入侵之前


10.1 保持系统安全

您应该努力保持系统安全,方法是监控其使用情况以及可能影响它的漏洞,并在补丁可用时立即修补它们。即使您最初安装了一个非常安全的系统,您也必须记住,系统中的安全性会随着时间的推移而降低,可能会发现暴露的系统服务的安全漏洞,并且用户可能会由于缺乏理解(例如,使用明文协议远程访问系统或使用容易猜测的密码)或因为他们正在积极尝试破坏系统的安全性(例如,在其帐户上本地安装其他服务)而暴露系统安全。


10.1.1 跟踪安全漏洞

尽管大多数管理员在看到可用的补丁时都意识到影响其系统的安全漏洞,但您可以通过检测系统何时易受攻击来努力领先于攻击并引入针对安全漏洞的临时对策。当运行暴露的系统(即连接到互联网)并提供服务时,情况尤其如此。在这种情况下,系统管理员应注意监控已知的信息来源,以便在检测到可能影响关键服务的漏洞时第一时间知晓。

这通常包括订阅公告邮件列表、项目网站或特定代码的软件开发人员提供的错误跟踪系统。例如,Apache 用户应定期查看 Apache 的 安全漏洞列表 并订阅 Apache 服务器公告 邮件列表。

为了跟踪影响 Debian 发行版的已知漏洞,Debian 测试安全团队提供了一个 安全跟踪器,其中列出了 Debian 软件包中尚未修复的所有已知漏洞。该跟踪器中的信息通过不同的公共渠道获得,包括通过安全漏洞数据库或 Debian 的错误跟踪系统 获得的已知漏洞。管理员可以搜索为 stableoldstabletestingunstable 版本跟踪的已知安全问题。

该跟踪器具有可搜索的界面(按 CVE 名称和软件包名称)和一些工具(例如 debsecan,请参阅 使用 debsecan 自动检查安全问题,10.1.2.4 节)使用该数据库来提供有关影响给定系统但尚未解决的漏洞的信息(即那些正在等待修复的漏洞)。

有意识的管理员可以使用该信息来确定哪些安全漏洞可能影响他们管理的系统,确定漏洞的严重性,并在补丁可用之前应用(如果可用)临时对策来修复此问题。

Debian 安全团队支持的版本跟踪的安全问题最终应通过 Debian 安全公告 (DSA) 处理,并将对所有用户可用(请参阅 持续更新系统,10.1.2 节)。一旦安全问题通过公告修复,它们将不会在跟踪器中可用,但您可以使用 安全交叉引用表 搜索安全漏洞(按 CVE 名称),该表可用于已发布的 DSA。

但是请注意,Debian 测试安全团队跟踪的信息仅涉及已披露的漏洞(即那些已公开的漏洞)。在某些情况下,Debian 安全团队可能会处理和准备基于提供给他们的未公开信息(例如,通过封闭的供应商邮件列表或软件的上游维护人员)的软件包的 DSA。因此,如果发现某些安全问题仅显示为公告,但从未在安全跟踪器中显示,请不要感到惊讶。


10.1.2 持续更新系统

您应该经常进行安全更新。正如 Bill Arbaugh 的论文(在 2001 年 IEEE 安全与隐私研讨会上发表)所解释的那样,绝大多数漏洞利用都是由于已知漏洞没有及时修补造成的。更新在 执行安全更新,4.2 节 中描述。


10.1.2.1 手动检查哪些安全更新可用

Debian 确实有一个特定的工具来检查系统是否需要更新,但许多用户只想手动检查他们的系统是否有任何安全更新可用。

如果您已按照 执行安全更新,4.2 节 中的描述配置了系统,您只需执行

     # apt-get update
     # apt-get upgrade -s
     [ ... review packages to be upgraded ... ]
     # apt-get upgrade 
     # checkrestart
     [ ... restart services that need to be restarted ... ]

并重启任何库已更新的服务(如果有)。注意:阅读 执行安全更新,4.2 节 以获取有关库(和内核)升级的更多信息。

第一行将从您配置的软件包源下载可用软件包的列表。-s 将执行模拟运行,也就是说,它不会下载或安装软件包,而是告诉您应该下载/安装哪些软件包。从输出中,您可以推断出哪些软件包已由 Debian 修复并作为安全更新提供。示例

     # apt-get upgrade -s
     Reading Package Lists... Done
     Building Dependency Tree... Done
     2 packages upgraded, 0 newly installed, 0 to remove and 0  not upgraded.
     Inst cvs (1.11.1p1debian-8.1 Debian-Security:3.0/stable)
     Inst libcupsys2 (1.1.14-4.4 Debian-Security:3.0/stable)
     Conf cvs (1.11.1p1debian-8.1 Debian-Security:3.0/stable)
     Conf libcupsys2 (1.1.14-4.4 Debian-Security:3.0/stable)

在此示例中,您可以看到系统需要使用新的 cvscupsys 软件包进行更新,这些软件包是从 woody 的安全更新归档中检索的。如果您想了解为什么需要这些软件包,您应该访问 http://security.debian.org 并检查最近发布了哪些与这些软件包相关的 Debian 安全公告。在本例中,相关的 DSA 是 DSA-233(针对 cvs)和 DSA-232(针对 cupsys)。

请注意,如果进行了内核升级,您将需要重启系统。


10.1.2.2 在桌面检查更新

自 Debian 4.0 lenny 以来,Debian 在默认安装中提供并安装了 update-notifier。这是一个 GNOME 应用程序,当您进入桌面时启动,可用于跟踪系统可用的更新并安装它们。它为此使用了 update-manager

在稳定系统中,只有在安全补丁可用或在 point release 时才提供更新。因此,如果系统已正确配置为接收安全更新,如 执行安全更新,4.2 节 中所述,并且您有一个 cron 任务正在运行以更新软件包信息,您将通过桌面通知区域中的图标收到通知。

通知不会打扰用户,并且用户不会被迫安装更新。桌面用户(使用管理员密码)可以从通知图标访问一个简单的 GUI,以显示可用的更新并安装它们。

此应用程序的工作原理是检查软件包数据库并将系统与其内容进行比较。如果软件包数据库通过 cron 任务定期更新,则数据库的内容将比系统中安装的软件包更新,并且应用程序将通知您。

Apt 安装了这样一个任务 (/etc/cron.d/apt),它将根据 Apt 的配置(更具体地说是 APT::Periodic)运行。在 GNOME 环境中,可以通过转到 系统 > 管理 > 软件源 > 更新,或运行 /usr/bin/software-properties 来调整此配置值。

如果系统设置为每天下载软件包列表但不下载软件包本身,则您的 /etc/apt/apt.conf.d/10periodic 应如下所示

     APT::Periodic::Update-Package-Lists "1";
     APT::Periodic::Download-Upgradeable-Packages "0";

您可以使用不同的 cron 任务,例如 cron-apt 安装的任务(请参阅 使用 cron-apt 自动检查更新,10.1.2.3 节)。您也可以只使用此应用程序手动检查升级。

KDE 桌面环境的用户可能更喜欢安装 adeptadept-notifier,它们提供类似的功能,但不是标准安装的一部分。


10.1.2.3 使用 cron-apt 自动检查更新

自动安全更新的另一种方法是使用 cron-apt。此软件包提供了一个工具,可以定期(使用 cron 作业)更新系统,并且还可以配置为使用本地邮件传输代理向系统管理员发送邮件。默认情况下,它只会更新软件包列表并下载新软件包,但可以配置为自动安装新更新。

请注意,如果您打算自动更新系统(即使只是下载软件包),您可能需要检查发行版版本,如 按发行版版本检查,7.5.3 节 中所述。否则,您无法确定下载的软件包是否真的来自受信任的来源。

更多信息请访问 Debian 管理站点


10.1.2.4 使用 debsecan 自动检查安全问题

debsecan 程序通过报告缺少的安全更新和安全漏洞来评估安全状态。与仅提供与可用安全更新相关信息的 cron-apt 不同,此工具从 Debian 安全团队维护的安全漏洞数据库中获取信息,该数据库还包括有关尚未通过安全更新修复的漏洞的信息。因此,它在帮助管理员跟踪安全漏洞方面更加有效(如 跟踪安全漏洞,10.1.1 节 中所述)。

安装 Debian 软件包 debsecan 后,如果管理员同意,它将生成一个 cron 任务,使其在发现易受攻击的软件包时运行并将输出发送给特定用户。它还会从互联网下载信息。安全数据库的位置也是安装时提出的问题的一部分,稍后在 /etc/default/debsecan 中定义,对于无法访问互联网的系统,可以轻松调整它,以便它们都从本地镜像中提取,从而有一个单点访问漏洞数据库。

但是请注意,安全团队跟踪许多漏洞,包括可能无法通过安全更新修复的低风险问题,以及最初报告为影响 Debian 的某些漏洞,稍后可能会在调查后被驳回。Debsecan 将报告所有漏洞,这使其比上述其他工具更冗长。

更多信息请访问 作者的站点


10.1.2.5 其他安全更新方法

还有 apticron,它与 cron-apt 类似,将检查更新并向管理员发送邮件。有关 apticron 的更多信息,请访问 Debian 管理站点

您可能还想看看 secpack,这是一个非官方程序,用于从 security.debian.org 进行安全更新,并带有 Fruhwirth Clemens 编写的签名检查。或者 Dean Wilson 编写的 Nagios 插件 check_debian_updates.sh


10.1.3 避免使用 unstable 分支

除非您想在出现漏洞时花时间自己修补软件包,否则您不应将 Debian 的 unstable 分支用于生产级系统。主要原因是 unstable 没有安全更新(请参阅 如何处理 testingunstable 的安全性?,12.3.8 节)。

事实是,某些安全问题可能会出现在 unstable 中,而不会出现在 stable 发行版中。这是由于不断向其中提供的应用程序添加新功能,以及包含可能尚未经过全面测试的新应用程序。

为了在 unstable 分支中进行安全升级,您可能必须对新版本进行完整升级(这可能会更新的内容远不止受影响的软件包)。尽管有一些例外,但安全补丁通常仅向后移植到 stable 分支。主要思想是在更新之间,不应添加新代码,只需修复重要问题。

但是请注意,您可以使用安全跟踪器(如 跟踪安全漏洞,10.1.1 节 中所述)来跟踪影响此分支的已知安全漏洞。


10.1.4 testing 分支的安全支持

如果您正在使用 testing 分支,则必须考虑有关安全更新可用性的一些问题

此行为可能会根据发行版的发布状态而改变。当发布即将到来时,安全团队或软件包维护人员可能会直接向 testing 提供更新。

此外,Debian 测试安全团队 可以在 testing 分支中发布 Debian Testing Security Advisories (DTSA),如果需要立即修复该分支中的安全问题,并且无法等待正常程序(或正常程序被其他软件包阻止)。

愿意利用此支持的用户应将以下行添加到他们的 /etc/apt/sources.list(而不是 执行安全更新,4.2 节 中描述的行)

         deb http://security.debian.org testing/updates main contrib non-free
     # This line makes it possible to donwload source packages too
         deb-src  http://security.debian.org testing/updates main contrib non-free

有关此支持的更多信息,请阅读 公告。此支持于 2005 年 9 月 在一个单独的存储库中正式启动,后来集成到主安全归档中。


10.1.5 Debian GNU/Linux 系统中的自动更新

首先,不完全推荐自动更新,因为管理员应查看 DSA 并了解任何给定安全更新的影响。

如果您想自动更新系统,您应该

更安全的替代方案可能是使用 -d(或 --download-only)选项,该选项将下载但不安装必要的软件包。然后,如果 cron 执行显示系统需要更新,则可以手动完成。

为了完成这些任务中的任何一项,系统必须正确配置为下载安全更新,如 执行安全更新,4.2 节 中所述。

但是,对于 unstable,如果不进行仔细分析,则不建议这样做,因为如果某些严重错误潜入重要软件包并安装到您的系统中,您可能会使系统进入无法使用的状态。Testing 在此问题上稍微安全一些,因为严重错误更有可能在软件包移动到 testing 分支之前被检测到(尽管,您可能没有任何可用的安全更新)。

如果您有一个混合发行版,即 stable 安装,其中某些软件包已更新为 testingunstable,您可以调整 pinning 首选项以及 apt-get 中的 --target-release 选项,以仅更新您已更新的软件包。[68]


10.2 执行定期完整性检查

根据您在安装后生成的基线信息(即 拍摄系统快照,4.18 节 中描述的快照),您应该能够不时进行完整性检查。完整性检查将能够检测到入侵者所做的或由于系统管理员的错误而导致的文件系统修改。

如果可能,完整性检查应离线完成。[69] 也就是说,不使用系统的操作系统进行检查,以避免由例如已安装的 rootkit 产生的虚假安全感(即假阴性)。用于检查系统的完整性数据库也应从只读介质中使用。

如果无法使系统脱机,您可以考虑使用任何可用的文件系统完整性工具(在 检查文件系统完整性,4.16.3 节 中描述)在线进行完整性检查。但是,应采取预防措施以使用只读完整性数据库,并确保完整性检查工具(和操作系统内核)未被篡改。

完整性工具部分中提到的一些工具,例如 aideintegritsamhain 已经准备好进行定期检查(在前两种情况下通过 crontab,在 samhain 中通过独立守护程序),并且可以在文件系统更改时通过不同的渠道(通常是电子邮件,但 samhain 也可以发送页面、SNMP traps 或 syslog 警报)警告管理员。

当然,如果您执行系统的安全更新,则应重新拍摄为系统拍摄的快照,以适应安全更新所做的更改。


10.3 设置入侵检测

Debian GNU/Linux 包含用于入侵检测的工具,入侵检测是在本地系统或专用网络中的其他系统上检测不适当或恶意活动的做法。如果系统非常关键或者您真的非常偏执,那么这种防御非常重要。最常见的入侵检测方法是统计异常检测和模式匹配检测。

始终要注意,为了通过引入任何这些工具真正提高系统的安全性,您需要建立警报+响应机制。如果您不打算提醒任何人,则入侵检测是在浪费时间。

当检测到特定攻击时,大多数入侵检测工具会将事件记录到 syslogd 或向 root 用户发送电子邮件(邮件接收者通常是可配置的)。管理员必须正确配置工具,以便误报不会触发警报。警报也可能表明正在进行的攻击,并且可能在一天后无用,因为攻击可能已经成功。因此,请确保制定适当的警报处理策略,并确保实施此策略的技术机制到位。

一个有趣的信息来源是 CERT 的入侵检测清单


10.3.1 基于网络的入侵检测

基于网络的入侵检测工具监控网络段上的流量,并将此信息用作数据源。具体来说,检查网络上的数据包,并检查它们是否与特定签名匹配。

snort 是一个灵活的数据包嗅探器或记录器,它使用攻击签名字典检测攻击。它可以检测各种攻击和探测,例如缓冲区溢出、隐形端口扫描、CGI 攻击、SMB 探测等等。snort 还具有实时警报功能。您可以将 snort 用于网络上的各种主机以及您自己的主机。这是一个应该安装在每个路由器上的工具,以密切关注您的网络。只需使用 apt-get install snort 安装它,按照问题操作,然后观看它记录。对于更广泛的安全框架,请参阅 Prelude

Debian 的 snort 软件包默认启用了许多安全检查。但是,您应该自定义设置以考虑您在系统上运行的特定服务。您可能还希望寻求特定于这些服务的其他检查。

还有其他更简单的工具可用于检测网络攻击。portsentry 是一个有趣的软件包,可以提醒您注意针对主机的端口扫描。诸如 ippliplogger 之类的其他工具也可以检测到某些 IP(TCP 和 ICMP)攻击,即使它们没有提供 snort 所做的那种高级技术。

您可以使用 Debian 软件包 idswakeup 测试任何这些工具,这是一个生成误报的 shell 脚本,并包含许多常见的攻击签名。


10.3.2 基于主机的入侵检测

基于主机的入侵检测涉及在要监控的系统上加载软件,该软件使用日志文件和/或系统审计程序作为数据源。它查找可疑进程,监控主机访问,甚至可能监控对关键系统文件的更改。

tiger 是一个较旧的入侵检测工具,自 Woody 分支以来已移植到 Debian。tiger 提供了与安全入侵相关的常见问题的检查,例如密码强度、文件系统问题、通信进程以及 root 可能被破坏的其他方式。此软件包包括新的 Debian 特定安全检查,包括:已安装文件的 MD5sums 检查、不属于软件包的文件位置以及本地监听进程的分析。默认安装将 tiger 设置为每天运行,生成一份报告,发送给超级用户,关于系统可能存在的漏洞。

日志分析工具(例如 logcheck)也可用于检测入侵尝试。请参阅 使用和自定义 logcheck,4.12.1 节

此外,监控文件系统完整性的软件包(请参阅 检查文件系统完整性,4.16.3 节)在检测安全环境中的异常情况方面非常有用。最有可能的是,有效的入侵将修改本地文件系统中的某些文件,以规避本地安全策略、安装木马或创建用户。可以使用文件系统完整性检查器检测到此类事件。


10.4 避免 rootkit


10.4.1 可加载内核模块 (LKM)

可加载内核模块是包含动态可加载内核组件的文件,用于扩展内核的功能。使用模块的主要好处是能够添加额外的设备,例如以太网卡或声卡,而无需修补内核源代码并重新编译整个内核。但是,破解者现在正在使用 LKM 作为 rootkit(knark 和 adore),从而在 GNU/Linux 系统中打开后门。

LKM 后门比传统的 rootkit 更复杂且更难以检测。它们可以隐藏进程、文件、目录甚至连接,而无需修改二进制文件的源代码。例如,恶意 LKM 可以强制内核从 procfs 中隐藏特定进程,这样即使是二进制文件 ps 的已知良好副本也不会列出有关系统上当前进程的准确信息。


10.4.2 检测 rootkit

有两种方法可以防御系统免受 LKM rootkit 的攻击,一种是主动防御,另一种是被动防御。检测工作可能很简单且轻松,也可能很困难且令人疲惫,具体取决于所采取的方法。


10.4.2.1 主动防御

这种防御的优点是它可以首先防止系统受到损害。一种这样的策略是抢先一步,即加载一个 LKM,旨在保护系统免受其他恶意 LKM 的侵害。第二种策略是从内核本身删除功能。例如,您可以完全删除可加载内核模块的功能。但是请注意,即使在这种情况下,也有一些 rootkit 可能会起作用,有些 rootkit 会直接篡改 /dev/kmem(内核内存)以使自己无法检测到。

Debian GNU/Linux 有一些软件包可以用于建立主动防御

如果您在 GNU/Linux 系统上确实不需要许多内核功能,您可能希望在内核配置期间禁用可加载模块支持。要禁用可加载模块支持,只需在构建内核的配置阶段或在 .config 文件中设置 CONFIG_MODULES=n 即可。这将防止 LKM rootkit,但您会失去 Linux 内核的这一强大功能。此外,禁用可加载模块有时可能会使内核过载,从而使可加载支持成为必要。


10.4.2.2 被动防御

被动防御的优点是它不会使系统资源过载。它的工作原理是将系统调用表与磁盘文件 System.map 中的已知干净副本进行比较。当然,被动防御只会在系统已经被破坏后通知系统管理员。

可以使用 chkrootkit 软件包完成对 Debian 中某些 rootkit 的检测。Chkrootkit 程序检查目标系统上几个已知 rootkit 的迹象,但不是最终测试。


10.5 天才/偏执狂的想法 — 您可以做什么

这可能是最不稳定和有趣的章节,因为我希望一些“呃,这听起来太疯狂了”的想法可能会实现。以下是一些为了增强安全性的想法——或许是天才之举,或许是偏执狂想,或许是疯狂之语,又或许是灵感迸发,这取决于你的观点。


10.5.1 构建蜜罐

蜜罐是一个旨在教会系统管理员黑客如何探测和利用系统的系统。它是一个系统设置,其预期和目标是该系统将被探测、攻击和可能被利用。通过学习黑客使用的工具和方法,系统管理员可以学会更好地保护自己的系统和网络。

如果你投入时间来实施和监控,Debian GNU/Linux 系统可以很容易地用于设置蜜网。你可以轻松设置虚假的蜜罐服务器以及控制蜜网的防火墙[72] 和某种网络入侵检测器,将其放在互联网上,然后等待。请注意,如果系统被利用,你需要及时收到警报(参见 第 4.12 节 日志和警报的重要性),以便你可以采取适当的措施并在你看到足够信息后终止入侵。以下是一些在设置蜜罐时需要考虑的软件包和问题

如果你不能使用备用系统来构建蜜罐以及保护和控制它的网络系统,你可以使用 xenuml (User-Mode-Linux) 中提供的虚拟化技术。如果你选择这条路线,你将需要使用 kernel-patch-xenkernel-patch-uml 补丁你的内核。

你可以在 Lanze Spitzner 的优秀文章 构建蜜罐 (来自“了解你的敌人”系列)中阅读更多关于构建蜜罐的信息。此外,蜜罐项目 提供了关于构建蜜罐和审计对它们进行的攻击的宝贵信息。



Debian 安全手册

版本:3.13,Sun, 08 Apr 2012 02:48:09 +0000

Javier Fernández-Sanguino Peña jfs@debian.org
作者,第 1.1 节