O HTTPS nem sempre é tão seguro quanto parece. Vulnerabilidades encontradas em 5,5% dos sites HTTPS


Um dos principais sites Alexa (o círculo central), protegido por HTTPS, com subdomínios (cinza) e dependências (branco), entre os quais há vulnerabilidades (preenchimento pontilhado)

Atualmente, o ícone de conexão segura HTTPS se tornou um atributo padrão e até necessário de qualquer site sério. Se o certificado estiver ausente, quase todos os navegadores recentes mostram um aviso de que a conexão ao site "não é segura" e não recomendam a transferência de informações confidenciais.

Mas acontece que a presença de um "bloqueio" na barra de endereço nem sempre garante proteção. Uma verificação de 10.000 sites líderes do ranking Alexa mostrou que muitos deles estão sujeitos a vulnerabilidades críticas nos protocolos SSL / TLS, geralmente por meio de subdomínios ou dependências. Segundo os autores do estudo, a complexidade dos aplicativos da web modernos aumenta muito a superfície de ataque.

Resultados da pesquisa


O estudo foi conduzido por especialistas da Universidade de Veneza Ca 'Foscari (Itália) e da Universidade Técnica de Viena. Eles apresentarão um relatório detalhado no 40º Simpósio de Segurança e Privacidade do IEEE, que será realizado de 20 a 22 de maio de 2019 em São Francisco.

Verificamos 10.000 dos sites HTTPS mais populares da lista Alexa e 90.816 hosts relacionados. Configurações criptográficas vulneráveis ​​foram detectadas em 5574 hosts, ou seja, aproximadamente 5,5% do total:

  • 4818 vulnerável ao MITM
  • 733 vulnerável à descriptografia completa do TLS
  • 912 vulnerável à descriptografia parcial do TLS

898 sites são completamente abertos para hackers, ou seja, permitem a injeção de scripts externos e 977 sites baixam conteúdo de páginas pouco protegidas com as quais um invasor pode interagir.

Os pesquisadores enfatizam que entre 898 recursos "completamente comprometidos" estão lojas on-line, serviços financeiros e outros sites grandes. 660 de 898 sites baixam scripts externos de hosts vulneráveis: esta é a principal fonte de perigo. Segundo os autores, a complexidade dos aplicativos da web modernos aumenta muito a superfície de ataque.

Outros problemas foram descobertos: 10% dos formulários de autorização têm problemas com a transmissão segura de informações, o que pode levar a um vazamento de senha, 412 sites permitem a interceptação de cookies e "sequestros de sessões" e 543 sites são suscetíveis a ataques à integridade dos cookies (por subdomínios).

O problema é que, nos últimos anos, várias vulnerabilidades foram identificadas nos protocolos e software SSL / TLS: POODLE (CVE-2014-3566), BEAST (CVE-2011-3389), CRIME (CVE-2012-4929), BREACH (CVE -2013-3587) e Heartbleed (CVE-2014-0160). Para se proteger contra eles, são necessárias várias configurações no servidor e no cliente para evitar o uso de versões vulneráveis ​​antigas. Mas este é um procedimento não trivial, porque essas configurações permitem a escolha de um extenso conjunto de cifras e protocolos, que são bastante difíceis de entender. Nem sempre é claro que conjuntos específicos de cifras e protocolos são considerados "bastante seguros".

Configurações recomendadas


Não existe uma lista oficialmente aprovada e acordada das configurações recomendadas de HTTPS. Portanto, o Mozilla SSL Configuration Generator oferece várias opções de configuração, dependendo do nível de proteção necessário. Por exemplo, aqui estão as configurações recomendadas para o servidor nginx 1.14.0:

Modo moderno


Clientes mais antigos suportados: Firefox 27, Chrome 30, IE 11 no Windows 7, Edge, Opera 17, Safari 9, Android 5.0 e 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>; .... } 

Suporte médio


Clientes mais antigos suportados: 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>; .... } 

Suporte antigo


Clientes mais antigos suportados: 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>; .... } 

É recomendável que você sempre use o conjunto completo de cifras e a versão mais recente do OpenSSL. O conjunto de criptografia nas configurações do servidor indica a prioridade na qual eles serão usados, dependendo das configurações do cliente.

Pesquisas mostram que a instalação de um certificado HTTPS não é suficiente. “Embora não processemos cookies como em 2005, e o TLS decente se tornou um lugar-comum, acontece que essas coisas básicas não são suficientes para fornecer segurança a um número surpreendentemente grande de sites muito populares”, afirmam os autores do trabalho. Para proteção confiável do canal entre o servidor e o cliente, você precisa monitorar cuidadosamente a infraestrutura de seus próprios subdomínios e hosts de terceiros, a partir dos quais o conteúdo do site é fornecido. Talvez faça sentido solicitar uma auditoria de uma empresa terceirizada especializada em segurança da informação.





Source: https://habr.com/ru/post/pt446712/


All Articles