1. 程式人生 > >【Apache】HTTPD 2.4.37 + OpenSSL 1.1.1 企業級安全配置(含TLS修復)

【Apache】HTTPD 2.4.37 + OpenSSL 1.1.1 企業級安全配置(含TLS修復)

我為什麼要寫這一篇稿子?

為了避免更多的運維、開發者沒能實現企業的資訊保安,我將共享出我個人的HTTPD的安全修復(2.2和2.4差不太多就看2.4就好)  

起因:我為某M工作,但因某M和testin合作,結果他們跑個指令碼在安全上檢測到

SlowHTTPDenialofServiceAttack(解決方案是reqtimeout_module,下面我就不寫了)

不安全的http
poodle
sweet32
中介軟體漏洞:
響應包版本洩露

【順便一提,這些問題我早知道了,他們的修復建議並沒什麼用,依然是CV大法】


 

首先我們來看看2.2有哪些風險

 Fixed in
Apache httpd 2.2.23 low: XSS in mod_negotiation when untrusted uploads are supported (CVE-2012-2687) low: insecure LD_LIBRARY_PATH handling (CVE-2012-0883) Fixed in Apache httpd 2.2.24 low: XSS due to unescaped hostnames (CVE-2012-3499) --moderate: XSS in mod_proxy_balancer (CVE-2012-4558) Fixed in Apache httpd 2.2
.25 low: mod_rewrite log escape filtering (CVE-2013-1862) --moderate: mod_dav crash (CVE-2013-1896) Fixed in Apache httpd 2.2.27 low: mod_log_config crash (CVE-2014-0098) --moderate: mod_dav crash (CVE-2013-6438) Fixed in Apache httpd 2.2.29 important: mod_cgid denial of service (CVE-2014-0231
) low: HTTP Trailers processing bypass (CVE-2013-5704) --moderate: mod_deflate denial of service (CVE-2014-0118) --moderate: mod_status buffer overflow (CVE-2014-0226) Fixed in Apache httpd 2.2.31 low: HTTP request smuggling attack against chunked request parser (CVE-2015-3183) Fixed in Apache httpd 2.2.32 important: Apache HTTP Request Parsing Whitespace Defects (CVE-2016-8743) --moderate: mod_userdir CRLF injection (CVE-2016-4975) n/a: HTTP_PROXY environment variable "httpoxy" mitigation (CVE-2016-5387) Fixed in Apache httpd 2.2.34 important: Uninitialized memory reflection in mod_auth_digest (CVE-2017-9788) important: ap_get_basic_auth_pw() Authentication Bypass (CVE-2017-3167) important: mod_ssl Null Pointer Dereference (CVE-2017-3169) important: ap_find_token() Buffer Overread (CVE-2017-7668) important: mod_mime Buffer Overread (CVE-2017-7679) Not fixed in Apache httpd 2.2 *apache httpd 2.2已停止更新 其中個別漏洞是可以造成原始碼洩露的。 最新版本: apache ver.2.4.37 openssl ver.1.1.1

以上就是HTTPD2.2版本的風險,我個人也有基於低版本的修復,但是它並不安全,為防止某些人重蹈覆轍,強烈建議升級到2.4.37,版本於2018年10月23日釋出,更新的版本請參照我新的部落格,我將會持續跟蹤,分享。


Apache HTTPD 2.4.37 安全配置

#去掉對SSL2&3,Tls1&1.1版本的支援,提供對Tls1.2的支援(tls1.3預設關閉),極大地增加了安全性
#增加了httpd對Trace的限制
#增加了重定向的解決方案(需設定,未啟動) #增加了安全頭,提升了對XSS,CSRF,點選劫持,嗅探等攻擊的防禦,將lucky13攻擊成功率(採用對稱加密會有)降到個人能達到的最低限度,但考慮實際需求並未增加CSP。 #如需開啟HTTP2(1.1的升級)請在安裝apache 時./config後增加 --enable-http2  載入 http2_module modules/mod_http2.so <IfModule http2_module> LogLevel http2:info </IfModule> 並使用 protocols啟動 Protocols h2 http/1.1  #修復了 POODLE,SWEET32以及testin並未測試到的 LOGJAM,BEAST攻擊同時更改大量不安全協議。   #*使用前需要修改配置檔案*,配置也適用於其他httpd專案

 

——涉及檔案:httpd.conf,httpd-ssl.conf

  如何安裝(基於Centos7)

  前置依賴:

./configure --prefix=/opt/apache/apr-1.6.5
make 
make install

./configure --prefix=/opt/apache/apr-iconv-1.2.2 --with-apr=/opt/apache/apr-1.6.5
make 
make install


./configure --prefix=/opt/apache/apr-util-1.6.1 --with-apr=/opt/apache/apr-1.6.5  --with-apr-iconv=/opt/apache/apr-iconv-1.2.2/bin/apriconv
make 
make install
 

 
*// apr-util-1.6.1 報錯
*// xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory
解決方法
  yum install expat-devel     
*//ps:expat-devel-2.1.0-10.el7_3.x86_64  最新版是2.4.4
 
 
 

./configure --prefix=/opt/apache/pcre-8.42 --with-apr=/opt/apache/apr-1.6.5/bin/apr-1-config
make && make install

./configure --prefix=/opt/apache/httpd-2.4.37 --with-pcre=/opt/apache/pcre-8.42 --with-apr=/opt/apache/apr-1.6.5/bin/apr-1-config --with-apr-util=/opt/apache/apr-util-1.6.1  --with-apr-iconv=/opt/apache/apr-iconv-1.2.2/bin/apriconv --enable-so   --enable-ssl --enable-mods-shared=all --enable-cache --enable-disk-cache --enable-file-cache --enable-mem-cache
make && make install

*//OpenSSL v1.1.1升級詳見
*//https://blog.csdn.net/evkj2013/article/details/82933079

 

我增加/修改了哪些配置

#conf/httpd.conf

#配置外掛
<IfModule reqtimeout_module>
  RequestReadTimeout header=5-40,MinRate=500 body=20,MinRate=500 
</IfModule>
<IfModule mod_headers.c> 
  Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
  Header always set X-Frame-Options SAMEORIGIN
  Header always set X-Content-Type-Options nosniffs
  Header always set X-XSS-Protection "1; mode=block" 
</IfModule>
# Configure mod_proxy_html to understand HTML4/XHTML1
<IfModule proxy_html_module>
Include conf/extra/proxy-html.conf
</IfModule>

# Secure (SSL/TLS) connections
include conf/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
#       starting without SSL on platforms with no /dev/random equivalent
#       but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>
#禁用 trace
TraceEnable off
 ServerSignature Off 
 ServerTokens Prod
#啟動重定向
#RewriteEngine on
#RewriteCond %{SERVER_PORT} !^443$
#RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R]

我為什麼增加了安全頭?這些安全頭有什麼作用?作為萌新的你可能不懂,但我懶得寫,需要的話請在我部落格後面留言我考慮一下加上。

Trace是一定要禁用的,因為這個並不安全,詳見其他人的部落格(我嫌佔篇幅),增加ssl時請記得load,我想其他人已經替你做了。

 

#conf/extra/httpd-ssl.conf   

 SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256!SSLv3:!kRSA:!EXPORT:!ADH
 SSLProxyCipherSuite HIGH:MEDIUM:!SSLv3:!kRSA
 
//在這裡我禁用了!EXPORT(很少人注意這裡,因為國內還真的沒人講為什麼要注掉,總之如果你是萌新,現在只要記得注掉就對了。)還有!ADH(就是DH)等套件因為過時了,我在這裡採用了ECDHE套件,十分安全。

SSLHonorCipherOrder on 
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLProxyProtocol all -SSLv3
SSLSessionTickets       off
SSLSessionCache        "shmcb:/opt/apache/httpd-2.4.37/logs/ssl_scache(512000)"
SSLSessionCacheTimeout  300
SSLUseStapling On
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off
SSLStaplingCache "shmcb:/opt/apache/httpd-2.4.37/logs/ssl_stapling(32768)"
SSLStaplingStandardCacheTimeout 3600
SSLStaplingErrorCacheTimeout 600
SSLEngine on
//金鑰啥的你們應該會配就不粘那麼多了

我的套件依然存在CBC(就是對稱密碼),所以有機率被lucky 13,所以除非你不用CBC,追求最佳的安全,否則這些就夠了。其他的配置一切安全

採用了TLS1.2(1.3沒開)。

 如何去測試配置現在是否安全?

https://testssl.sh/

我不知道怎麼使用

testssl.sh <hostname>/<URI>   

我需要一份報告

testssl.sh <options> <URI> | aha >output.html

 啥是URI

 你暫時,在這裡完全可以理解成URL