FreeBSD handbook中文版 10 安全(5) 核。 但即使你关闭了bpf 设备,你仍然可能会对/dev/mem 和/dev/kmem 担心。因为,入侵 者仍可以写到raw 磁盘设备。另外,还有另一个叫做module loader 的内核特性,kldload。 一个入侵者可以在运行内核时使用一个KLD module 来安装它自己的bpf 设备,或其他检测 设备。 第6 页FreeBSD 使用手册 要避免这些问题,你必须在更高安全级别上运行内核,至少在securelevel 1 上。 Securelevel 可以在kern.securelevel 变量上用sysctl 来设置。一旦你把securelevel 设 置成1,对raw 设备的写入操作将被拒绝,特殊的chflags 标记如schg 将被强迫执行。你 必须保证schg 标记被设置在特定的启动程序,目录和脚本文件上。这样做可能有点夸大了。 当你在一个安全性比较高的水平上操作时,升级系统可能比较困难。 你可以折中一下,将系统运行在一个安全性更高的水平上,但不对每个系统文件和目 录设置schg 标记。另外一个方法是简单地将/ 和/usr 设为只读。这样就可以阻止所有重要 的侵入检测了。 10.3.6 检查文件的完整性:程序,配置文件等 你需要保护你的核心系统配置和控制文件。例如,在/和/usr 中的绝大多数文件上使用 chflag 来设置schg 位可能达不到预期的目标,因为当它保护文件的时候,它也会关闭一个 检测窗口。你安全层的最后一层也许是最重要的检测层。如果你不能检测到潜在的入侵, 你安全层的其余部分可能就没有用了。你的工作是要让入侵者慢下来,而不是阻止它,以 便寻找时机抓住它。 检测入侵的最好方法是寻找有没有修改,丢失或不需要的文件。寻找修改文件的最好 方法是来自另一个访问受限制的系统。在一个特别的访问受到限制的系统上写上你的安全 脚本使得入侵者不可见,这一点很重要。为了集中优势,你通常必须使用有限访问的机器 来访问其他机器,通常是执行一个其他机器的只读NFS 输出到有限访问的机器,或通过设 置ssh 钥匙对来允许有限访问的机器ssh 到其他机器。除了它的网络传输,NFS 是很少用的 方法---允许你监视每个客户机的文件系统。 如果你的有限访问服务器通过一个switch 来连接到客户机,NFS 方法是比较好的选择。 如果你的有限访问服务器是通过一个hub 或通过几层的路由连接到客户机,NFS 方法可能很 不安全,使用ssh 可能是更好的选择。 一旦你使用一个访问受限制的机器,至少需要能读取客户系统,你必须写一些脚本来 执行实时的检测。挂上NFS 之后,你可以用find 和md5 这样的工具。至少每天一次物理地 md5 客户机文件。当发现匹配错误时,会发出“尖叫声”提示系统管理员去检查。一个安全 脚本也会检查不适当的suid 程序和系统分区上新增或删除的文件。 第7 页FreeBSD 使用手册 当使用ssh 而不是NFS 时,写入安全脚本是很困难的。为了运行它们,你必须scp 脚 本到客户机上,使它们看得见,为了安全你也必须scp 那些脚本使用的程序。在客户机上 的ssh 程序已经有安全问题了。总的来讲,当通过不安全的连接运行时,使用ssh 可能是 必须的,但它也比较难处理。 一个好的安全脚本将通过访问配置文件来检查用户的变 化:.rhosts, .shosts, .ssh/authorized_keys。它已经超出了MD5 检查的范围。 如果你有一个巨大的磁盘空间,它可能需要花很长时间来检查每个文件。在这种情况 下,设置挂载标记来不接受suid 程序和设备在那些分区上是一个好主意。nodev 选项nosuid 选项正是你所看到的。你可以把它们扫描一下,至少一个星期一次。