Chinaunix首页 | 论坛 | 博客
  • 博客访问: 101961282
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: LINUX

2008-05-08 10:29:05

 




本地防火墙安全防护


让我们来进一步的了解如何处理防火牆的问题前,涵盖较广泛的安全问题,就是我们的目标之一,我们认为谈论有关于影响防火牆安全性的问题更为重要。因为防火牆是一个不会受到內部因素而被渗透的系统。

防火牆就像其它系统;事实上,防火牆可能只是一个安装了两张以上网络卡(NIC)並同时执行防火牆规则的典型服务器,然而它所处理的工作量相当於档案服务器、防火牆与e-mail服务器的两倍。重点在于,只加入防火牆规则並不能夠完善的保护系统。仍需要採取许多其它的措施以确保系统能夠防护已知的安全风险。


本地防火牆安全防护方式分成下列几项:

⒈ 修补系统漏洞並将系统维持在已修补的状态。

⒉ 关闭不需要的服务。

⒊ 以最低的权限执行服务。

⒋ 使用chroot服务。(这是一个将服务以它自身的独立文件系统为身分执行的程序,如果严格执行,攻擊者便不容易逃脫)

⒌ 删除所有不必耍的软件。

⒍ 安装安全防护工具以帮助管理安全性选项並帮助检测入侵行为。

⒎ 将事件记錄到远程的受信任系统如同记錄到本机的syslog子系统上。

⒏ 安全的设置软件o

⒐ 尽可能的使用強化过的核心,例如grsecurity、openwall、SELinux、LIDS与其它的修补程序。

⒑ 测试系统的安全性並改进。


这些是整体概念,如果有更好的实行方式,那麼选择适合你的方式。安全防护是复杂的程序,而不同的情況有不同的方式。


将软件版本维持在最新状态的重要性

如果你还沒从媒体或不同的mailing list流传的故事中,学习到保持系统在适当修补与最新版本状态的重要性,那麼你必须养成随时查看制造商的信息,並取得最新修补,而且维护產品的各种安全列表在最新状态的习惯。每天都有许多可能会对你造成影响的新弱点被发现。如果要減低受到入侵的威胁,那麼便需要将它以高优先权的优先顺序列入信息科技规划中。

如同先前所述,计算机產品、硬件与软件都是人类开发的,而人类並不是完美的生物。他们开发出有许多弱点的软件而且不断的在更新版本,更恐怖的是这个过程一直持续著。硬件也不例外。尽快的安装制造商最新发佈的安全修补程序,为你的硬件做安全更新与其它的修正程序是重要的。有些情況下,我们推荐在更新档刚发佈时就将它安装。这並不一定有作用,因此必须要评估企业中每次软件变更所伴随的风险与防护弱点的权重,这些弱点是否让你的企业容易遭受攻击,所修正的问题,以及它们是否產生了新的问题。


等待这个处方是否真正解決了问题並不能算是耽搁。真正的坏消息是,每当新的修正版本释出时,图谋不轨的人便设计了一个在几天內就会散佈在国际互联网上的探测程序。在某些情況下,修正程序可能修正了一个坏人比好人先发现的弱点,並且已经将修正程序广为散佈。修正程序的发佈与该程序在网络上散佈,这两者间的安全间隔有时几乎不存在。有几个探索「快闪式攻擊(zero day)」问题的安全防护方式一你沒有机会维持系统在最新的状态,而假定系统拥有额外尚未被发现的弱点。我们会继续探索在Linux上可以取得的技术。其中之一是在2.6版核心中的新SELinux扩展部分。

SELinux赋予系统管理器定义系统上执行软件的policy与用户角色的能力。我们使用SELinux与其它的強化工具,最好是搭配其他工具才能尽量減少臭虫,而我们已经知道臭虫的厉害,即使有这些工具的帮助,你仍然耍持续地更新系统。

