|
Cunha Rumor divulgado pela Crusher há alguns dias: "O acesso à Internet com WiFi público coloca em risco a segurança das contas bancárias? O artigo apresenta algumas situações no uso do HTTPS para transmissão criptografada em rede e, a julgar pela resposta, ainda há disputas. À medida que a Internet se torna cada vez mais popular, a aplicação está se tornando cada vez mais difundida, e algumas questões de segurança de rede também vão atrair cada vez mais atenção dos internautas; aqui vamos falar sobre TLS/SSL, que é o que costumamos chamar de HTTPS, desde o princípio até a aplicação em si, para ver o que é e quais problemas prestar atenção ao usar HTTPS e técnicas de segurança relacionadas. A cibersegurança é um evento holístico que envolve a segurança de computadores pessoais, protocolos, transmissão de dados e empresas e sites de desenvolvimento de software. Espero que, ao explicar as questões relacionadas à segurança pouco a pouco no futuro, mais pessoas possam entender a segurança da rede, para que possam usar a rede com mais segurança. O artigo será longo e está planejado para ser dividido em três partes por enquanto: A primeira parte descreve principalmente o princípio do HTTPS; A segunda parte descreve principalmente o processo de verificação de certificados SSL e algumas precauções para uso. A terceira parte apresenta alguns exemplos de ataques HTTPS. 1. O que é HTTPS?Antes de falar sobre HTTPS, vamos falar sobre o que é HTTP, que é um protocolo que normalmente usamos ao navegar na web. Os dados transmitidos pelo protocolo HTTP não são criptografados, ou seja, em texto simples, então é muito inseguro transmitir informações privadas usando o protocolo HTTP. Para garantir que esses dados privados possam ser criptografados e transmitidos, a Netscape projetou o protocolo SSL (Secure Sockets Layer) para criptografar os dados transmitidos pelo protocolo HTTP, dando origem ao HTTPS. A versão atual do SSL é a 3.0, definida no RFC 6101 pelo IETF (Internet Engineering Task Force), e depois pelo IETF atualizado SSL 3.0, resultando no TLS (Transport Layer Security) 1.0, definido no RFC 2246. Na verdade, nosso HTTPS atual é o protocolo TLS, mas como o SSL surgiu relativamente cedo e ainda é suportado pelos navegadores atuais, SSL ainda é sinônimo de HTTPS, mas seja TLS ou SSL, é coisa do século passado, a última versão do SSL é a 3.0, e o TLS continuará a fornecer serviços de criptografia para nós no futuro. A versão atual do TLS é a 1.2, definida no RFC 5246, e ainda não é amplamente utilizada. Para quem se interessa por história, você pode consultar o http://en.wikipedia.org/wiki/Transport_Layer_Security, que traz uma descrição detalhada do TLS/SSL.
2. O HTTPS é seguro?A resposta é sim, é seguro. Nas próximas semanas, o Google habilitará o HTTPS para todos os domínios locais ao redor do mundo, os usuários só precisarão fazer login com sua conta Google antes de buscar, e todas as operações de busca serão criptografadas usando o protocolo TLS, veja: http://thenextweb.com/google/2012/03/05/google-calls-for-a-more-secure-web-expands-ssl-encryption-to-local-domains/。
3. Como funciona o HTTPSO HTTPS requer um aperto de mão entre o cliente (navegador) e o servidor (site) antes de transmitir os dados, e as informações de senha de ambas as partes serão estabelecidas durante o processo de aperto de mão. O protocolo TLS/SSL não é apenas um conjunto de protocolos de transmissão criptografados, mas também uma obra de arte cuidadosamente projetada por artistas, usando criptografia assimétrica, criptografia simétrica e algoritmos HASH. Uma descrição simples do processo de handshake é a seguinte:
- O navegador envia um conjunto de regras de criptografia que ele suporta para o site.
- O site seleciona um conjunto de algoritmos de criptografia e algoritmos HASH a partir deles e envia suas informações de identidade de volta ao navegador na forma de um certificado. O certificado contém informações como o endereço do site, a chave pública da criptografia e o emissor do certificado.
- Após obter um certificado de site, o navegador faz o seguinte:
- Verifique a legitimidade do certificado (se a autoridade que emite o certificado é legítima, se o endereço do site contido no certificado é o mesmo do endereço visitado, etc.), se o certificado for confiável, um pequeno cadeado será exibido na barra do navegador, caso contrário, será dado um aviso de que o certificado não é confiável.
- Se o certificado for confiável, ou se o usuário aceitar um certificado não confiável, o navegador gera um número aleatório de senhas e as criptografa com a chave pública fornecida no certificado.
- A mensagem de aperto de mão é calculada usando o HASH acordado, e a mensagem é criptografada com o número aleatório gerado, e finalmente todas as informações geradas anteriormente são enviadas ao site.
4. Após receber os dados do navegador, o site faz o seguinte: - Use sua própria chave privada para descriptografar a senha, use a senha para descriptografar a mensagem de handshake enviada pelo navegador e verifique se o HASH é o mesmo enviado pelo navegador.
- Uma mensagem de aperto de mão é criptografada com uma senha e enviada ao navegador.
5. O navegador descriptografa e calcula o HASH da mensagem de aperto de mão, se for consistente com o HASH enviado pelo servidor, o processo de aperto de mão termina, e então todos os dados de comunicação serão criptografados pela senha aleatória gerada pelo navegador anterior e usando o algoritmo de criptografia simétrica.
Aqui, o navegador e o site enviam uma mensagem de aperto de mão criptografada entre si e verificam, para garantir que ambas as partes tenham obtido a mesma senha, possam criptografar e descriptografar os dados normalmente, além de realizar um teste para a transmissão subsequente de dados reais. Além disso, os algoritmos de criptografia e HASH comumente usados pelo HTTPS são os seguintes: - Algoritmos de criptografia assimétrica: RSA, DSA/DSS
- Algoritmos de criptografia simétrica: AES, RC4, 3DES
- Algoritmo HASH: MD5, SHA1, SHA256
Entre elas, o algoritmo de criptografia assimétrica é usado para criptografar a senha gerada durante o processo de handshake, o algoritmo de criptografia simétrica é usado para criptografar os dados reais transmitidos, e o algoritmo HASH é usado para verificar a integridade dos dados. Como a senha gerada pelo navegador é a chave para a criptografia de todos os dados, ela é criptografada usando um algoritmo de criptografia assimétrica durante a transmissão. O algoritmo de criptografia assimétrica gera chaves públicas e privadas, chaves públicas só podem ser usadas para criptografar dados, então podem ser transmitidas à vontade, e as chaves privadas do site são usadas para descriptografar os dados, então o site manterá sua chave privada com muito cuidado para evitar vazamentos. Qualquer erro durante o processo de handshake TLS pode romper a conexão criptografada, impedindo a transmissão de informações privadas. É justamente porque o HTTPS é muito seguro que os atacantes não conseguem encontrar um ponto de partida, então eles usam certificados falsos para enganar clientes e obter informações em texto simples, mas esses métodos podem ser identificados, o que abordarei em um artigo posterior. No entanto, em 2010, especialistas em segurança descobriram uma vulnerabilidade no manuseio do protocolo TLS 1.0: http://www.theregister.co.uk/2011/09/19/beast_exploits_paypal_ssl/, na verdade, esse método de ataque chamado BEAST foi descoberto por especialistas em segurança já em 2002, mas não foi tornado público. Microsoft e Google corrigiram essa vulnerabilidade. Veja: http://support.microsoft.com/kb/2643584/en-us https://src.chromium.org/viewvc/chrome?view=rev&revision=90643 A versão simplificada do HTTPS também funciona em Criptografia Simétrica vs. Criptografia Assimétrica. |