HTTPS并不总是看起来那么安全。 在5.5%的HTTPS站点中发现漏洞


受HTTPS保护的顶级站点Alexa(中央圈子)之一,具有子域(灰色)和依赖项(白色),其中易受攻击(虚线填充)

如今,安全的HTTPS连接图标已成为任何重要站点的标准甚至是必要的属性。 如果证书丢失,则几乎所有最近的浏览器都会显示警告,指出与该站点连接“不安全” ,因此不建议向其传输机密信息。

但是事实证明,地址栏中的“锁定”并不总是可以保证提供保护。 从Alexa排名中对10,000个主要站点进行的检查显示,其中许多站点通常都通过子域或依赖项受到SSL / TLS协议中的严重漏洞的攻击。 根据研究的作者,现代Web应用程序的复杂性大大增加了攻击面。

研究成果


这项研究是由威尼斯大学卡福斯卡里大学(意大利)和维也纳技术大学的专家进行的。 他们将在2019年5月20日至22日在旧金山举行的第40届IEEE安全和隐私研讨会上提交一份详细报告。

已检查来自Alexa列表的10,000个最受欢迎的HTTPS站点和90,816个相关主机。 在5574台主机上检测到脆弱的密码配置,即大约占总数的5.5%:

  • 4818易受MITM影响
  • 733易受TLS的完全解密
  • 912容易受到部分TLS解密的攻击

898个站点完全开放供黑客使用,也就是说,它们允许注入无关的脚本,而977个站点从受保护程度较低的页面下载内容,攻击者可以与这些页面进行交互。

研究人员强调,在线商店,金融服务和其他大型站点中有898种“完全受损”的资源。 898个站点中的660个从易受攻击的主机下载外部脚本:这是危险的主要来源。 作者认为,现代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服务器的建议设置:

现代模式


支持的最旧的客户端: Firefox 27,Chrome 30,Windows 7,Edge,Opera 17,Safari 9,Android 5.0和Java 8上的IE 11

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>; .... } 

平均支持


支持的最旧的客户端: Firefox 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”已变得司空见惯,但事实证明,这些基本的东西不足以为大量非常受欢迎的网站提供安全性。” 为了可靠地保护服务器和客户端之间的通道,您需要仔细监视来自您自己的子域和第三方主机的基础结构,从中提供站点内容。 从一些专门从事信息安全的第三方公司订购审计可能是有意义的。





Source: https://habr.com/ru/post/zh-CN446712/


All Articles