好消息是Linux上有出色的工具将更新程序自动化。一些较知名的工具,例如apt-get、emerge、red carpet、open carpet、yum、up2date、autorpm等。大部份的工具可以被设为cronjobs或者已经具备自动下载最新更新程序的功能,有些还能夠自动进行安装。我们发现这些出色的工具在大部分的情況下可以正确的自动执行工作,但是请注意一有些时候修补程序反而会造成不兼容的情形。这种情形相当罕见,但是它还是有一定的风险。如果修补程序管理系统安装了错误的更新档,你必须有所準备。新版的glibc造成系统不能开机的事件可以做为借镜一即使是更新程序也可能会有臭虫。

如果沒有把握,在执行任何自动化程序前先备份系统。应当将备份系统纳入风险管理程序。在上述glibc的例子中,有少数几个系统会受到这个臭虫的影响,但幸运的是系统已经作了备份,因此只需要将旧版的系统恢复並且安装修正过后的glibc便可以解決问题。


下面是一些Linux上常见的更新程序与软件管理工具的操作說明


yum

yum是一个自动化的组件管理工具,它将系统上现有的rpm系统最佳化以便进行组件管理,並提供自动下载组件、整合测试、失败恢复与其它有用处的网络功能。yum原本是Yellow Fog Linux的一部份,现在被使用在许多不同的Linux发行组件上,例Redhat、Suse、Fedora等。因为yum的使用方式以及将新的软件加入配置文件是相当容易的,因而受到亲睐。yum也包含了gpg/pgp签章验证与下载站台失败的处理方式以便确保能夠下载更新程序,假如站台发生问题,更新程序的下载並不会受到影响。

不使用cron也能夠执行yum,或者使用一些內含在yum中的init.d指令码程
式自动将yum加入cron程序。


下面是yum cron程序的样例,它尝试在每天3:00am时下载並且安装所有新的系统更新档。-y参数只是告诉yum对於所有可能询问的问题都以yes来答覆。upgrade参数则是告知yum只更新当前系统上的软件,而不要安装任何已发行的新软件。

0 3 *** /usr/bin/yum upgrade -y


你可以在下列网站找到yum:
http//以及


red carpet

red carpet本来属於Ximian,现在已是Novell的组件管理系统,red carpet是高级的组件管理系统,它具有本机的组件管理系统(例如rpm)与远程主机管理的功能、一个花俏的图形界面、整合验证、站台失败恢复与一个主从式模型。

这个奇妙的软件让你能夠在远程控制所有执行了red carpet的主机,並且在这些主机上存取/删除/安装软件。如果不需要远程控制的功能也能夠以单机模式执行,利用指令模式也能夠作到图形界面所提供的功能。

例如,利用命令可以吩咐red carpet升级系统上所有的软件:

rug up -y

或是旧版的red carpet用户端:

rc up -y


如同使用yum,注意到red carpet使用通讯管道来控制它所要管理的软件。必须设置red carpet与系统的通讯管道以便下载並监控软件的更改。

red carpet同樣也不会自动安装更新程序,你需要设置crobjob来做这项工作。下面是一个利用crobjob的例子:

0 */12*** /usr/bin/rug up -y

这会告知red carpet每12小时便执行更新程序並且下载与自动安装所有更新程序,red carpet並不会删除任何软件,如果需要删除软件,red carpet将不会安装更新程序,因此请勤於查看你的电子邮件是否有这类型的错误消息。如果要允许red carpet删除软件,只要加上-r参数便可。

rug up -y -r



up2date

up2date是Redhat更新程序管理系统的一部份,它也对系统中的组件管理系统(在Redhat中为rpm)作了最佳化,以便执行实际上的组件管理,up2date提供了网络结构与通讯管道管理以便下载系统需要的修补程序,up2date也是一个subscription-based的系统,在较早版本的Redhat中,沒有subscription的系统在几天后会停止运作。


up2date的语法与yum及red carpet类似,要安装更新程序便执行下列指令:

up2date update

与前面提到的工具相同,利用cron也可以执行这项工作:

0 3 *** /usr/bin/up2date upgrade -y

emerge是Gentoo系统的一部份,也是Gentoo应用程序集的一部份,它相当类似於BSD的应用程序集,emerge是Gentoo上的组件管理、下载整合检查、编译、安装的程序。当前只被使用在Gentoo系统,但我们不知道它为何不能被应用在其它系统上。当前Gentoo也是借由下载原始码並针对系统即时编译更新程序,因此利用emerge将不需要下载预先编译过的执行档:你将要执行完整程式的编译。除非对应用程序集很熟悉,我们並不推荐完全使用emerge的自动化程序,而且系统会花费大量的运算时间在编译新的更新程序上。

