OpenSSL - OpenSSL

OpenSSL
OpenSSL logo.svg
Vamos criptografar o detalhe do certificado R3 screenshot.png
Desenvolvedor (s) O Projeto OpenSSL
lançamento inicial 1998 ; 23 anos atrás ( 1998 )
Versão estável 3.0.0 (7 de setembro de 2021 ; 36 dias atrás ) [±] ( 2021-09-07 )
Repositório
Escrito em C , Montagem , Perl
Modelo Biblioteca de criptografia
Licença Licença OpenSSL, v3.0 mudou para a licença Apache 2.0
Local na rede Internet www .openssl .org

OpenSSL é uma biblioteca de software para aplicativos que protegem as comunicações em redes de computadores contra espionagem ou necessidade de identificar a parte na outra extremidade. É amplamente utilizado por servidores da Internet , incluindo a maioria dos sites HTTPS .

OpenSSL contém uma implementação de código aberto dos protocolos SSL e TLS . A biblioteca central , escrita na linguagem de programação C , implementa funções criptográficas básicas e fornece várias funções utilitárias. Wrappers que permitem o uso da biblioteca OpenSSL em uma variedade de linguagens de computador estão disponíveis.

A OpenSSL Software Foundation (OSF) representa o projeto OpenSSL na maioria das capacidades legais, incluindo contratos de licença de contribuidores, gerenciamento de doações e assim por diante. OpenSSL Software Services (OSS) também representa o projeto OpenSSL, para contratos de suporte.

O OpenSSL está disponível para a maioria dos sistemas operacionais do tipo Unix (incluindo Linux , macOS e BSD ) e Microsoft Windows .

História do projeto

O projeto OpenSSL foi fundado em 1998 para fornecer um conjunto gratuito de ferramentas de criptografia para o código usado na Internet. Ele é baseado em um fork do SSLeay de Eric Andrew Young e Tim Hudson, que encerrou não oficialmente o desenvolvimento em 17 de dezembro de 1998, quando Young e Hudson foram trabalhar para a RSA Security . Os membros fundadores iniciais foram Mark Cox, Ralf Engelschall, Stephen Henson, Ben Laurie e Paul Sutton.

Em maio de 2019, o comitê de gerenciamento do OpenSSL era composto por 7 pessoas e havia 17 desenvolvedores com acesso de commit (muitos dos quais também fazem parte do comitê de gerenciamento do OpenSSL). Existem apenas dois funcionários em tempo integral (bolsistas) e os demais são voluntários.

O projeto tem um orçamento de menos de um milhão de dólares por ano e depende principalmente de doações. O desenvolvimento do TLS 1.3 é patrocinado pela Akamai.

Lançamentos de versões principais

Histórico de lançamento do OpenSSL
Versão Data de lançamento original Comente Última versão secundária
Versão antiga, não mais mantida: 0.9.1 23 de dezembro de 1998 ( 23/12/1998 )
  • Início oficial do projeto OpenSSL
0.9.1c (23 de dezembro de 1998)
Versão antiga, não mais mantida: 0.9.2 22 de março de 1999 ( 22/03/1999 )
  • Sucessor de 0.9.1c
0.9.2b (6 de abril de 1999)
Versão antiga, não mais mantida: 0.9.3 25 de maio de 1999 ( 25/05/1999 )
  • Sucessor de 0.9.2b
0.9.3a (27 de maio de 1999)
Versão antiga, não mais mantida: 0.9.4 9 de agosto de 1999 ( 09/08/1999 )
  • Sucessor de 0.9.3a
0.9.4 (9 de agosto de 1999)
Versão antiga, não mais mantida: 0.9.5 28 de fevereiro de 2000 ( 28/02/2000 )
  • Sucessor de 0.9.4
0.9.5a (1 de abril de 2000)
Versão antiga, não mais mantida: 0.9.6 24 de setembro de 2000 ( 24/09/2000 )
  • Sucessor de 0.9.5a
0.9.6m (17 de março de 2004)
Versão antiga, não mais mantida: 0.9.7 31 de dezembro de 2002 ( 31/12/2002 )
  • Sucessor de 0.9.6m
