因为近来网路越来越普及,相对的网路安全也越来越被注重,所以转此帖给大家分享
巩固Apache Server的安全
张贴者: Banana
********************************************************************
Apache 伺服器简介
Apache 源自于美国国家超级计算业务中心(NCSA)Rob McCool 所开发的 NCSA HTTPd
网页伺服器,在开放原始码社群的努力下,于 1995 年释出 Apache 0.6.2 版,之后经过
不断改进,目前已发展至 1.3.33 版。由于其稳定、安全、管理容易及免费的特性,让
Apache 逐渐成为网页伺服器的代表,根据英国网路服务企业 Netcraft 之研究结果,以
Apache 作为网页伺服器的网站由 2003 年 1 月的两千两百万个增加至 2004 年 11 月的
三千八百万个,市场占有率也由 62% 成长至 67%,同时由于网路频宽及相关技术的进步,
内容丰富的动态网页逐渐取代了静态网页,有些公司也透过新的网页介面系统取代旧有的
内部系统,使网页服务进一步从网页伺服器延伸到后端资料库,随着线上服务的增加,这
些具有丰富资源的网站伺服器,就成为潜伏在暗处的入侵者攻击之首要目标,而且由于网
页伺服器的特性,其服务对象为网路上任何想要存取网页的使用者,无法像企业内部伺服
器一样藉由适当存取控制的防护措施,将恶意入侵者阻挡在系统外,就因为网页伺服器提
供匿名服务,入侵者可以如同一般网路使用者透过合法的 80 port 连上网页伺服器,防
火墙机制在此种情况下无法发挥效用,因此希望透过介绍一些针对 Apache 网页伺服器的
防护方法,在提供网页服务给使用者的同时做到 Apache 伺服器基本安全的防护,避免资
讯泄漏。接下来我们针对两个方面的防护分别加以介绍。
Apache 网页伺服器的漏洞
虽然 Apache 在 1997 年 1 月之后就没有发现重大漏洞,但如果您主机上执行的
Apache 并非最新版本,就可能存在漏洞,藉由适当修补 Apache 漏洞,可避免恶意入侵
者透过 Apache 程式本身的缺陷,来攻陷网页伺服器。我们以这个两年前存在的漏洞
Apache Web Server Chunk Handling Vulnerability 做为例子来加以说明(请参阅:
http://www.cert.org.tw/document/advisor...sn=TW-CA-2002-151)
,此弱点存在于 Apache 处理 chunk-encoded 的无效要求时,它影响版本 1.3 到 1.3.24
及 2.0 到 2.0.36 的 Apache 网页伺服器,恶意攻击者可透过送出变形的要求给 Apache
伺服器引发缓冲区溢位,利用有弱点的 Apache 取得执行者权限,一般我们是透过 nobody
帐号来执行 Apache,攻击者在攻陷 Apache 伺服器后便可使用 nobody 权限执行命令,
虽然攻击者并无在此次攻击中直接获得 root 存取权限,但是在大部分的系统上若要进一
步获得 root 存取权限只是时间的问题了。此外除了 Apache 伺服器本身安全缺陷所造成
的问题外,由于 Apache 伺服器也可以透过使用「模组」(Module),在网页伺服器上弹性
载入适当模组以提供所需功能,例如:mod_cgi、mod_proxy 等,但有时模组自己本身的
缺陷也会影响 Apache 伺服器的安全,我们透过 Redhat 所发出的 RHSA-2004:063-01:
Updated mod_python packages fix denial of service vulnerability 来加以说明(请
参阅:http://www.cert.org.tw/document/advisory/show.php?twcert_sn=TW-CA-2004-047)
,mod_python 模组使 Apache 伺服器得以解译 Python 语言,但在 mod_python 3.0.3
中发现一个漏洞,将容易导致伺服器受到阻断服务攻击。攻击者可能利用 Apache 程式本
身或其模组存在的弱点来进行入侵动作,这些弱点通常都是广为流传,而且很容易取得现
成的攻击工具,短时间内即可攻陷目标网页伺服器。因此 Apache 网页伺服器的管理员,
应该特别注意 Apache 相关的安全通告,及时进行修补,避免因为疏忽而被攻击者透过漏
洞攻陷网页伺服器,我们可以透过以下的网站来取得 Apache 相关的安全讯息:
http://www.ce...g.tw http://www.ap....org http://www.apachewe...ecurity 当然我们也可以安装最新版的 Apache,以避免旧版 Apache 存在的未修补漏洞。
Apache 网页伺服器安全相关设定
Apache 本身程式上的漏洞可能成为恶意攻击者入侵的途径,但是与 Apache 有关的
安全问题大多来自 Apache 设定错误,导致未经授权的使用者,可以任意存取 Apache
上的资讯资源,Apache 组态设定主要是透过 httpd.conf 来设定,此档案一般会存在
/usr/local/apache/conf 目录下,接下来我们针对以下三个主题来介绍设定 Apache 所
应该考虑的面向:
1.存取权限(Access Rights)
2.符号连结(Symbolic Links)
3.索引(Index)
1.存取权限
由于 Apache 网页伺服器本身的运作及存取权限都是依据 Apache 执行者的存取权限
,我们一般都是以「nobody」帐号执行 Apache,在设定时则尽可能降低其权限,至少比
root 低,当然也可以设定不同的帐号,例如:www 或 apache 来负责执行 Apache,这样
设定是希望万一 Apache 伺服器被入侵,攻击者只能取得一个低存取权限的帐号,另一方
面由于大部分协助 Apache 运作的档案都存在于伺服器的根目录内(也就是 ServerRoot
所指定的目录),所以当 Apache 是藉由 non-root 的使用者来负责执行,其将没有足够
权限来修改相关的 Apache 系统设定档,因此 Apache 伺服器本身无法修改自己的相关设
定,如果没有这样透过这样的方式来执行 Apache,让伺服器本身可以修改设定档,攻击
者将可藉由更改相关设定档的方式让未经授权的使用者存取伺服器的资源或破坏 Apache
伺服器,除了在 ServerRoot 所设定的伺服器根目录外,还有另一个文件根目录(也就是
DocumentRoot 所指定的目录)也需要限制其存取权限,尽可能将其设定为唯读,但是在
某些情况下,可能需要让使用者能够写入或执行文件根目录内的档案,如果遇到这种情况
,我们在文件根目录下另外开一个子目录,将这些档案移到这个子目录中,将这个目录存
取的权限开放出来,透过这样的方式来维持整体的安全性。因为 Apache 执行者权限对伺
服器的安全相当的重要,所以在控管其权限时我们要格外的小心来维持 Apache 本身的安
全。
2.符号连结
符号连结(Symbolic links)是存在于 UNIX 的一个机制,其概念有点类似微软视窗
的捷径,管理者可能为了本身方便而使用符号连结,但是这可能形成安全上的威胁,因为
管理这些符号连结是很困难的一件事,管理者可能建立了大量的符号连结,但是日子一久
可能就会忘记到底存在有那些符号连结,最后要管理这些连结,所以我们需要去确认那些
连结到我们文件根目录(document root directory)是否真的有需要,关闭掉那些不需
要的连结,我们可以藉由下面的指令找出连到特定目录的连结:
find /usr/local/apache/htdocs -type l -print
在 Apache 伺服器中,可以透过关键字 Options 设定 FollowSymLinks,设定这个组态后
,Apache 伺服器会依照符号连结的设定来连结在伺服器上的其他档案,但假如您没有要
使用符号连结,请关闭 Options 以避免相关问题,因为 Apache 这个选项是预设为开启
,假如您要使用符号连结,那您需仔细的对这些符号连结进行确认,避免未经授权的使用
者存取那些不是他权限可以存取的档案。在 Apache 伺服器中还有另一个用来设定符号连
结设定的指令 FollowSymLinksIfOwnerMatch,也是用来允许符号连结的使用,但是它有
更严格的控管,只有在符号连结的拥有者与符号连结所指到的档案拥有者相同时,伺服器
才会使用符号连结,换句话说,使用者只能使用符号连结去连结当其所拥有的档案,假如
伺服器对安全性的要求较为严格, FollowSymLinksIfOwnerMatch 可对符号连结做更严格
的安全控管。对符号连结做仔细的控管可以避免攻击者利用管理者的疏忽,来违法存取其
不应该存取的档案或进行破坏的行为。以下就httpd.conf的预设值加以说明
Ex: …
<Directory />
Options FollowSymLinks <- 删除此设定值
AllowOverride None
</Directory>
…
<Directory "/var/www/html">
Options Indexes Includes FollowSymLinks <- ,删除此设定值
…
</Directory>
…
3.索引(Index)
当 Apache 网页伺服器收到使用者的网页需求后,会分析使用者需求并将需求转换成
对应伺服器上的档案,再传回客户端浏览器。有时候,客户端送出的网页需求所转换出来
的不是档案而是目录,在此种情况之下,Apache 可能会有以下其中一种反应:
1.Apache 会自动找出目录中的特定档案传回给客户端,例如 index.html 使用者不需要
明确指定它,但是 Apache 会自动回传这个档案。
2.Apache 会显示出目录中完整的档案名单。
3.Apache 会显示出错误的讯息,告诉使用者无法存取其所要求的资源。
以上这些情况是一连串的动作,当 Apache 所得到转换出来的结果是目录时,它会先
去确认该目录内有没有目录索引 (DirectoryIndex),如果有列在目录索引内的档案存在,
Apache 网页伺服器会取出第一个出现在目录索引内的档案,处理然后传给客户端。但是如
果找不到列在目录索引的档案,Apache 伺服器会去确认 httpd.conf 内的 Indexes 的设
定状况,有被开启则传回在这目录中档案完整的清单,若没有开启 Apache 则会回应错误
讯息,表示存取目标资源被拒,如果设定上的疏忽,攻击者送出要求目录的需求,而这个
目录又预设开启 indexes,那 Apache 传回目录内档案的完整清单,则可能会导致网页伺
服器上机密资讯的泄漏,虽然攻击者可能无法存取所列出的档案,但是透过档案的名称攻
击者还是可以获得伺服器的相关资讯,因此为了避免伺服器机密资讯的泄漏,我们可以在
httpd.conf 或 .htaccess 目录的设定档内加入 options -Indexes,就可以关闭指定目录
的索引功能。下面以 httpd.conf 的预设值作说明
Ex: …
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
…
<Directory "/var/www/html">
Options Indexes Includes FollowSymLinks <- 修改成-Indexes
…
</Directory>
结论:
除了上述两部分之外还有一些安全相关事项需要注意,分别说明如下:
1.对设定档进行定期备份
在进行每次修改前,都将相关设定档预先保留下来,避免在更改设定档后发生错误,尤
其当 Apache 伺服器服务的使用者众多时,使用者可能没有耐性等您重新设定相关设定档。
2.千万不要泄漏机密资讯
管理者必须对某些关键资讯保密,像管理者密码千万不能与其他人共用,另外像伺服器上
相关的安全措施,也不能轻易泄漏。
3.定期确认系统 log
随时监控存取网站的使用者,了解伺服器曾经做过什么事,是管理员相当重要的例行工
作,例如记录错误讯息的 error_log,其负责记录网页浏览器存取网页时发生的错误讯息,
及 referer_log 记载使用者是透过那个网页连到您的伺服器,可以藉此分析哪些网页参考
到本机上的网页,这些 log 都会提供相关有用的资讯,另外随着时间增加,log 档也会逐
渐累积占据磁碟空间,可以透过 rotatelog 或 logrotate 对 log 档进行管理。
透过上述措施可以维持 Apache 伺服器基本的安全,我们还可以透过像 Nkito
(
http://www.cirt.net/...to.shtml) 等网页伺服器扫描器来侦测 Apache 网页伺服
器的弱点,再设法修补,以维持网页伺服器的安全。
参考资料:
1.Ashok Appu. Administering and Securing the Apache Server. Premier Press, 2002
2.Michael D. Bauer. Building Security Server with Linux. O'Reilly,2002
3.Ben Laurie and Peter Laurie. Apache definitive guide. O'Reilly,1999
4.Stuart McClure, Joel Scambray, and George Kurtz. Hacking exposed: network
security and solutions 4th ed. McGraw-Hill,2003
5.李蔚泽. Apache 2.0 深入研究.碁峰资讯,2003
6.施威铭研究室. Red Hat Linux 架站实务. 旗标,2000