对gentoo系统而言,我们只对emerge程序的同步阶段进行自动化,以便在Gentoo原始程式库中有任何的更改就会通知我们。接著手动选择Gentoo系统中我们所要下载、编译与安装的组件。这几乎与其它的组件管理系统不相干,因此你需要分配资源与时间来监控Gentoo原始程式库上的任何更新一接著要由某人来检閱更新並监督编译程序。

在使用Gentoo时,emerge有三个你必须熟悉的重要指令,第一个指令为sync。


emerge sync

这告诉了emerge对本机的应用程序集与远程原始程式库作同步的动作。如果有任何改变将会通知你,並且下载了描述修补程序的emerge文件到emerge系统,以及其它下载所需要的信息,sync程序将会告诉你有多少新的代码。记著一新加入的代码不一定表示值得更新。有些可能还不是稳定的修补程序,或者是你不会想使用的更新版本程序(例如apache 1.x与2.x)。

emerge -up world

在这个例子中,有两种新的更改,-u与-p。-u是告诉系统无论对象为何都要执行更新程序。在这个例子中,「world 」或是整个系统便是对象。而-p则告诉emerge更新整个系统。在更新任何东西前推荐先作这个步骤,如此一来我们便可以看到所有新的修补程序与系统相关的软件,並对我们要更新/安装的东西作決策。最后的指令是告诉emerge进行更新/安装新软件的动作。

emerge

例如:

emerge openssh

emerge接著会检查本机的应用程序集,找出openssh的纪錄,确定最新的版本的位置,下载文件,检查系统中可能需要被更新、下载的关连性文件,编译所有的程序,删除旧程序,並且安装所有已经更新的代码。和只能安装的二进制档不同,这个程序会非常耗费时间与带宽。


当然,利用emerge及许多指令可以完成许路复用作,但是主要有三点。先前曾经提过,我们並不推荐将全部过程都以自动化方式来执行。如果要自动执行某些工作,我们只推荐使用sync,同樣的,请不要设置emerge sync在一天內执行多次,除非已经作了最新的备份动作。

0 4 *** /usr/bin/emerge sync



apt-get
apt-get是Debian发行组件的一部份,但是也可以用於其它的平台,例如Redhat。它的用法也与yum,up2date相当类似,与red carpet也有部份雷同,它会检查gpg/pgp签章並且提供失败恢复及其它有用的服务。

你将会察觉许路复用具的语法都相当类似。如果使用apt-get来更新系统,只需要加上apt-get的update指令:

apt-get update

你也可以利用crobjobs来排订自动执行的程序:

0 3 *** /usr/bin/apt-get update -y

使用red carpet时的-y参数告诉apt-get对於所有询问的问题都以yes来回复,例如apt-get是否要安装新的更新程序,apt-get与Debian一起发行,而在与http://的网站上也有Redhat、Fedora与Yellow Dog Linux的apt-get rpm文件。

可能还有其它的修补程序工具,无论有多麼惊人的功能,还是可能会遭遇到失败的情況。如果已经有运作正常的修补程序系统,那麼尽可能熟悉它的操作。目的是要将更新系统变成系统生命週期的标準程序,而一个简单的方式便是利用自动化程序。人们有时候会忘记,但计算机不会。利用crobjob来维持最新的状态,如此一来便不需担心会漏掉任何东西。



过於信赖修补程序

在讨论关於系统修补与定期执行这项工作的重要性时,我们必须提醒你,修补程序並不是万灵丹。不仅是因为你的系统仍然有很多安全性的漏洞在将来必须要修补,而且你所使用的程序在本质上已经有缺陷,所以不能完全地防护你所希望管理的风险。例如,如果关心e-mail的保密问题,在不增加额外的安全防护措施的前提下,修补e-mail用户机也不能达到对e-mail加密。简而言之,不能因为使用的软件沒有缺陷就断定它沒有任何的风险。