0.9.7m (23 de fevereiro de 2007)
Versão antiga, não mais mantida: 0.9.8 5 de julho de 2005 ( 2005-07-05 )
  • Sucessor de 0.9.7m
0.9.8zh (3 de dezembro de 2015)
Versão antiga, não mais mantida: 1.0.0 29 de março de 2010 ( 29/03/2010 )
  • Sucessor de 0.9.8n
1.0.0t (3 de dezembro de 2015 )  ( 03-12-2015 )
Versão antiga, não mais mantida: 1.0.1 14 de março de 2012 ( 14/03/2012 )
  • Sucessor de 1.0.0h
  • Suportado até 31 de dezembro de 2016
  • Suporte para pulsação RFC 6520 TLS / DTLS
  • Suporte SCTP
  • Exportador de material chave RFC 5705 TLS
  • Negociação RFC 5764 DTLS-SRTP
  • Próxima negociação de protocolo
  • Assinaturas PSS em certificados, solicitações e listas de revogação de certificados (CRL)
  • Suporte para informações de destinatário com base em senha para CMS
  • Suporte TLS 1.2 e TLS 1.1
  • Capacidade FIPS 140 preliminar para módulo FIPS 2.0 não validado
  • Suporte ao protocolo de senha remota segura (SRP)
1.0.1u (22 de setembro de 2016 )  ( 22/09/2016 )
Versão antiga, não mais mantida: 1.0.2 22 de janeiro de 2015 ( 22/01/2015 )
  • Sucessor de 1.0.1l
  • Suportado até 31 de dezembro de 2019 (suporte de longo prazo)
  • Suporte Suite B para TLS 1.2 e DTLS 1.2
  • Suporte para DTLS 1.2
  • Seleção de curva elíptica automática (EC) TLS
  • API para definir curvas e algoritmos de assinatura compatíveis com TLS
  • API de configuração SSL_CONF
  • TLS Brainpool apoio
  • Suporte ALPN
  • Suporte CMS para RSA-PSS , RSA-OAEP , ECDH e X9.42 DH
  • Suporte FIPS 140
1.0.2u (20 de dezembro de 2019 )  ( 20/12/2019 )
Versão antiga, não mais mantida: 1.1.0 25 de agosto de 2016 ( 25/08/2016 )
  • Sucessor de 1.0.2h
  • Compatível até 11 de setembro de 2019
  • Suporte para BLAKE2 (RFC 7693)
  • Suporte para ChaCha20 - Poly1305 (RFC 7539)
  • Suporte para X25519 (RFC 7748)
  • Suporte para DANE e Transparência de Certificado
  • Suporte para Ciphersuites CCM
  • Suporte para segredo mestre estendido
  • SSLv2 removido
  • Suporte de cifragem Kerberos removido
  • RC4 e 3DES removidos dos ciphersuites DEFAULT na libssl
  • Remova DSS, SEED, IDEA, CAMELLIA e AES-CCM da lista de cifras DEFAULT
  • Suporte de cifra de 40 e 56 bits removido da libssl
  • Suporte FIPS 140 removido
1.1.0l (10 de setembro de 2019 )  ( 10/09/2019 )
Versão mais antiga, mas ainda mantida: 1.1.1 11 de setembro de 2018 ( 11/09/2018 ) desenvolvimento contínuo
Versão estável atual: 3.0.0 7 de setembro de 2021 ( 2021-09-07 ) desenvolvimento contínuo
Lenda:
Versão antiga
Versão mais antiga, ainda mantida
Última versão
Versão de visualização mais recente
Lançamento futuro

Algoritmos

OpenSSL oferece suporte a vários algoritmos criptográficos diferentes:

Cifras
AES , Blowfish , Camellia , Chacha20 , Poly1305 , SEED , CAST-128 , DES , IDEA , RC2 , RC4 , RC5 , Triple DES , GOST 28147-89 , SM4
Funções criptográficas de hash
MD5 , MD4 , MD2 , SHA-1 , SHA-2 , SHA-3 , RIPEMD-160 , MDC-2 , GOST R 34.11-94 , BLAKE2 , Whirlpool , SM3
Criptografia de chave pública
RSA , DSA , troca de chave Diffie – Hellman , curva elíptica , X25519 , Ed25519 , X448 , Ed448 , GOST R 34.10-2001 , SM2

