DevSecOps

4 set, 2014

HSTS – Meu HTTPS não está seguro?

Publicidade

HTTP Strict Transport Security (muitas vezes abreviado como HSTS) é um novo padrão de segurança SSL aprovado recentemente pelo IETF (Internet Engineering Task Force). Ele traz diversas melhorias para o SSL, entre elas, forçar a utilização do HTTPS, impedindo que sites sejam acessados usando o protocolo HTTP ou que parte do código de um site que está usando HTTPS seja executada em servidores usando o HTTP.

Este padrão já é utilizado pelo Google, Paypal, Twitter e outras grandes empresas, porém necessita da adoção em massa para se tornar um padrão de fato. Ativá-lo é muito simples e ele substitui a utilização do redirecionamento forçado do HTTP para HTTPS. O padrão foi projetado para impedir que hackers mal intencionados forcem as conexões dos utilizadores através de HTTP, ou tirem partido de erros nas implantações HTTPS, para comprometer a integridade de lojas virtuais e aplicações web.

O propósito deste artigo é discorrer sobre a utilização deste novo padrão de segurança, que já é incorporado aos novos navegadores e está se tornando um diferencial para quem o utiliza.

HTTP Strict Transport Security

Um padrão de segurança recém-aprovado como norma para a Internet pelo Internet Engineering Task Force (IET) promete tornar os sites baseados em HTTPS mais resistentes a vários tipos de ataques. O HTTP Strict Transport Security (HSTS) permite aos sites de se declararem acessíveis apenas através de HTTPS (HTTP Secure).

A principal característica do HSTS é permitir que um site informe ao navegador que ele nunca deve carregar o site usando HTTP, e deve converter automaticamente todas as tentativas e requisições de acessar o site usando HTTP para HTTPS, fazendo com que a comunicação entre o cliente e o servidor web esteja realmente segura. Assim, no início do processo, o browser faria a ligação com o site, receberia as informações e emitiria uma notificação de que a conexão não é segura e, portanto, não pode ser completada, evitando a interceptação dos seus dados.

O browser trabalha em conjunto com o servidor web para evitar ações mal intencionadas. Entretanto, apenas Firefox, Chrome e Opera têm suporte para HSTS – o Internet Explorer não trabalha com esse tipo de recurso.

O HSTS é uma das melhores coisas que aconteceram para o protocolo SSL. Corrige alguns dos erros cometidos quando o SSL foi originalmente concebido, há 18 anos. Mas também aborda as mudanças registradas desde então, referentes à forma como os browsers funcionam hoje. Ele não depende de avisos de certificado. Se for detectado um problema com a implementação HTTPS, o navegador simplesmente recusa a conexão e não oferece aos usuários à oportunidade de mudar essa decisão.

Cenário de exemplo

Você está utilizando o Wi-Fi de um aeroporto e precisa acessar um serviço bancário on-line para verificar o seu saldo ou pagar algumas contas. Infelizmente, o Wi-Fi que você está conectado está sendo interceptado por uma pessoa mal intencionada, e sua solicitação HTTP foi interceptada. Você acaba sendo redirecionado para um clone do site do seu banco, em vez do verdadeiro site do seu banco. Agora os seus dados privados são expostos.

O HSTS resolve este problema; o seu navegador vai saber usar automaticamente somente HTTPS, o que impede os hackers mal intencionados de realizar qualquer interceptação.

Como funciona

A primeira vez que acessamos um site que utiliza HSTS, ele retorna uma mensagem ao navegador dizendo que toda vez que aquele site for acessado, ele deve ser requisitado via HTTPS. O browser registra essas informações e armazena. Toda vez que o site for requisitado, mesmo se o usuário tentar acessar via HTTP, o navegador só realizará o acesso via HTTPS.

Parte técnica

Para habilitar o HSTS no Apache ou no Nginx é muito simples e ele substitui a utilização do redirecionamento forçado do HTTP para HTTPS.

No Apache

Adicione o seguinte parâmetro no VHOST do site:

Header add Strict-Transport-Security “max-age=15768000″

ou

Strict-Transport-Security: max-age=15768000 ; includeSubDomains

O parâmetro max-age define para o navegador o período de validade em segundos que o HTTPS será forçado, nesse caso serão 6 meses. Já o parâmetro includeSubDomains indica que esta regra valerá para os subdomínios.

No Nginx

Adicione o seguinte parâmetro no arquivo de configuração do Nginx:

add_header Strict-Transport-Security max-age=15768000;

Há um grande esforço do Google e Mozilla para que todos os usuários utilizem apenas o protocolo HTTPS. Já foi criada uma extensão para alguns navegadores, que ativa automaticamente o protocolo HTTPS em qualquer site que o usuário navegar. O nome da extensão é “https everywhere” e está disponível para download na Internet.