由于Linux操作系统是一个开放源代码的免费系统,因此越来越受到用户的欢迎。随着Linux在我国的不断普及,有关的政府部门更是将基于Linux开发具有自主版权的操作系统提高到保卫国家信息安全的高度来看待,因此我们不难预测;Linux在我国将得到更快更大的发展。而对于众多习惯了Unix和Windows NT的系统管理员来讲,如何保证Linux操作系统的安全将面临许多新的挑战。
苦修内功
第一步:安装文件系统要分区
在Linux系统中,如果分别为不同的应用安装单独的主分区,再将关键的分区设置为只读,将大大提高文件系统的安全性。
1.文件分区
Linux的文件系统可以分成几个主要的分区,一般情况下至少要建立/、/usr/local、/var和/home等几个分区。其中/usr可以安装成只读并且可以被认为是不可修改的,如果/usr中有任何文件发生了改变,那么系统将立即发出安全报警。/lib、/boot和/sbin的安装和设置也一样。在安装时应该尽量将它们设置为只读,这样 对它们的文件、目录和属性进行的任何修改都会导致系统报警。
当然将所有主要的分区都设置为只读是不可能的,有的分区如/var,其自身的性质就决定了不能将它设置为只读,但应该不允许它具有执行权限。
2.扩展Ext2
使用Ext2文件系统上的只添加和不可变这两种文件属性,可以进一步提高文件系统的安全级别。一个标记为不可变的文件不能被修改,甚至不能被根用户修改。一个标记为只添加的文件可以被修改,但只能在它的后面添加内容,即使根用户也只能如此。
如果你关键的文件系统安装成只读的,并且文件被标记为不可变的,入侵者必须重新安装系统才能删除这些不可变的文件,但这会立刻产生报警,这样就大大减少了被非法入侵的危险。
3.保护Log文件
当与Log文件和Log备份一起使用时,不可变和只添加这两种文件属性特别有用。系统管理员应该将活动的Log文件属性设置为只添加。当Log文件被更新时,新产生的Log备份文件属性应该设置成不可变的,而新的活动的文件属性又变成了只添加。这通常需要在Log更新脚本中添加一些控制命令。
第二步:系统一定要备份
在完成Linux系统的安装以后应该对整个系统进行备份,以后可以根据这个备份来验证系统的完整性,这样就可以发现系统文件是否被非法窜改过。如果发现系统文件已经被破坏,也可以使用备份来恢复系统。
1.用CD-ROM备份
当前最好的系统备份介质就是CD-ROM光盘,如果对安全级别的要求特别高,那么可以将光盘设置为可启动的,并且将验证工作作为系统启动过程的一部分。这样只要通过光盘启动,就说明系统尚未被破坏过。
如果你创建了一个只读的分区,那么可以定期从光盘映像重新装载它们。即使像/boot、/lib和/sbin这样不能被安装成只读的分区,你仍然可以根据光盘映像来检查它们,甚至可以在启动时从另一个安全的映像重新下载它们。
2.其它方式的备份
虽然/etc中的许多文件经常会变化,但/etc中的许多内容仍然可以放到光盘上用于系统完整性验证。其它不经常进行修改的文件,可以备份到另一个系统(如磁带)或压缩到一个只读的目录中。这种办法可以在使用光盘映像进行验证的基础上,再进行额外的系统完整性检查。
第三步:改进内部安全机制
通过改进Linux操作系统的内部功能,可以防止缓冲区溢出攻击,这种破坏力极强却又最难预防的攻击方式,虽然这样的改进需要系统管理员具有相当丰富的经验和技巧,但对于安全级别要求高的Linux系统来讲还是很有必要的。
1.Solaris Designer
Solaris Designer为2.0版内核的安全Linux补丁提供了一个不可执行的栈,以减少缓冲区溢出的威胁,从而大大提高了整个系统的安全性。
缓冲区溢出预防起来十分困难,系统管理员必须完全去掉缓冲区溢出存在的条件,才能防止这种方式的攻击。正因为如此,许多人甚至包括Linux Torvalds本人也认为这个安全Linux补丁十分重要,因为它防止了所有使用缓冲区溢出的攻击。但是需要引起注意的是,这些补丁也会导致对执行栈的某些程序和库的依赖问题,这些问题也给系统管理员带来的新的挑战。
2.StackGuard
StackGuard是一个十分强大的安全补丁工具。你可以使用经StackGuard修补过的gcc版本来重新编译和链接关键的应用。
StackGuard进行编译时增加了栈检查以防止发生栈攻击缓冲区溢出,虽然这会导致系统的性能略有下降,但对于安全级别要求高的特定应用来讲,StackGuard仍然是一个十分管用的工具。
3.增加新的访问控制功能
Linux的2.3版内核正试图在文件系统中实现一个访问控制列表,这要求在原来的三类(Owner、Group和Other)访问控制机制的基础上再增加更详细的访问控制。
在2.2和2.3 版的Linux内核中还将开发新的访问控制功能,它最终将会影响当前有关ext2文件属性的一些问题。与传统的具有ext2文件系统相比,它提供了一个更加精确的安全控制功能。有了这个新的特性,应用程序将能够在不具有超级用户权限的情况下访问某些系统资源,如初始套接等。
巧御外敌
方法一:将入侵消灭在“萌芽”
入侵者进行攻击之前最常做的就是端号扫瞄,如果能够及时发现和阻止入侵者的这种行为,那么可以大大减少入侵事件的发生率。
Abacus Port Sentry是开放源代码的工具包,它能够监视网络接口,并且与防火墙交互操作来关闭端口扫瞄攻击。
Abacus Port Sentry能够检测到慢扫瞄(Slow Scan),但它不能检测到结构化攻击(Structured Attack),这两种方式的最终目的都是要试图掩盖攻击意图。正确地使用这个软件将能够有效地防止对IMAP服务大量的并行扫瞄,并且阻止所有这样的入侵者。Abacus Sentry与Linux 2.2内核的IPChains工具一起使用时最有效,它 能够自动将所有的端口扫瞄行为定向到Port Sentry。
当然更好的办法就是使用专门的入侵检测系统,但这样的产品一般价格较高,普通用户承受起来有困难。
方法二:登录服务器“单一化”
将系统的登录服务器移到一个单独的机器中会增加系统的安全级别,在大的Linux网络中,最好使用一个单独的登录服务器用于Syslog服务。更安全的登录服务器会大大削弱入侵者透过登录系统窜改日志文件的能力。
1.安全Syslog
即使使用单独的登录服务器,Linux自身的Syslog工具也是相当不安全的。因此,有人开发了所谓的安全log服务器,将密码签名集成到日志中,这会确保入侵者即使在窜改系统日志以后也无法做到不被发现。现在最常用于取代Syslog的安全log服务器称为“安全Syslog”。用户可以从Core SDI站点http://www.core-sdi.com/ssylog处下载这个工具。这个守护程序实现一个称为PEQ-1的密码协议来实现对系统日志的远程审计。即使在入侵者获得系统超级用户权限的情况下也仍然可以进行审计,因为协议保证了以前以及入侵过程中的log信息没有审计者的通知无法被修改。
2.第二代Syslog
另一个取代Syslog的工具是Syslogs-ng(下一代的Syslog)。它提供了密码签名来检测对日志文件的窜改。密码安全登录服务器和远程审计功能可以使入侵者极难进行日志窜改并且很容易被检测到。
方法三:单一登录系统更安全
维护分散的大网络环境中的多个用户账号对于系统管理员来讲是一件非常头疼的事情。现在有一些单一的登录(Sign On)系统不仅可以减轻管理员的负担,而且同时还提高了安全级别。
1.NIS
网络信息服务(NIS)是一个很好的单一登录系统,它是在Sun公司的Yellow Page服务的基础上发展起来的 ,它的基本安全特性不够健壮。NIS的更新版本NIS+,对原NIS的不足进行了改进,现在已经有了用于Linux的NIS+版本。
2.Kerberos
Kerberos也是一种非常有名的单一登录系统。Kerberos V4存在一些安全漏洞,Ketberos V5对此进行了改进。
方法四:用陷阱和蜜罐诱敌深入
所谓陷阱就是激活时能够触发报警事件的软件,而蜜罐(honeypot)程序是指设计用来引诱有入侵企图者触发专门报警的陷阱程序。
通过设置陷阱和蜜罐程序,一旦出现入侵事件,系统就可以很快发出报警。
在许多大的网络中,一般都设计有专门的陷井程序。陷阱程序一般分为两种:一种是只发现入侵者而不对其采取报复行动,另一种是同时采取报复行动。
设置蜜罐的一种常用方法是故意声称Linux系统使用了具有许多脆弱性的IMAP服务器版本。当入侵者对这些IMAP服务器进行大容量端口扫瞄,就会落入陷阱并且激发系统报警。
另一个蜜罐陷阱的例子就是很有名的phf,它是一个非常脆弱的Webcgi-bin脚本。最初的phf是设计来查找电话号码的,但它有一个严重的安全漏洞:允许入侵者使用它来获得系统口令文件或执行其它恶意操作。系统管理员可以设置一个假的phf脚本,但是它不是将系统的口令文件发送给入侵者,而是向入侵者返回一些假信息并且同时向系统管理员发出报警。
另外一类蜜罐陷阱程序可以通过在防火墙中将入侵者的IP地址设置为黑名单来立即拒绝入侵者继续进行访问。拒绝不友好的访问既可以是短期的,也可以是长期的。Linux内核中的防火墙代码非常适合于这样做。