在前面我们已经大略提过,有许多在广泛使用软件中,「坏人」比好人先发现了未知的弱点的例子,例如你是后者而厂商为前者。例如,在2004年前期,有几个非常高知名度的网站因为rsync的未知弱点而被入侵。设计该修补程序的人可能就是找出该缺陷的骇客。不能因为不知道有缺陷的存在就认为沒有缺陷。就如Carl Sagan說的:「缺少证据並不代表沒有证据」,假定当你修补系统时只是作了最小需求的安全防护是聪明的。这只是修补系统的基本课程。


关闭服务

如果不需要这项服务,那麼就把它关闭。这句话你可能已经听过了。我们必须加上这句一如果不能证明你需要这项服务,那麼就把它关闭。与我们合作过的许多客戶都坚持他们需要那项服务,至少他们这麼觉得。他们认为既然服务器有提供,那麼那个服务一定是必要的。

许多服务器產品中都缺省打开了许多服务,然而这对大多数的用户而言是沒有用处的。如果不确定是否需要该项服务,那就关闭它。如果关闭它之后沒有发生问题,那麼这项服务对你来說就不是必要的。我们找不到更好的方式来決定是否关闭一项服务。如果用户沒有抱怨,你便可以将它打入冷宮,等空閒时再研究它,並且可以专注在用户确实需要的服务上。感到疑问时就关闭它。



使用TCP Wrappers与防火牆规则

在系统的安全防护方面,哪一章可以作为利用TCP wrappers与防火牆规则来防护所有执行中的服务的提示呢? 对於不熟悉TCP wrappers的人来說,它可以让你能夠监控並且过滤通过IP地址或主机的TCP连接。举例来說,假如要只允许特定主机能夠创建与防火牆的SSH连接。当然你利用防火牆规则来控制,但是当防火牆上尚未执行任何的防火牆规则前,或是要过滤掉SSH端口上多余的连接。答案很简单 - 使用TCP wrappers。

在深入探讨如何利用SSH完成这项工作前,先来复习TCP wrappers的內容。TCP wrappers被用於像是inetd或xinetd的「超级服务器(super server)」上。

这些超级服务器处理了所有进入主机中受到它们管辖的服务器的连接,像telnet、ftp、gopher和其它的服务。TCP wrappers会在真正的服务器被喚起前,先喚起超级服务器来过滤这些连接,因此造就了「TCP wrapper 」这个名称。

Wrapper放置在被设置要接受防护的服务周围。下面是一个inetd.conf的样例:

telnet stream tcp nowait root /usr/sbin/tcpd in.telnetd

这說明了inetd「超级服务器」如何喚起telnet daemon。TCP wrapper首先由/usr/sbin/tcpd指令所喚起。对xinetd而言,tcpd会自动的被任何的TCP服务呼叫,除非你在xinetd服务的配置文件中将这项功能关闭。

对於支持TCP wrappers的服务,例如ssh,並不一定会被编译成daemon。要知道在sshd函式库中是否包含TCP wrapper的支持,可以用这个指令:

ldd /usr/sbin/sshd

这个指令会列出sshd的执行档所连结的函式库。你需要注意的是libwrap函式库,而Idd的输出格式如下所示:








输出结果可能会有些不同,但是不要担心。在这个例子中,在第一行中会发现sshd的函式库与libwrap函式库连结:

libwrap.so.0 => /usr/lib/libwrap.so.0 (0x20706000)


因此我们可以推断出sshd的函式库将会被TCP wrappers所保护一如果遵循这个设置。这个练习的唯一重点在於使用Idd来检验执行档以得知执行档是否与TCP wrappers函式库连结。如果沒有libwrap函式库,或是inetd或xinetd来包装服务,TCP wrappers将不会与服务一同运作。

现在你已经知道如何喚起TCP wrappers及测试服务是否支持TCP wrapper,接下来要进行设置使用TCP wrappers的服务。当受到TCP wrappers保护的服务接收到连接时,wrapper首先会查看两个文件以決定IP是否被允许与服务连结。这两个文件为/etc/hosts.allow与/etc/hosts.deny。hosts.allow文件列出了可接受的服务、主机、IP地址或网络。而hosts.deny服务也含有相同的信息,不过是用在拒絕访问的用途上。下面是这些文件的样例:







在这个例子中,我们忽略了一些正确的设置,而错误的设置造成了所有主机都被拒絕访问所有服务的错误。幸好TCP wrappers在处理hosts.allow与hosts.deny文件中设置若遇到冲突时,会以hosts.allow中的设置为优先处理。

它的设置格式很简单:

< service name >:< IP, hostname, or network >,< IP, hostname, or network >,< IP, hostname, or network >


在服务名称之后可以加入许多笔记錄。有一个保留字,ALL,值得在本章中提及。它代表的就如同字面上的意义一所有服务或所有主机,根据它被使用的位置而定(hosts.allow或hosts.deny)。你可以创建一个与所有服务相关的规则,例如,假设从127.0.0.1可以和所有的TCP weapped服务创建连接,你可以在hosts.allow文件中加入下列设置:

或是要让所有的主机都可以连接到sshd服务,你可以在hosts.allow文件中加入下列设置:

如你所见,格式相当简单並且容易閱读。即便使用了防火牆规则,我们同樣建议使用TCP wrappers,假设在执行防火牆维护工作时不小心犯了错,这些服务也不会因此而暴露在外。记住多层的安全防护絕对比单一的防护要来得有效。

最后,如果使用了TCP wrappers,我们並不推荐利用主机名称进行过滤的动作,因为DNS响应可以被偽装。相反的,在使用TCP wrappers时,试着使用IP地址来允许访问服务的主机。

因为正在执行防火牆程序,提醒你需要套用防火牆规则来保护正在防火牆主机上执行的服务或许有些愚蠢。就某种意义来說,这似乎有点多余,但是我们要指出一个曾经在iptables-based防火牆上曾经出现的简单错误一令人困惑的INPUT与FORWARD规则。简单的說,iptables可用的规则有INPUT、OUTPUT与FORWARD。在后面的章节我们将会做更深入的研讨,这裡提出的目的在於我们对於保护防火牆主机本身的INPUT规则感到兴趣。FORWARD规则只应用在通过防火牆的网络数据,而OUTPUT规则则是影响从防火牆所传送出去的网络数据。INPUT规则只与进入防火牆的网络数据有关。

因此,要保护防火牆上的ssh服务,只接收10.10.1.100主机的连接,你可以使用下列规则:

iptables -A INPUT -p tcp - -dport 22 -s 10.10.1.100 -j ACCEPT

而下面的规则则拒絕了防火牆ssh端口上的所有其它网络数据:

iptables -A INPUT -p tcp - -dport 22 -s 10.10.1.100 -j DROP


在第6章及第7章将会深入探讨iptables的语法。这一章你所需要关心的只有这个指令:

-p tcp

这定义了IP通讯协议,在前面的ssh例子中,因为ssh是在TCP通讯协议上运作,所以我们使用TCP通讯协议。TCP通讯协议稍后会讨论。


-s 10.10.1.100


-s参数定义了连接的来源,10.10.1.100。它可以是IP地址或网络地址,例如
10.10.1.0/24。如果要允许从10.10.1.0/24地址的所有连接,例如10.10.1.101或10.10.1.200或10.10.1.0/24其余网络中的地址,你可以使用下列指令:

-s 10.10.1.0/24

最后这个参数定义了目的端端口:

- -dport 22

这告诉iptables只将规则套用在防火牆的22端口上的连接。这是相当简单的规则,你可以利用这些参数与在稍后文章中讨论到的技术扩展用途。

举例来說,你可以对特定界面套用这项规则,例如eth0或ethl,以便借由对INPUT与FORWARD规则加上 -i 参数,以及对OUTPUT与POSTROUTING规则上加上- o 参数,来更进一步控制谁能夠访问这项规则。-i参数定义了进入介面卡的规则,而-o参数则是定义离开介面卡的规则。因此,在下面的ssh规则中,如果要限制ssh的访问只有10.10.1.100主机,而且确保这些连接只能从ethl界面卡进入主机,便要在ssh规则中加上-i ethl的参数。

