當前位置:開發者網絡 >> 技術教程 >> PHP教程 >> PHP安裝 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
Apache服務器的保護
作者:未知
日期:2004-07-02
人氣:
投稿:xiaxia(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:
作者:nixe0n

一. 綜述

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

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

二. Apache的主要缺陷

  · HTTP拒絕服務

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

  · 緩衝區溢出

  攻擊者利用程序編寫的一些缺陷,使程序偏離正常的流程。程序使用靜態分配的內存保存請求數據,攻擊者就可以發送一個超長請求使緩衝區溢出。比如一些Perl編寫的處理用戶請求的網關腳本。一旦緩衝區溢出,攻擊者可以執行其惡意指令或者使系統宕機。

  · 被攻擊者獲得root權限

  Apache一般以root權限運行(父進程),攻擊者通過它獲得root權限,進而控制整個系統。

三. 獲得最新的Apache

  使用最安全版本對於加強Apache Web服務器的安全是至關重要的。

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

  配置文件的保護

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

 服務器訪問控制

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

密碼保護

  使用.htaccess文件,可以把某個目錄的訪問權限賦予某個用戶。系統管理員需要在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日誌文件

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

  安全相關的指令

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

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

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

  使用以下指令可以幫助你叫囂緩衝區溢出的危險:

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

  CGI(ommon Gateway Interface,通用網關接口)的安全威脅

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

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

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

  其它安全工具

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

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

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

相關文章: