HTTPS 並不總是像看起來那麼安全。 5,5% 的 HTTPS 站點發現漏洞

HTTPS 並不總是像看起來那麼安全。 5,5% 的 HTTPS 站點發現漏洞
Alexa 的頂級站點之一(中心圓圈),由 HTTPS 保護,具有子域(灰色)和依賴項(白色),其中存在易受攻擊的站點(虛線陰影)

如今,HTTPS安全連接圖標已經成為任何嚴肅網站的標準甚至必要屬性。 如果 證書 缺失,幾乎所有最新的瀏覽器都會顯示警告 與該網站的連接“不安全” 並且不建議向其傳輸機密信息。

但事實證明,地址欄中存在“鎖”並不總是能保證受到保護。 檢查 10 個領先網站 從評級來看,Alexa 表明其中許多都受到 SSL/TLS 協議中的嚴重漏洞的影響,通常是通過子域或依賴項。 該研究的作者表示,現代 Web 應用程序的複雜性大大增加了攻擊面。

研究結果

這項研究是由威尼斯卡福斯卡里大學(意大利)和維也納技術大學的專家進行的。 他們將在 40 年 20 月 22 日至 2019 日在舊金山舉行的第 XNUMX 屆 IEEE 安全與隱私研討會上提交詳細報告。

測試了 Alexa 列表中前 10 個 HTTPS 站點和 000 個相關主機。 在 90 台主機上檢測到存在漏洞的加密配置,約佔總數的 816%:

  • 4818 容易受到中間人攻擊
  • 733 容易受到完整 TLS 解密的影響
  • 912 容易受到部分 TLS 解密的影響

898 個站點對黑客攻擊完全開放,也就是說,它們允許注入第三方腳本,977 個站點從保護不善的頁面加載內容,攻擊者可以與之交互。

研究人員強調,898 個“完全受損”的資源包括在線商店、金融服務和其他大型網站。 660 個站點中有 898 個從易受攻擊的主機下載外部腳本:這是主要的危險來源。 作者表示,現代 Web 應用程序的複雜性大大增加了攻擊面。

還發現了其他問題:10%的授權表單存在信息安全傳輸問題,這有洩露密碼的威脅,412個站點允許攔截cookie和會話劫持,543個站點受到cookie完整性攻擊(通過子域) 。

問題是近年來在SSL/TLS協議和軟件方面 發現了一些漏洞:POODLE (CVE-2014-3566)、BEAST (CVE-2011-3389)、CRIME (CVE-2012-4929)、BREACH (CVE-2013-3587) 和 Heartbleed (CVE-2014-0160)。 為了防範它們,需要在服務器和客戶端進行一些設置,以避免使用舊的易受攻擊的版本。 但這是一個相當重要的過程,因為這樣的設置涉及從大量的密碼和協議中進行選擇,而這些密碼和協議非常難以理解。 哪些密碼套件和協議被認為“足夠安全”並不總是很清楚。

推薦設置

沒有人正式批准並同意推薦的 HTTPS 設置列表。 所以, Mozilla SSL 配置生成器 根據所需的保護級別提供多種配置選項。 例如,以下是 nginx 1.14.0 服務器的推薦設置:

現代模式

最舊的受支持客戶端: Windows 27 上的 Firefox 30、Chrome 11、IE 7、Edge、Opera 17、Safari 9、Android 5.0 和 Java 8

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;


# modern configuration. tweak to your needs.
ssl_protocols TLSv1.2;
ssl_ciphers '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';
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

中等支持

最舊的受支持客戶端: 火狐 1、Chrome 1、IE 7、Opera 5、Safari 1、Windows XP IE8、Android 2.3、Java 7

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /path/to/dhparam.pem;

# intermediate configuration. tweak to your needs.
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

老支持

最舊的受支持客戶端: Windows XP IE6、Java 6

server {
listen 80 default_server;
listen [::]:80 default_server;

# Redirect all HTTP requests to HTTPS with a 301 Moved Permanently response.
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

# certs sent to the client in SERVER HELLO are concatenated in ssl_certificate
ssl_certificate /path/to/signed_cert_plus_intermediates;
ssl_certificate_key /path/to/private_key;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

# Diffie-Hellman parameter for DHE ciphersuites, recommended 2048 bits
ssl_dhparam /path/to/dhparam.pem;

# old configuration. tweak to your needs.
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305: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:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:HIGH:SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!EDH-DSS-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA:!SRP';
ssl_prefer_server_ciphers on;

# HSTS (ngx_http_headers_module is required) (15768000 seconds = 6 months)
add_header Strict-Transport-Security max-age=15768000;

# OCSP Stapling ---
# fetch OCSP records from URL in ssl_certificate and cache them
ssl_stapling on;
ssl_stapling_verify on;

## verify chain of trust of OCSP response using Root CA and Intermediate certs
ssl_trusted_certificate /path/to/root_CA_cert_plus_intermediates;

resolver <IP DNS resolver>;

....
}

建議您始終使用完整的密碼套件和最新版本的 OpenSSL。 服務器設置中的密碼套件指定它們的使用優先級,具體取決於客戶端設置。

研究表明,僅安裝 HTTPS 證書是不夠的。 “雖然我們不像 2005 年那樣處理 cookie,並且‘體面的 TLS’已經變得司空見慣,但事實證明,這些基本的東西不足以保護數量驚人的非常受歡迎的網站。” 他們說 該作品的作者。 為了可靠地保護服務器和客戶端之間的通道,您需要仔細監控您自己的子域和提供站點內容的第三方主機的基礎設施。 也許委託一些專門從事信息安全的第三方公司進行審計是有意義的。

HTTPS 並不總是像看起來那麼安全。 5,5% 的 HTTPS 站點發現漏洞

來源: www.habr.com