iptables -A INPUT -i ethl -p tcp - - dport 22 -s 10.10.1.100 -j ACCEPT

推荐将所有的规则定义成个別的介面以便在安全模型中加入额外的安全防护。IP地址可以被偽装,而人们也常在规则的设计上犯下错误。借由加上额外的安全防护及定义规则被应用的介面有助於检查规则的问题,並让防火牆与网络安全能更有保障。

以最小的权限执行服务

下一个重要的步骤在於确保服务在执行日寺,只以最低限度的权限来执行。这表示对於大多数的服务而言,它们不能以root的身分执行。幸好,许多Linux厂商在最近几年已经将服务的执行权限设置为非特殊权限的用户,並且更进一步的以受限制的文件系统来执行服务,例如chroots。







你会发现我们推荐以不同的用户来执行不同的服务。过去都是以常见的非特殊权限的nobody用户的身份来执行服务,现在这个方式並不推荐使用。这就象是把所有的蛋都放在一个篮子一樣。如果有人以nobody的身分入侵,那麼他便拥有访问系统上所有以nobody身分执行服务的权力。现在的目标是要划分每项服务,使它们以独有的用户身分来执行。在网站上有提供以最低权限来执行服务的方法与說明。

限制文件系统

除了管理文件权限及确保适当设置重要的文件与目錄的权限之外,我们也推荐将某些文件与程序分离,並将它掛载於特殊的文件系统上。

我们推荐的第一个方法为使用chroot,它是「change root 」的缩写。chroot只是为了某个程序将根目錄暂时更改。例如,如果创建了一个 /chroot/named的目錄,並且对程序执行了chroot指令,那麼该程序便会将 /chroot/named目錄视为它的目錄,而且不能访问这个目錄之外的其它文件。基本上它将该程序「限制」在chrooted文件系统下。在这裡必须暂停並且警告你在Linux kernels中普通的chroot並不是絕对安全的。仍然有许多已知的方式可以在一般的Linux kernel下跳脫chroots的限制。

好消息是有几个Linux的安全性修补程序可以修正这个漏洞,例如openwall()与grsecurity(www.grsecurity.net),但是如果核心沒有安装这些修补程序或是其它的修改,chroot是不安全的。话虽如此,但就算只是普通核心的chroot,仍然在某些方面提供了足夠的安全性,因此尽量使用chroot来执行程序,如果可以的话,也推荐你更新核心。同樣的也检查Linux厂商是否有发佈防堵chroot漏洞的強化版核心。

下一个保护文件系统的安全措施是将所有的suid文件搬移到给suid文件使用的特殊文件系统。如果不明白suid与sgid文件是什麼,它们只是用来设置告知Linux核心以不同或较高权限执行程序的特殊文件系统位。


举例来說,passwd指令有设置suid位位,而文件是由root所拥有。这表示在执行passwd指令时,OS将会对程序「设置uid 」或suid为文件的拥有者 - oot。这表示passwd在执行时就像是root在执行指令一樣,给予该程序修改/etc/passwd与/etc/shadow文件的权限。这裡的安全顾虑在于,如果passwd指令或其它的suid指令有瑕疵时,可能会因此洩漏了root的权限。sgid文件的作用也很相似;当文件中的sgid位位被设置时,它会对程序「设置群组」。这
与suid类似,程序将会以该文件所属的群组权限来执行。基本上,每个suid与sgid文件都是系统中的潛藏漏洞,因此谨慎的检查这些文件,只将suid与sgid的文件权限给予受信任的用户,並且在不需要这些文件后,将suid与sgid档案刪除。

在分离了suid跟sgid文件后,将它们迁移到它们特有的文件系统,並在/etc/fstab文件将suid位位设置为引导。接著设置所有其它的掛载点为nosuid。








借由这项操作可以将额外的文件系统设置成不允许执行suid与sgid文件。这也可以用来评估系统上有哪些suid/sgid文件,並且刪除不需要的suid与sgid文件。你可以把系统上的这些文件作成纪錄並且删除不使用的程序suid与sgid位元。


需要安装的安全性工具

