天天看點

白帽子講Web安全(第 15 章 Web Server 配置安全)第 15 章 Web Server 配置安全

第 15 章 Web Server 配置安全

Web 伺服器是 Web 應用的載體,如果這個載體出現安全問題,那麼運作在其中的 Web 應用程式的安全也無法得到保障。是以 Web 伺服器的安全不容忽視。

Web 伺服器安全,考慮的是應用部署時的運作環境安全。這個運作環境包括 Web Server 、腳本語言解釋器、中間件等軟體,這些軟體所提供的一些配置參數,也可以起到安全保護的作用。

15.1 Apache 安全

盡管近年來 Nginx 、 LightHttpd 等 Web Server 的市場佔有率增長得很快,但 Apache 仍然是這個領域中獨一無二得巨頭,網際網路上大多數得 Web 應用依然跑在 Apache Httpd 上。

Web Server 的安全我們關注兩點:

  1. Web Server 本身是否安全;
  2. Web Server 是否提供了可使用的安全功能。

縱觀 Apache 的漏洞史,它曾經出現過許多次高危漏洞。但這些高危漏洞,大部分是由 Apache 的 Module 造成的,Apache 核心的高危漏洞幾乎沒有。Apache 有很多官方與非官方的 Module ,預設啟動的 Module 出現過的高危漏洞非常少,大多數的高危漏洞集中在預設沒有安全或 enable 的 Module 上。

是以,檢查 Apache 安全的第一件事情,就是檢查 Apache 的 Module 安裝情況,根據“最小權限原則”,應該盡可能地減少不必要的 Module ,對于要使用的 Module ,則檢查其對應版本是否存在已知的安全漏洞。

定制好了 Apache 的安裝包後,接下來需要做的,就是指定 Apache 程序以單獨的使用者身份運作,這通常需要為 Apache 單獨建立一個 user/group 。

需要注意的是,Apache 以 root 身份或者 admin 身份運作是一個非常糟糕的決定。 這裡是 admin 身份是指伺服器管理者在管理機器時使用的身份。這個身份的權限也是比較高的,因為管理者有操作管理腳本、通路配置檔案、讀/寫日志等需求。

使用高權限身份運作 Apache 的結果可能時災難性的,它會帶來兩個可怕的後果:

  1. 當黑客入侵 Web 成功時,将直接獲得一個高權限(比如 root 或 admin )的 shell 。
  2. 應用程式本身将具備較高權限,當出現 bug 時,可能會帶來較高風險,比如删除本地重要檔案、殺死程序等不可預知的結果。

比較好的做法是使用專門的使用者身份運作 Apache ,這個使用者身份不應該具備 shell ,它唯一的作用就是用來運作 Web 應用。

Apache 還提供了一些配置參數,可以用來優化伺服器的性能,提高對抗 DDOS 攻擊的能力。

  • TimeOut
  • KeepAlive
  • LimitRequestBody
  • LimitRequestFields
  • LimitRequestFieldSize
  • LimitRequestLine
  • LimitXMLRequestBody
  • AcceptFilter
  • MaxRequestWorkers

15.2 Nginx 安全

近年來 Nginx 發展很快,它的高性能和高并發的處理能力使得使用者在 Web Server 的選擇上有了更多的空間。

就軟體安全本身來看,Nginx 與 Apache 最大的差別在于,檢查 Apache 安全時更多的要關注 Module 的安全,而 Nginx 則需要注意軟體本身的安全,及時更新如那件版本。

15.3 jBoss 遠端指令執行

jBoss 是 J2EE 環境中一個流行的 Web 容器,但是 jBoss 在預設安全時提供的一些功能卻不太安全,如果配置不得當,則可能直接造成遠端指令執行。

由于 jBoss 在預設安裝時會有一個管理背景,叫做 JMX-Console ,預設安裝時通路 JMX-Console 是沒有任何認證的。

在 JMX-Console 中,有多種可以遠端執行指令的方法。最簡單的方式,是 通過 DeploymentScanner 遠端加載一個 war 包。

是以出于安全防禦的目的,在加強時,需要删除 JMX-Console 背景,事實上,jBoss 的使用完全可以不依賴于它。要移除 JMX-Console,隻需要删除 jmx-console.war 和 web-console。war即可,它們分别位于

$JBOSS_HOME/server/all/deploy

$JBOSS_HOME/server/default/deploy

目錄下。

如果出于 約我需要不得不使用 JMX-Console ,則應該使用一個強壯的密碼,并且運作 JMX-Console 的端口不應該面向整個 Internet 開放。

15.4 Tomcat 遠端指令執行

Apache Tomcat 與 jBoss 一樣,預設也會運作在 8080 端口。它提供的 Tomcat Manager 的作用與 JMX-Console 類似,管理者也可以在 Tomcat Manager 中部署 war 包。

雖然 Tomcat 背景有密碼認證,但筆者仍然強烈建議删除這一背景,因為攻擊者可以通過暴力破解等方式擷取背景的通路權限,從安全的角度看,這增加了系統的攻擊面,得不償失。

15.5 HTTP Parameter Pollution

在 2009 年的 OWASP 大會上,Luca 、Carettoni 等人示範了這種被稱為 HPP 的攻擊。簡單來說,就是通過 GET 或 POST 向伺服器發起請求時,送出兩個相同的參數,那麼伺服器會如何選擇呢?

比如送出:

/?a=test&a=test1
           

在某些服務端環境中,會隻取第一個參數;而在另外一些環境中,比如 .net 環境中,則會變成:

a=test,test1
           

這種特性在繞過一些伺服器端的邏輯判斷時,會非常有用。

這種 HPP 攻擊,與 Web 伺服器環境、伺服器端使用的腳本語言有關。HPP 本身可以看做伺服器端軟體的一種功能,參數選擇的順序是由伺服器端軟體所決定的。

HPP 這一問題再次提醒我們,設計安全方案必須要熟悉 Web 技術方方面面的細節,才不至于有所疏漏。從防範上來看,由于 HPP 是伺服器軟體的一種功能,是以隻需在具體的環境中注意伺服器環境的參數取值順序即可。