Product SiteDocumentation Site

14.3. 监督:预防,检测,威慑

Monitoring is an integral part of any security policy for several reasons. Among them, that the goal of security is usually not restricted to guaranteeing data confidentiality, but it also includes ensuring availability of the services. It is therefore imperative to check that everything works as expected, and to detect in a timely manner any deviant behavior or change in quality of the service(s) rendered. Monitoring activity can help detecting intrusion attempts and enable a swift reaction before they cause grave consequences. This section reviews some tools that can be used to monitor several aspects of a Debian system. As such, it completes the section dedicated to generic system monitoring in 第 12 章 Advanced Administration.

14.3.1. 使用 logcheck 监视日志

logcheck 程序默认每小时监视日志文件。它会把异常日志信息通过邮件发给管理员分析。
要监视的文件清单存储在 /etc/logcheck/logcheck.logfiles;如果 /etc/syslog.conf 文件没有被彻底修改,使用默认值就能很好工作。
logcheck 可以以三种模式中的一种或几种工作:偏执(paranoid), 服务器(server)工作站(workstation)。第一种模式是非常详细的,应该只限于特殊服务器,例如防火墙。推荐大多数服务器使用第二个(也是默认)模式。最后一个用于工作站,更简明(过滤掉了更多信息)。
在三种情况下,logcheck 可以被定制以排除某些信息(取决于安装的服务),除非管理员真想每小时收到一批不感兴趣的邮件。由于信息筛选机制相当复杂,如果碰到问题就需要翻阅 /usr/share/doc/logcheck-database/README.logcheck-database.gz
适用的规则可以分成几种类型:
  • 被认为是尝试侵入的信息(文件存储在 /etc/logcheck/cracking.d/ 目录中);
  • 取消限制的信息(/etc/logcheck/cracking.ignore.d/);
  • 被标识为安全警报的信息(/etc/logcheck/violations.d/);
  • 取消此类标识的信息(/etc/logcheck/violations.ignore.d/);
  • 最后是,剩余的信息(可以考虑为系统事件)。
系统事件总是会被发送,除非在 /etc/logcheck/ignore.d.{paranoid,server,workstation}/ 目录中的规则指明某些事件要被忽略。当然,只有相应详细等级等于或大于所选择模式的目录会起作用。

14.3.2. 监视行为

14.3.2.1. 实时

top 是一个可以显示目前正在运行进程的交互工具。默认排序基于处理器的使用量,可以通过 P 键获取。其他排序方法包括内存使用量(M 键),总处理器时间(T 键)和处理器标识(N 键)。k 键允许输入进程标识结束进程。r 键可以 renicing 进程,例如改变优先级。
当系统过载时,top 是一个很好的工具,用来查看哪个进程抢占处理器或者消耗过多内存。特别是,检查那些进程所消耗的资源是宿主机器服务要使用的。以互联网数据用户身份运行的未知进程应该单列并调查,它很有可能是通过网络应用上的漏洞,在系统上安装并运行的软件。
top 是一个很灵活的工具,手册页中详列了如何定制显示并让其适于个人需求和习惯。
gnome-system-monitorqps 图形工具和 top 类似,并提供大体上相同的特性。

14.3.2.2. 历史

处理器负载,网络流量和空闲磁盘空间是一直在变化的信息。记录它们的演变常常可以用来确定电脑是如何使用的。
有很多专门工具可用于此类任务。很多可以通过 SNMP(简单网络管理协议)获取数据,集中信息。这样的好处之一是可以从非通用计算机,例如专用的网络路由器或者交换机上获取数据。
This book deals with Munin in some detail (see 第 12.4.1 节 “Setting Up Munin”) as part of 第 12 章: “Advanced Administration. Debian also provides a similar tool, cacti. Its deployment is slightly more complex, since it is based solely on SNMP. Despite having a web interface, grasping the concepts involved in configuration still requires some effort. Reading the HTML documentation (/usr/share/doc/cacti/html/index.html) should be considered a prerequisite.

14.3.3. 侦测变化

系统一旦安装和配置,除非安全更新,通常没有理由改变大部分文件和目录,数据除外。因此,要注意确保文件没有改变:任何非预期的变化都值得探究。本节介绍几个可以在非预期变化发生时监视文件并警告管理员(或者只列出变化)的工具。

14.3.3.1. 审核软件包:debsums 及其限制