(O sigilo direto perfeito é compatível com a curva elíptica Diffie – Hellman desde a versão 1.0.)

Validação FIPS 140

FIPS 140 é um programa federal dos EUA para teste e certificação de módulos criptográficos. Um dos primeiros certificados FIPS 140-1 para o FOM 1.0 do OpenSSL foi revogado em julho de 2006 "quando foram levantadas questões sobre a interação do módulo validado com software externo". O módulo foi recertificado em fevereiro de 2007 antes de dar lugar ao FIPS 140-2. O OpenSSL 1.0.2 suportava o uso do OpenSSL FIPS Object Module (FOM), que foi construído para fornecer algoritmos aprovados pelo FIPS em um ambiente validado pelo FIPS 140-2. O OpenSSL decidiu, de maneira controversa, categorizar a arquitetura 1.0.2 como 'Fim da Vida' ou 'EOL', a partir de 31 de dezembro de 2019, apesar das objeções de que era a única versão do OpenSSL disponível atualmente com suporte para o modo FIPS. Como resultado do EOL, muitos usuários não conseguiram implantar corretamente o FOM 2.0 e caíram fora da conformidade porque não asseguraram o suporte estendido para a arquitetura 1.0.2, embora o próprio FOM permanecesse validado por mais oito meses.

O FIPS Object Module 2.0 permaneceu como FIPS 140-2 validado em vários formatos até 1 de setembro de 2020, quando o NIST suspendeu o uso do FIPS 186-2 para Digital Signature Standard e designou todos os módulos não compatíveis como 'históricos'. Esta designação inclui uma advertência aos Órgãos Federais de que eles não devem incluir o módulo em quaisquer novas aquisições. Todas as três validações OpenSSL foram incluídas na descontinuação - o OpenSSL FIPS Object Module (certificado nº 1747), OpenSSL FIPS Object Module SE (certificado nº 2398) e OpenSSL FIPS Object Module RE (certificado nº 2473). Muitas validações e clones baseados em OpenSSL 'Private Label' criados por consultores também foram movidos para a Lista Histórica, embora alguns módulos validados por FIPS com compatibilidade de substituição tenham evitado a descontinuação, como BoringCrypto do Google e CryptoComply da SafeLogic.

O OpenSSL 3.0 restaurou o modo FIPS e passou por testes FIPS 140-2, mas com atrasos significativos: o esforço foi iniciado pela primeira vez em 2016 com o suporte da SafeLogic e mais suporte da Oracle em 2017, mas o processo tem sido desafiador. Em 20 de outubro de 2020, o OpenSSL FIPS Provider 3.0 foi adicionado à lista de implementação em teste CMVP, que refletiu um compromisso oficial com um laboratório de teste para prosseguir com uma validação FIPS 140-2. Isso resultou em uma série de certificações nos meses seguintes.

Licenciamento

O OpenSSL foi licenciado duas vezes sob a Licença OpenSSL e a Licença SSLeay, o que significa que os termos de qualquer uma das licenças podem ser usados. A licença OpenSSL é Apache License 1.0 e SSLeay License tem algumas semelhanças com uma licença BSD de 4 cláusulas . Como a licença OpenSSL era Apache License 1.0, mas não Apache License 2.0, ela requer que a frase "este produto inclui software desenvolvido pelo OpenSSL Project para uso no OpenSSL Toolkit" apareça em material publicitário e quaisquer redistribuições (Seções 3 e 6 de a Licença OpenSSL). Devido a esta restrição, a licença OpenSSL e a licença Apache 1.0 são incompatíveis com a GNU GPL . Alguns desenvolvedores GPL adicionaram uma exceção OpenSSL às suas licenças que permite especificamente o uso do OpenSSL com seus sistemas. GNU Wget e climm usam tais exceções. Alguns pacotes (como o Deluge ) modificam explicitamente a licença GPL adicionando uma seção extra no início da licença que documenta a exceção. Outros pacotes usam GnuTLS licenciado por LGPL , Botan licenciado por BSD ou NSS licenciado por MPL , que executam a mesma tarefa.

