明輝手游網(wǎng)中心:是一個免費提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

Apache服務(wù)器的保護(hù)

[摘要]作者:nixe0n 一. 綜述   本文將討論UNIX平臺下,Apache WEB服務(wù)器安裝和配置的安全問題。我們假定閱讀本文的系統(tǒng)管理員已經(jīng)針對自己站點的情況選擇了相關(guān)的模塊,并且能夠進(jìn)行配...
作者:nixe0n

一. 綜述

  本文將討論UNIX平臺下,Apache WEB服務(wù)器安裝和配置的安全問題。我們假定閱讀本文的系統(tǒng)管理員已經(jīng)針對自己站點的情況選擇了相關(guān)的模塊,并且能夠進(jìn)行配置、創(chuàng)建和排除故障。本文的主要目的是幫助你簡歷一個安全的Apache歪脖(web :P)服務(wù)器。

  在眾多的Web服務(wù)器產(chǎn)品中,Apache是應(yīng)用最為廣泛的一個產(chǎn)品,同時也是一個設(shè)計上非常安全的程序。但是,同其它應(yīng)用程序一樣,Apache也存在安全缺陷。本文主要針對三個安全缺陷進(jìn)行討論,包括:使用HTTP協(xié)議進(jìn)行的拒絕服務(wù)攻擊(denial of service)、3緩沖區(qū)溢出攻擊以及被攻擊者獲得root權(quán)限。注意:合理的配置能夠保護(hù)Apache免遭多種攻擊,但是在網(wǎng)絡(luò)層上的拒絕服務(wù)攻擊則不是調(diào)整Apache的配置所能夠防止的。本文所涉及的是使用HTTP(應(yīng)用層)協(xié)議進(jìn)行的拒絕服務(wù)攻擊。

二. Apache的主要缺陷

  · HTTP拒絕服務(wù)

  攻擊者通過某些手段使服務(wù)器拒絕對HTTP應(yīng)答。這會使Apache對系統(tǒng)資源(CPU時間和內(nèi)存)需求的劇增,最終造成系統(tǒng)變慢甚至完全癱瘓。

  · 緩沖區(qū)溢出

  攻擊者利用程序編寫的一些缺陷,使程序偏離正常的流程。程序使用靜態(tài)分配的內(nèi)存保存請求數(shù)據(jù),攻擊者就可以發(fā)送一個超長請求使緩沖區(qū)溢出。比如一些Perl編寫的處理用戶請求的網(wǎng)關(guān)腳本。一旦緩沖區(qū)溢出,攻擊者可以執(zhí)行其惡意指令或者使系統(tǒng)宕機。

  · 被攻擊者獲得root權(quán)限

  Apache一般以root權(quán)限運行(父進(jìn)程),攻擊者通過它獲得root權(quán)限,進(jìn)而控制整個系統(tǒng)。

三. 獲得最新的Apache

  使用最安全版本對于加強Apache Web服務(wù)器的安全是至關(guān)重要的。

  你可以從Apache的官方網(wǎng)站http://www.apache.org獲得Apache的最新版本。

  配置文件的保護(hù)

  Apache Web服務(wù)器有三個主要的配置文件,它們一般位于/usr/local/apache/conf目錄。這三個文件是:httpd.con、srm.conf和access.conf。這些文件是整個Apache的控制中心,因此需要對三個配置文件有所了解。httpd.conf文件是主配置文件;srm.conf允許你填加資源文件;access.conf設(shè)置文件的訪問權(quán)限。這些文件的配置可以參考http://httpd.apache.org/docs/mod/core.html。

 服務(wù)器訪問控制

  access.conf文件包含一些指令控制允許什么用戶訪問Apache目錄。應(yīng)該把deny from all作為初始化指令,然后使用allow from指令打開訪問權(quán)限。你可以允許來自某個域、IP地址或者IP段的訪問。例如:
  
  
  order deny,allow
  deny from all
  allow from sans.org
  
  