不用說这是一个所有的清单一列出了可以满足执行程序需求的一般类型工具。


记录监控工具

分析防火牆系统纪錄並检测可疑事件的工具。有些较优良的工具可以分类並且划分事件的优先权,以帮助辨识系统是否遭受攻击,或是一般可疑的行为。

我们最常用的工具有两个:Iogwatch与Iogcheck。Iogwatch现在已经被包含在许多Linux
发行组件中,它让你能夠查看系统活动的每日摘要。Iogwatch根据扩展文件名便能理解系统上不同应用程序的纪錄格式,例如sudo或ssh 。如果系统上你所要监看的应用程序沒有扩展文件名,Iogwatch可能就会错失一些该应用程序的重要信息。

另一个工具是Iogcheck,是由Craig Rowland所设计的。 Iogcheck会记錄所有你可能忽略的消息。这麼一来可能会產生大量的警告消息,但卻保证你将不会错失任何消息,而Iogcheck在安装时,会缺省安装许多的regular expression以便減少无谓的带宽浪费。



网络入侵检测

这可能不属於防火牆讨论的范围,但是防火牆主机也是执行NIDS或网络入侵检测系统的理想位置,防火牆有足夠的磁盘空间来记錄,並且具备足夠的内存与CPU运算能力来处理NIDS的额外运算负担。一般說来,防火牆可以用来查看来自於许多网络並通过防火牆的数据。例如,许多防火牆至少内置三个网络介面来允许內部、外部与DMZ的网络数据。如果在另一部系统上执行NIDS,你可能需要三部NIDS主机才能查看这些数据。利用snort与其它的开放原始码NIDS工具,现在可以免费的执行任意数量的高质量NIDS。

与其它服务相同,确保NIDS所有组件是以非特殊权力的用户身份在执行,並已经正确的执行过chroot。snort内置了这些功能,和其它的开放原始码NIDS所作的相同。一个NIDS並不代表它沒有任何弱点。许多商业用与开放原始码的NIDS都有安全性缺陷,这可能会连累执行NIDS的系统。因此再次強调,以最基本的权限来执行,並且将它们以chroot限制。

在可以找到snort。在也可以找到其他的入侵检测软件。


主机入侵检测

下面这些工具的主要功能並不是著重於找出网络发生的事件,而只将焦点放在系统上所发生的事件。这些工具可能会查看系统上装入的模块、登录的用户、这些用户登录的时间以及他们的登录地址。

其它的工具则是寻找文件系统以找寻已知的入侵记号、具有错误权限的文件、设置不当的程序以及其它问题所產生出的行为。你可能需要执行这些工具以便获得你所需要的功能。这些只是清单的一部分。实际上还有许多出色的HIDS工具与產品。


TIGER