O OpenSSL anunciou em agosto de 2015 que exigiria que a maioria dos contribuidores assinassem um Contrato de Licença de Contribuidor (CLA) e que o OpenSSL seria eventualmente licenciado novamente de acordo com os termos da Licença Apache 2.0 . Esse processo teve início em março de 2017 e foi concluído em 2018.

Em 7 de setembro de 2021, o OpenSSL 3.0.0 foi lançado sob a licença Apache 2.0.

Vulnerabilidades notáveis

Negação de serviço: análise ASN.1

O OpenSSL 0.9.6k tem um bug em que certas sequências ASN.1 desencadeiam um grande número de recursões em máquinas Windows, descoberto em 4 de novembro de 2003. O Windows não conseguia lidar com grandes recursões corretamente, então o OpenSSL travaria como resultado. Ser capaz de enviar um grande número arbitrário de sequências ASN.1 faria com que o OpenSSL travasse como resultado.

Vulnerabilidade de grampeamento OCSP

Ao criar um handshake, o cliente poderia enviar uma mensagem ClientHello formatada incorretamente, levando à análise OpenSSL mais do que o final da mensagem. Atribuído o identificador CVE - 2011-0014 pelo projeto CVE, isso afetou todas as versões do OpenSSL 0.9.8h a 0.9.8q e OpenSSL 1.0.0 a 1.0.0c. Como a análise pode levar a uma leitura em um endereço de memória incorreto, é possível que o invasor cause um DoS . Também era possível que alguns aplicativos expusessem o conteúdo de extensões OCSP analisadas , fazendo com que um invasor fosse capaz de ler o conteúdo da memória que veio após o ClientHello.

Vulnerabilidade ASN.1 BIO

Ao usar funções básicas de entrada / saída (BIO) ou FILE para ler dados de formato DER não confiáveis , o OpenSSL fica vulnerável. Esta vulnerabilidade foi descoberta em 19 de abril de 2012 e foi atribuída ao identificador CVE CVE - 2012-2110 . Embora não afete diretamente o código SSL / TLS do OpenSSL, qualquer aplicativo que estava usando funções ASN.1 (particularmente d2i_X509 e d2i_PKCS12) também não foi afetado.

Ataque de recuperação de texto simples SSL, TLS e DTLS

Ao lidar com conjuntos de criptografia CBC em SSL, TLS e DTLS, o OpenSSL foi considerado vulnerável a um ataque de temporização durante o processamento MAC. Nadhem Alfardan e Kenny Paterson descobriram o problema e publicaram suas descobertas em 5 de fevereiro de 2013. A vulnerabilidade foi atribuída ao identificador CVE CVE - 2013-0169 .

Chaves privadas previsíveis (específicas do Debian)

O gerador de números pseudoaleatórios do OpenSSL adquire entropia usando métodos de programação complexos. Para evitar que a ferramenta de análise Valgrind emita avisos associados, um mantenedor da distribuição Debian aplicou um patch à variante do pacote OpenSSL do Debian, que inadvertidamente quebrou seu gerador de número aleatório, limitando o número total de chaves privadas que poderia gerar a 32.768. A versão quebrada foi incluída no lançamento do Debian de 17 de setembro de 2006 (versão 0.9.8c-1), também comprometendo outras distribuições baseadas no Debian, por exemplo o Ubuntu . Ready-to-use exploits estão facilmente disponíveis.

O erro foi relatado pelo Debian em 13 de maio de 2008. Na distribuição Debian 4.0 (etch), esses problemas foram corrigidos na versão 0.9.8c-4etch3, enquanto as correções para a distribuição Debian 5.0 (lenny) foram fornecidas na versão 0.9.8g -9.

Heartbleed

Um logotipo que representa o bug Heartbleed

As versões 1.0.1 a 1.0.1f do OpenSSL têm um grave bug de manipulação de memória em sua implementação da extensão TLS Heartbeat que pode ser usada para revelar até 64  KB da memória do aplicativo a cada pulsação ( CVE - 2014-0160 ). Ao ler a memória do servidor web, os invasores podem acessar dados confidenciais, incluindo a chave privada do servidor . Isso pode permitir que os invasores decodifiquem comunicações interceptadas anteriormente se o protocolo de criptografia usado não garantir o sigilo de encaminhamento perfeito . O conhecimento da chave privada também pode permitir que um invasor monte um ataque man-in-the-middle contra qualquer comunicação futura. A vulnerabilidade também pode revelar partes não criptografadas de solicitações e respostas confidenciais de outros usuários, incluindo cookies de sessão e senhas, que podem permitir que invasores sequestrem a identidade de outro usuário do serviço.

