Apache-2.2

如何修復 Apache (httpd) 中的“logjam”漏洞

  • December 19, 2018

最近,發布了 Diffie-Hellman 中的一個新漏洞,非正式地稱為“logjam”,此頁面已針對該漏洞提出瞭如何應對該漏洞的建議:

對於正確部署 Diffie-Hellman for TLS,我們提出了三項建議:

  1. **禁用導出密碼套件。**儘管現代瀏覽器不再支持導出套件,但 FREAK 和 Logjam 攻擊允許中間人攻擊者誘騙瀏覽器使用導出級加密,之後可以解密 TLS 連接。出口密碼是 1990 年代政策的殘餘,該政策阻止了強密碼協議從美國出口。沒有現代客戶依賴出口套件,禁用它們幾乎沒有缺點。
  2. **部署(臨時)橢圓曲線 Diffie-Hellman (ECDHE)。**橢圓曲線 Diffie-Hellman (ECDH) 密鑰交換避免了所有已知可行的密碼分析攻擊,現代 Web 瀏覽器現在更喜歡 ECDHE,而不是原始的有限域 Diffie-Hellman。我們用來攻擊標準 Diffie-Hellman 組的離散對數算法並沒有從預計算中獲得那麼強的優勢,並且單個伺服器不需要生成唯一的橢圓曲線。
  3. 生成強大、獨特的 Diffie Hellman 組。數百萬台伺服器使用幾個固定組,這使它們成為預計算和潛在竊聽的最佳目標。管理員應該為每個網站或伺服器使用“安全”素數生成唯一的 2048 位或更強的 Diffie-Hellman 組。

根據上述建議,我應該採取哪些最佳實踐步驟來保護我的伺服器?

您連結的文章中,推薦了三個步驟來保護自己免受此漏洞的侵害。原則上,這些步驟適用於您可能與 SSL/TLS 一起使用的任何軟體,但在這裡我們將處理將它們應用於 Apache (httpd) 的具體步驟,因為這是有問題的軟體。

  1. 禁用導出密碼套件

在我們將在下面的 2. 中進行的配置更改中處理​​(!EXPORT接近行尾的SSLCipherSuite是我們將如何禁用導出密碼套件)

  1. 部署(臨時)橢圓曲線 Diffie-Hellman (ECDHE)

為此,您需要在 Apache 配置文件中編輯一些設置 - 即,SSLProtocol以獲得“最佳實踐”設置。類似以下內容就足夠了:SSLCipherSuite``SSLHonorCipherOrder

SSLProtocol             all -SSLv2 -SSLv3

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA

SSLHonorCipherOrder     on

注意:至於使用哪個SSLCipherSuite設置,這總是在變化,最好查閱諸如此類的資源檢查最新的推薦配置。

3. 生成強大、獨特的 Diffie Hellman 組

為此,您可以執行

openssl dhparam -out dhparams.pem 2048.

請注意,這將在生成參數時給伺服器帶來很大的負載 - 您始終可以通過在另一台機器上生成參數並使用scp或類似方式將它們傳輸到相關伺服器上以供使用來解決這個潛在問題。

dhparams要在 Apache 中使用這些新生成的,請參閱Apache 文件

要生成自定義 DH 參數,請使用 openssl dhparam 命令。或者,您可以將 RFC 2409 第 6.2 節中的以下標準 1024 位 DH 參數附加到相應的 SSLCertificateFile 文件中

(強調我的)

然後是一個標準的 1024 位 DH 參數。由此我們可以推斷,自定義生成的 DH 參數可以簡單地附加到相關SSLCertificateFile的問題中。

為此,請執行類似於以下內容的內容:

cat /path/to/custom/dhparam >> /path/to/sslcertfile

或者,根據您最初連結的文章的Apache 小節,如果您不想更改證書文件本身,您也可以指定您創建的自定義 dhparams 文件,因此:

SSLOpenSSLConfCmd DHParameters "/path/to/dhparams.pem"

在與您的特定 SSL/TLS 實現相關的任何 Apache 配置中 - 通常在conf.d/ssl.confconf.d/vhosts.conf但是這將根據您配置 Apache 的方式而有所不同。

值得注意的是,根據此連結

在 Apache 2.4.7 之前,DH 參數始終設置為 1024 位,使用者不可配置。這已在 mod_ssl 2.4.7 中得到修復,Red Hat 已通過 httpd-2.2.15-32.el6 向後移植到其 RHEL 6 Apache 2.2 發行版中

在 Debian Wheezy 上將 apache2 升級到 2.2.22-13+deb7u4 或更高版本,並將 openssl 升級到 1.0.1e-2+deb7u17。上面的 SSLCipherSuite 不能完美執行,而是按照這個部落格使用以下內容:

SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-DSS-AES128-SHA256:DHE-DSS-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!DHE-RSA-AES128-GCM-SHA256:!DHE-RSA-AES256-GCM-SHA384:!DHE-RSA-AES128-SHA256:!DHE-RSA-AES256-SHA:!DHE-RSA-AES128-SHA:!DHE-RSA-AES256-SHA256:!DHE-RSA-CAMELLIA128-SHA:!DHE-RSA-CAMELLIA256-SHA

您應該檢查您的 Apache 版本是否晚於這些版本號,具體取決於您的發行版,如果不是,請盡可能更新它。

執行上述步驟更新配置並重新啟動 Apache 服務以應用更改後,您應該通過在SSLLabs和與此特定漏洞相關的文章上執行測試來檢查配置是否符合預期。

引用自:https://serverfault.com/questions/693241