debsums 是一个很有趣的工具,它能找出哪些安装文件被(潜在攻击者)修改了,但是应该有所保留。首先,并非所有的 Debian 软件包都提供了该程序需要的指纹信息(可以在 /var/lib/dpkg/info/package.md5sums 文件中找到,如果该文件存在)。 提示:指纹是一个数值,通常是数字(甚至是十六进制),包含文件内容的签名。该签名使用某种算法(众所周知的是 MD5 或 SHA1)在某种程度上能确保文件内容微小的变化也能反映在指纹上;称为“雪崩效应”。这样就可以将数字指纹作为试金石来检测文件的内容是否被改变。这些算法是不可逆的;换句话说,它们中的大多数,知道指纹并不能得出相应的内容。近期的数学研究似乎削弱了这些原则的绝对性,但是到目前为止,还不能称之为问题,因为创建指纹相同而内容不同的文件是一个相当艰巨的任务。
另外,md5sums 文件存储在硬盘上;攻击者会更新这些文件以包含被篡改文件的检核和。
第一个缺点可以通过设定 debsums 基于 .deb 软件包检测,而非依赖 md5sums 文件。但是,这样首先需要下载相应的 .deb
# apt-get --reinstall -d install `debsums -l`
[ ... ]
# debsums -p /var/cache/apt/archives -g
同样值得注意的是,在默认配置中,如果使用 APT 安装软件包,debsums 将自动产生缺失的 md5sums 文件。
其他问题可以通过类似方法避免:检查必须基于素 .deb 文件。这意味着所有已安装的软件包都要有 .deb 文件,并确保它们的完整性,最简单的方法就是从 Debian 镜像抓取。这一过程是缓慢而冗长的,因此不应作为定期使用的主动技术。
# apt-get --reinstall -d install `grep-status -e 'Status: install ok installed' -n -s Package`
[ ... ]
# debsums -p /var/cache/apt/archives --generate=all
注意本例使用 dctrl-tools 软件包中的 grep-status 命令,该命令默认情况下没有安装。

14.3.3.2. 监视文件:AIDE

AIDE(Advanced Intrusion Detection Environment )工具可以检查文件完整性,侦测系统之前文件镜像的任何变化。这种影响以数据库(/var/lib/aide/aide.db)形式储存,包含了系统上所有文件的相关信息(指纹,权限,时间戳,等等)。该数据库使用 aideinit命令初始化;然后每天(通过 /etc/cron.daily/aide 脚本)检查有无任何相关改变。如果探测到变化,AIDE 会将其记入文件(/var/log/aide/*.log)并将发现通过邮件发送给管理员。
/etc/default/aide 中的很多选项可以用于调整 aide 软件包行为。AIDE 配置存储在 /etc/aide/aide.conf/etc/aide/aide.conf.d/(实际上,这些文件只用于 update-aide.conf 生成 /var/lib/aide/aide.conf.autogenerated)。配置指明哪些文件的哪些特性需要检查。譬如,日志文件的内容会有常规更新,只要这些文件的读写权限保持不变,那么就可以忽略这些变化。但是,可执行程序的内容和权限必须是不变的。虽然不是很复杂,但是配置的语法不是很直观,推荐阅读 aide.conf(5) 手册。
新版本的数据库每天生成在 /var/lib/aide/aide.db.new;如果所有记录的变化都是合法的,就可以用它替代参考数据库。

14.3.4. 侦测入侵(IDS/NIDS)

snort(在 Debian 的同名软件包中)属于 NIDS -网络入侵侦测系统(Network Intrusion Detection System)。它的功能是监听网络并侦测渗透尝试和敌意行为(包括拒绝服务攻击)。所有这些事件都会被记录,并且每天会给管理员发送过去24小时的摘要。
其配置需要指明本地网络所覆盖的网络地址。实际上,这意味着所有潜在的攻击目标。其他重要参数可以使用 dpkg-reconfigure snort 配置,包括要监视的网络接口。对以太网连接来说,通常是 eth0,但是也可能是其他的,例如:对于 ADSL 或 PSTN(Public Switched Telephone Network,或者旧式拨号调制解调器) 是 ppp0,对于某些无线网卡是 wlan0
snort 配置文件(/etc/snort/snort.conf)很长,大量的注释从细节上描述每个指令。了解其大部分内容需要通读并结合具体情况。譬如,指明哪个机器上有哪种服务可以限制 snort 报告的数量,因为在桌面系统上的拒绝服务攻击远不及在 DNS 服务器上的严重。另一个有趣的指令是存储 IP 地址和 MAC 地址(它可以唯一的识别网卡)之间的映射关系,以便于侦测 ARP 欺骗 攻击,其中被操纵的机器试图伪装成另一个机器(例如一个关键服务器)。