Na sua divulgação em 7 de abril de 2014, acreditava-se que cerca de 17% ou meio milhão dos servidores da Web seguros da Internet certificados por autoridades confiáveis eram vulneráveis ​​ao ataque. No entanto, o Heartbleed pode afetar o servidor e o cliente.

Vulnerabilidade de injeção CCS

A vulnerabilidade de injeção CCS ( CVE - 2014-0224 ) é uma vulnerabilidade de desvio de segurança que resulta de uma fraqueza nos métodos OpenSSL usados ​​para material de chave.

Esta vulnerabilidade pode ser explorada através do uso de um ataque man-in-the-middle, onde um invasor pode ser capaz de descriptografar e modificar o tráfego em trânsito. Um invasor remoto não autenticado pode explorar esta vulnerabilidade usando um handshake especialmente criado para forçar o uso de material de chave fraca. A exploração bem-sucedida pode levar a uma condição de desvio de segurança em que um invasor pode obter acesso a informações potencialmente confidenciais. O ataque só pode ser executado entre um cliente e servidor vulneráveis .

Os clientes OpenSSL são vulneráveis ​​em todas as versões do OpenSSL antes das versões 0.9.8za, 1.0.0m e 1.0.1h. Os servidores são considerados vulneráveis ​​apenas no OpenSSL 1.0.1 e 1.0.2-beta1. Os usuários de servidores OpenSSL anteriores a 1.0.1 são aconselhados a atualizar como precaução.

ClientHello sigalgs DoS

Esta vulnerabilidade ( CVE - 2015-0291 ) permite que qualquer pessoa pegue um certificado, leia seu conteúdo e o modifique com precisão para abusar da vulnerabilidade, fazendo com que um certificado bloqueie um cliente ou servidor. Se um cliente se conectar a um servidor OpenSSL 1.0.2 e renegociar com uma extensão de algoritmos de assinatura inválida, ocorrerá uma desreferência de ponteiro nulo. Isso pode causar um ataque DoS contra o servidor.

Um pesquisador de segurança de Stanford, David Ramos, teve um exploit privado e o apresentou à equipe do OpenSSL, que então corrigiu o problema.

O OpenSSL classificou o bug como um problema de alta gravidade, observando que a versão 1.0.2 foi considerada vulnerável.

Ataque de recuperação de chave em pequenos subgrupos Diffie – Hellman

Esta vulnerabilidade ( CVE - 2016-0701 ) permite, quando algumas circunstâncias particulares são atendidas, recuperar a chave privada Diffie – Hellman do servidor OpenSSL. Um pesquisador da Adobe System Security, Antonio Sanso, relatou em particular a vulnerabilidade.

O OpenSSL classificou o bug como um problema de alta gravidade, observando que apenas a versão 1.0.2 foi considerada vulnerável.

Forks

SSL aglomerado

Em 2009, após frustrações com a API OpenSSL original, Marco Peereboom, um desenvolvedor do OpenBSD na época, bifurcou a API original criando SSL aglomerado (assl), que reutiliza a API OpenSSL sob o capô, mas fornece uma interface externa muito mais simples. Desde então, ele foi descontinuado devido à bifurcação do LibreSSL por volta de 2016.

LibreSSL

Em abril de 2014, na sequência da heartbleed , membros do OpenBSD projeto bifurcada OpenSSL começando com o ramo 1.0.1g, para criar um projeto chamado LibreSSL . Na primeira semana de remoção da base de código do OpenSSL , mais de 90.000 linhas de código C foram removidas da bifurcação.

BoringSSL

Em junho de 2014, o Google anunciou seu próprio fork do OpenSSL apelidado de BoringSSL. O Google planeja cooperar com os desenvolvedores OpenSSL e LibreSSL. Desde então, o Google desenvolveu uma nova biblioteca, a Tink, baseada no BoringSSL.

Veja também

Notas

Referências

links externos