TIGER是一组Bourne shell scripts、C程序与数据文件,它被用来执行Unix系统的安全性检查。它的检查结果可以用於系统分析(安全性检查)与即时、主机入侵检测的用途(http://www.tigersecurity.org)。


rkhunter

这个工具用来扫描rootkits、backdoors 与local exploits
()


chkrootkit

chkrotkit是用来检查本机rootkit征兆的工具。它也被整合在TIGER较新的版本中()。



TITAN

TITAN是一些程序的集合,它的每一个程序都利用Unix系统特定的安装或设定档方式来修正一个以上的安全性问题。它由Brad Powell在Bourne shell下开发,而它简单的模块设计方式让任何人都能夠设计並加入shell script或程序,而且可以完整的了解系统的內部运作方式。

TITAN並不是用来取代其它的安全防护工具,而是与它们搭配使用。它可以简单的将一个新的立即可用的系统转換成防火牆系统或是注重安全的系统。概括的說,它尝试帮助改进系统的安全性()。


samhain

samhain是一个Unix与Linux上的开放原始码文件整合与主机入侵检测系统()。


tripwire

tripewier是一个文件整合检查工具。它可能是一个最知名的HIDS工具。tripwire基本上会替系统上正在监看的文件產生一个hash、或是checksum。如果文件发生改变,tripwire会通知你这项改变。tripwire有开放原始码与商业版本。


AIDE

AIDE(高级入侵检测环境Advanced Intrusion Detection Environment)是一个代替tripwire的免费开放原始代码。它与tripwire非常类似,甚至已经被包含在一些Linux发行组件中。它是一个用来產生文件的hash与checksum工具,通常会定期的检查这些文件以得知是否有任何变化。可以从它的官方网站取得软件。


远程登录

你可能想在另一部受信任的主机上保留一份即时防火牆纪錄的副本。如果想要将纪錄使用在法庭或是作为证据的用途上,那麼这个系统就不应该执行其它任务。法官与律师开始学习技术並理解到数位证据是如何的脆弱,如果想依靠系统上的纪錄副本,你会遇到一个严重的问题。纪錄可以轻易的被修改,删除信息,加入错误信息,或是任何的信息。在另一部系统上保存一份纪錄副本。要达成这项工作的一个方式为在syslog.conf文件中设置Ioghost,並且设置远程系统接收这些纪錄。对大多数使用syslog的Linux系统而言,远程主机必须以syslogd搭配 -r参数来执行,以便设置syslogd接收UDP通信端口514的syslog数据。



正确的设置你所使用的软件

大多数的软件都打开了许多功能,並且几乎都设置在最偏激的模式下运作。假设最坏的情況一所有在防火牆上执行的服务与软件都设置成不需要拥有系统上的帐号口令就可以取得完全访问系统的权限。例如sshd,一个Unix系统管理员使用的工具,很少被设置为最安全的设置。Sshd总是被设置成允许通讯协议 1的连接,它有严重的安全性缺陷一可以使用root登录、以非特殊权限的用户身份执行並且给予用户环境的设置值。

这些对防火牆来說都是坏消息。请弄清楚这些软件的用途,並且确定你已经作了正确的设置,如果有疑问那麼就把它弄清楚。


使用強化过的核心

一般的Linux核心是开放原始码发展的一个奇蹟,但一直一来都缺乏一个正确的安全模型。尤其是在2.4版核心中的安全模型只能满足一个不是以安全性为主要考量的系统、以及一个只以安全性为系统主要目的的防火牆。简单的說,一般的核心並沒有真正的安全模型。

在2.6版核心中,这些受信任的改进,被称为SELinux或是安全性強化Linux,现在已经包含在一般的核心中。据NSA所說,SELinux依据NSA提供了「...灵活代理访问控制权被整合加入了核心的主要子系统。这个系统提供了一个根据机密与完整需求为基础信息的分离执行机制。这使得窜改与跳过应用程序安全机制的威胁可以被对付,並且限制了这些恶意或有缺陷程序会对系统造成的伤害程度」。你必须检查系统的这些功能是否被编译成缺省使用。
针对2.4版的核心也有SELinux的修补程序,因此你可以在2.4版核心上使用。

除了SELinux之外,我们特別喜爱将grsecurity的修补程序与SELinux的2 .6版核心搭配;或是在2.4版核心加上grsecurity的修补程序,另一个由Brad Spengler带领的核心安全防护的补強专案,还包含了chroot的加強版、IP堆栈的加強版、堆栈溢位防护、地址随机处理、受信任路径的执行以及真正的RBAC与MAC安全模型。这两种组合的运作令人满意,並提供许多额外功能,为了修补2.6版核心与grsecurity 2.6版的功能所做的努力是值得的。

大家可以在http://www.grsecurity.net的网站上找到grsecurity的修补程序。你也可以直接到NSA(提供SELinux上改进的资金组织)找最新的修补程序、文件,以及在网站找加入SELinux信件列表的指示。


其它強化的步骤

删除任何不需要的软件。其中之一便是删除编译器。不管删除了哪些软件,減少系统上需要修补程序的软件数目,这樣也可以減少系统的弱点。系统上安装的软件越少,暴露在外的弱点也越少。


最后,不要以为系统已经完美无缺了。接著要测试系统,看系统是否能夠防御攻击。不要认为系统已经做好了完整的修补或是一些有用的工具都已经正确无误的被安装。如果你真的想测试系统,应该由其它人来进行测试。将系统测试交给可信任的同事或是雇用安全检查员来进行。



出处:南方Linux
阅读(596) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~