密碼保護(hù)

  使用.htaccess文件,可以把某個目錄的訪問權(quán)限賦予某個用戶。系統(tǒng)管理員需要在httpd.conf或者srm.conf文件中使用AccessFileName指令打開目錄的訪問控制。以下是一個.htaccess示例文件:

  AuthName PrivateFiles
  AuthType Basic
  AuthUserFile /path/to/httpd/users
  require foo <---一個有效的用戶名

  然后,使用如下命令填加一個用戶:

  # htpasswd -c /path/to/httpd/users foo

  Apache日志文件

  系統(tǒng)管理員可以使用日志格式指令來控制日志文件的信息。使用LogFormat "%a %l"指令,可以把發(fā)出HTTP請求瀏覽器的IP地址和主機名記錄到日志文件。出于安全的考慮,你至少應(yīng)該那些驗證失敗的WEB用戶,在http.conf文件中加入LogFormat "%401u"指令可以實現(xiàn)這個目的。這個指令還有其它的許多參數(shù),用戶可以參考Apache的文檔。另外,Apache的錯誤日志文件對于系統(tǒng)管理員來說也是非常重要的,錯誤日志文件中包括服務(wù)器的啟動、停止以及CGI執(zhí)行失敗等信息。

  安全相關(guān)的指令

  在Apache配置文件中,有一些安全相關(guān)的指令可以使用。這些指令的詳細(xì)用法可以參考http://httpd.apache.org/docs/mod/directives.html。

  使用以下指令可以幫助你減小拒絕服務(wù)的威脅:

  LimitRequestbody: 數(shù)字參數(shù),控制HTTP請求的大小。
  LimitRequestFields: 數(shù)字參數(shù),控制請求頭的數(shù)目。
  KeepAlive: 設(shè)置連接的生存期。
  KeepAliveTimeout: 限制等待請求的時間。

  使用以下指令可以幫助你叫囂緩沖區(qū)溢出的危險:

  LimitRequestFieldSize: 限制每個請求頭的大小。
  LimitRequestLine: 限制每個請求行的大小。

  CGI(ommon Gateway Interface,通用網(wǎng)關(guān)接口)的安全威脅

 CGI的安全性非常重要,攻擊者可以利用CGI的缺陷獲得系統(tǒng)信息、執(zhí)行系統(tǒng)命令、占用系統(tǒng)資源。如果一個CGI程序使用靜態(tài)分配的內(nèi)存,就可能為緩沖區(qū)溢出攻擊提供機會。為了減少這種風(fēng)險,程序員應(yīng)該在CGI代碼中使用動態(tài)分配內(nèi)存。除了CGI編寫人員應(yīng)該注意外,系統(tǒng)管理員可以采取對CGI進(jìn)行封裝(例如:suEXEC或者CGI Wrap)的辦法加強CGI的安全性。通過這種方式可以使CGI程序以某個獨立的用戶權(quán)限運行,即使發(fā)生緩沖區(qū)溢出,也只影響那個用戶的目錄/文件。

  perl是一種功能非常強大的腳本語言。主要用于文本的處理,程序員還可以通過perl腳本使用系統(tǒng)調(diào)用。如果程序編寫的不好,就會為攻擊者闖入服務(wù)器大開方便之門。因此,使用perl腳本一定要小心,以免出現(xiàn)此類漏洞。在perl腳本中,處理請求數(shù)據(jù)之前,最好能夠調(diào)用專門的檢查例程對輸入的合法性進(jìn)行檢查。除此之外,還要確保Apache不是以root的權(quán)限運行的,Perl腳本被限制在某個特定的目錄下運行。
SSI(Server-Side Includes)的安全

  使用SSI,程序員可以建立一些常用的例程,在需要時把這些例程包含進(jìn)他們的代碼中。SSI還允許有條件地執(zhí)行外部程序,攻擊者可能利用這個條件讓服務(wù)器執(zhí)行他們的惡意程序。在access.conf文件中使用IncludesNoEXEC指令,可以關(guān)閉執(zhí)行SSI文件的功能。不過這條指令會造成服務(wù)器不執(zhí)行CGI腳本或者程序。

  其它安全工具

  使用TCP Wrappers和Tripwire可以為你的系統(tǒng)提供額外的保護(hù)。你可以使用TCP Wrappers來控制Telnet或者FTP的訪問權(quán)限。Tripwire是一個數(shù)據(jù)完整性檢測工具,可以幫助系統(tǒng)管理員監(jiān)視系統(tǒng)是否被改動過,你可以在Tripwire的配置文件中編制特定的策略,監(jiān)視Web服務(wù)器的配置文件、數(shù)據(jù)和CGI文件是否被修改。
總結(jié)

  Apache是一個優(yōu)秀的歪脖服務(wù)器,雖然Apache的開發(fā)者非常注重其安全性,但是由于Apache非常龐大,難免會存在安全隱患。Apache的安裝維護(hù)中需要注意以下問題:

  · 檢查文件和目錄的權(quán)限是否恰當(dāng)。
  · httpd.conf、srm.conf和access.conf的設(shè)置是否適當(dāng)
  · 使服務(wù)器日志文件能夠記錄盡可能詳細(xì)的信息。
  · 對某些需要特別保護(hù)的目錄使用密碼保護(hù)(.htaccess)。
  · 對CGI腳本或者程序進(jìn)行封裝。
  · 如果CGI使用Perl編寫,要詳細(xì)檢查其安全性
  · 檢查SSI指令
  · 使用TCP Wrappers和Tripwire。