Difference between revisions of "OpenSSL"

From OnnoWiki
Jump to navigation Jump to search
(Created page with "{{Distinguish|OpenSSH}} {{Infobox software | name = OpenSSL | logo = OpenSSL logo.png | logo size = 240px | screenshot = |...")
 
Line 282: Line 282:
  
 
* [[OpenSSL: Essentials]]
 
* [[OpenSSL: Essentials]]
 +
* [[OpenSSL: CLI Introduction]]

Revision as of 15:48, 22 May 2017

Template:Distinguish Template:Infobox software

OpenSSL is a software library to be used in applications that need to secure communications over computer networks against eavesdropping or need to ascertain the identity of the party at the other end. It has found wide use in internet web servers, serving a majority of all web sites.

OpenSSL contains an open-source implementation of the SSL and TLS protocols. The core library, written in the C programming language, implements basic cryptographic functions and provides various utility functions. Wrappers allowing the use of the OpenSSL library in a variety of computer languages are available.

Versions are available for most Unix and Unix-like operating systems (including Solaris, Linux, macOS, QNX, and the various open-source BSD operating systems), OpenVMS and Microsoft Windows. IBM provides a port for the System i (OS/400).

Project history

The OpenSSL project was founded in 1998 to invent a free set of encryption tools for the code used on the Internet. It is based on a fork of SSLeay by Eric Andrew Young and Tim Hudson, development of which unofficially ended on December 17, 1998, when Young and Hudson both started to work for RSA Security.

The OpenSSL project management team consists of four people, and the entire development group consists of 11 members, out of which 10 are volunteers; there is only one full-time employee, Stephen Henson, the lead developer.<ref name="wsj" />

The project has a budget of less than $1 million a year and relies in part on donations. Steve Marquess, a former CIA consultant in Maryland started the foundation for donations and consultancy contracts and garnered sponsorship from the United States Department of Homeland Security and the United States Department of Defense.<ref name=wsj>Template:Cite news</ref>

Major version releases

OpenSSL release history<ref name=changelog>Template:Cite web</ref><ref name=releasestrat>Template:Cite web</ref>
Version Original release date Comment Last minor version
Template:Version December 23, 1998
  • Official start of the OpenSSL project
0.9.1c (December 23, 1998)
Template:Version March 22, 1999
  • Successor of 0.9.1c
0.9.2b (April 6, 1999)
Template:Version May 25, 1999
  • Successor of 0.9.2b
0.9.3a (May 27, 1999)
Template:Version August 9, 1999
  • Successor of 0.9.3a
0.9.4 (August 9, 1999)
Template:Version February 28, 2000
  • Successor of 0.9.4
0.9.5a (April 1, 2000)
Template:Version September 24, 2000
  • Successor of 0.9.5a
0.9.6m (March 17, 2004)
Template:Version December 31, 2002
  • Successor of 0.9.6m
0.9.7m (February 23, 2007)
Template:Version July 5, 2005
  • Successor of 0.9.7m
0.9.8zh (December 3, 2015)
Template:Version March 29, 2010
  • Successor of 0.9.8n
1.0.0t (December 3, 2015)
Template:Version<ref name=openssl_1.0.1_notes>Template:Cite web</ref> March 14, 2012
  • Successor of 1.0.0
  • Supported until December 31, 2016
  • RFC 6520 TLS/DTLS heartbeat support.
  • SCTP support.
  • RFC 5705 TLS key material exporter.
  • RFC 5764 DTLS-SRTP negotiation.
  • Next Protocol Negotiation.
  • PSS signatures in certificates, requests and certificate revocation lists (CRL)s.
  • Support for password based recipient info for CMS.
  • Support TLS v1.2 and TLS v1.1.
  • Preliminary FIPS capability for unvalidated 2.0 FIPS module.
  • Secure Remote Password protocol (SRP) support.
1.0.1u (September 22, 2016)
Template:Version<ref name=openssl_1.0.2_notes>Template:Cite web</ref> January 22, 2015
  • Successor of 1.0.1
  • Supported until December 31, 2019 (Long Term Support)
  • Suite B support for TLS 1.2 and DTLS 1.2
  • Support for DTLS 1.2
  • TLS automatic elliptic curve (EC) curve selection.
  • API to set TLS supported signature algorithms and curves
  • SSL_CONF configuration API.
  • TLS Brainpool support.
  • ALPN support.
  • CMS support for RSA-PSS, RSA-OAEP, ECDH and X9.42 DH.
1.0.2k (January 26, 2017)
Template:Version<ref name=openssl_1.1.0_notes>Template:Cite web</ref> August 25, 2016
  • Successor of 1.0.2h
  • Supported until April 30, 2018
  • Support for ChaCha20-Poly1305 (RFC 7539)
  • Support for extended master secret
  • Support for X25519
  • Support for DANE and Certificate Transparency
  • CCM Ciphersuites
  • SSLv2 removed
  • Kerberos ciphersuite support removed
  • RC4 and 3DES removed from DEFAULT ciphersuites in libssl
  • Remove DSS, SEED, IDEA, CAMELLIA, and AES-CCM from the DEFAULT cipherlist.
  • 40 and 56 bit cipher support removed from libssl
1.1.0e (February 16, 2017)
Template:Version<ref>https://www.openssl.org/news/changelog.html#x0</ref>
Template:Version

Algorithms

OpenSSL supports a number of different cryptographic algorithms:

Ciphers
AES, Blowfish, Camellia, SEED, CAST-128, DES, IDEA, RC2, RC4, RC5, Triple DES, GOST 28147-89<ref name="gost">Template:Cite web</ref>
Cryptographic hash functions
MD5, MD4, MD2, SHA-1, SHA-2, RIPEMD-160, MDC-2, GOST R 34.11-94,<ref name="gost" /> BLAKE2
Public-key cryptography
RSA, DSA, Diffie–Hellman key exchange, Elliptic curve, GOST R 34.10-2001<ref name="gost" />

(Perfect forward secrecy is supported using elliptic curve Diffie–Hellman since version 1.0.<ref>Template:Cite web</ref>)

FIPS 140-2 compliance

Template:As of, OpenSSL is one of two open source programs to be involved with validation under the FIPS 140-2 computer security standard by the National Institute of Standards and Technology's (NIST) Cryptographic Module Validation Program (CMVP).<ref>Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules. NIST. Retrieved 2012-12-19.</ref> (OpenSSL itself is not validated, but a component called the OpenSSL FIPS Object Module, based on OpenSSL, was created to provide many of the same capabilities).<ref>Template:Cite web</ref>

A certificate was first awarded in January 2006 but revoked in July 2006 "when questions were raised about the validated module’s interaction with outside software." The certification was reinstated in February 2007.<ref>Template:Cite web</ref>

Licensing

OpenSSL is "dual licensed" under the OpenSSL License and the SSLeay License.<ref>Template:Cite web</ref> The OpenSSL License is Apache License 1.0 and SSLeay License bears some similarity to a 4-clause BSD License. The common usage of the term dual-license is that the user may pick which license they wish to use. However, OpenSSL documentation uses the term dual-license to mean that both licenses apply.

As the OpenSSL License is Apache License 1.0, but not Apache License 2.0, it requires the phrase "this product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit" to appear in advertising material and any redistributions (Sections 3 and 6 of the OpenSSL License). Due to this restriction, the OpenSSL License and the Apache License 1.0 are incompatible with the GPL.<ref>Template:Cite web</ref> Some GPL developers have added an OpenSSL exception to their licenses specifically allowing OpenSSL to be used with their system. GNU Wget and climm both use such exceptions.<ref>Template:Cite web</ref><ref>Template:Cite web</ref> Some packages (like Deluge) explicitly modify the GPL license by adding an extra section at the beginning of the license documenting the exception.<ref>Template:Cite web</ref> Other packages use the LGPL-licensed GnuTLS and MPL-licensed NSS, both of which perform the same task.

OpenSSL announced in August 2015 that it would require most contributors to sign a Contributor License Agreement (CLA), and that OpenSSL would eventually be relicensed under the terms of Apache License 2.0.<ref>Template:Cite web</ref> This process commenced in March 2017.<ref>Template:Cite web</ref>

Notable vulnerabilities

Timing attacks on RSA Keys

On March 14, 2003, a timing attack on RSA keys was discovered, which meant a vulnerability within OpenSSL versions 0.9.7a and 0.9.6. This vulnerability was assigned the identifier CAN-2003-0147 by the Common Vulnerabilities and Exposures (CVE) project. RSA blinding was not turned on by default by OpenSSL, since it is not easily possible to when providing SSL or TLS using OpenSSL. Almost all SSL enabled Apaches were affected, along with many other applications of OpenSSL. Timing differences on the number of extra reductions along and use of Karatsuba and normal integer multiplication algorithms meant that it was possible for local and remote attackers to obtain the private key of the server.Template:Citation needed

Denial of Service ASN.1 parsing

OpenSSL 0.9.6k had a bug where certain ASN.1 sequences triggered a large number of recursions on Windows machines, discovered on November 4, 2003. Windows could not handle large recursions correctly, so OpenSSL would crash as a result. Being able to send arbitrary large numbers of ASN.1 sequences would cause OpenSSL to crash as a result. A client certificate to a SSL/TLS enabled server could accept ASN.1 sequences and crash.Template:Citation needed

OCSP stapling vulnerability

When creating a handshake, the client could send an incorrectly formatted ClientHello message, leading to OpenSSL parsing more than the end of the message. Assigned the identifier CVE-2011-0014 by the CVE project, this affected all OpenSSL versions 0.9.8h to 0.9.8q and OpenSSL 1.0.0 to 1.0.0c. Since the parsing could lead to a read on an incorrect memory address, it was possible for the attacker to cause a DOS. It was also possible that some applications expose the contents of parsed OCSP extensions, leading to an attacker being able to read the contents of memory that came after the ClientHello.<ref>Template:Cite web</ref>

ASN.1 BIO vulnerability

When using Basic Input/Output (BIO)<ref>Template:Cite web</ref> or FILE based functions to read untrusted DER format data, OpenSSL is vulnerable. This vulnerability was discovered on April 19, 2012, and was assigned the CVE identifier CVE-2012-2110. While not directly affecting the SSL/TLS code of OpenSSL, any application that was using ASN.1 functions (particularly d2i_X509 and d2i_PKCS12) were also not affected.<ref>Template:Cite web</ref>

SSL, TLS and DTLS Plaintext Recovery Attack

In handling CBC cipher-suites in SSL, TLS, and DTLS, OpenSSL was found to be vulnerable to a timing attack which arises during the MAC processing. This was found by Nadhem Alfardan and Kenny Paterson, who published their findings<ref>http://www.isg.rhul.ac.uk/tls/</ref> on February 5, 2013. The vulnerability was assigned the CVE identifier CVE-2013-0169. All versions of OpenSSL were affected, and it was only partially mitigated by the use of the OpenSSL FIPS Object Module and the FIPS mode of operation is enabled.Template:Citation needed

Predictable private keys (Debian-specific)

OpenSSL's pseudo-random number generator acquires entropy using complex programming methods, describedTemplate:By whom? as poor coding practice. In order to keep associated warnings from being issued by the Valgrind analysis tool, a maintainer of the Debian distribution applied a patch to the Debian's variant of the OpenSSL suite, which inadvertently broke its random number generator by limiting the overall number of private keys it could generate to 32,768.<ref>Template:Cite web</ref><ref>Template:Cite web</ref> The broken version was included in the Debian release of September 17, 2006 (version 0.9.8c-1), also compromising other Debian-based distributions, for example Ubuntu. Any key generated with the broken random number generator was compromised, as well as the data encrypted with such keys;Template:Citation needed moreover, ready-to-use exploits are easily available.<ref>Template:Cite web</ref>

The error was reported by Debian on May 13, 2008. On the Debian 4.0 distribution (etch), these problems were fixed in version 0.9.8c-4etch3, while fixes for the Debian 5.0 distribution (lenny) were provided in version 0.9.8g-9.<ref name="dsa-1571-1">Template:Cite web</ref>

Template:AnchorHeartbleed

Template:Main article

File:Heartbleed.svg
A logo representing the Heartbleed bug

OpenSSL versions 1.0.1 through 1.0.1f had a severe memory handling bug in their implementation of the TLS Heartbeat Extension that could be used to reveal up to 64 KB of the application's memory with every heartbeat<ref>Template:Cite web</ref><ref>Template:Cite web</ref> (CVE-2014-0160). By reading the memory of the web server, attackers could access sensitive data, including the server's private key.<ref name="hb">Template:Cite web</ref> This could allow attackers to decode earlier eavesdropped communications if the encryption protocol used does not ensure perfect forward secrecy. Knowledge of the private key could also allow an attacker to mount a man-in-the-middle attack against any future communications.<ref>Template:Cite web</ref> The vulnerability might also reveal unencrypted parts of other users' sensitive requests and responses, including session cookies and passwords, which might allow attackers to hijack the identity of another user of the service.<ref name="ipsec">Template:Cite web</ref>

At its disclosure on April 7, 2014, around 17% or half a million of the Internet's secure web servers certified by trusted authorities were believed to have been vulnerable to the attack.<ref>Template:Cite web</ref> However, Heartbleed can affect both the server and client.

Template:AnchorCCS Injection Vulnerability

CCS Injection Vulnerability (CVE-2014-0224) is a security bypass vulnerability that exists in OpenSSL. The vulnerability is due to a weakness in OpenSSL methods used for keying material.<ref>Template:Cite web</ref>

This vulnerability can be exploited through the use of a man-in-the-middle attack,<ref>Template:Cite web</ref> where an attacker may be able to decrypt and modify traffic in transit. A remote unauthenticated attacker could exploit this vulnerability by using a specially crafted handshake to force the use of weak keying material. Successful exploitation could lead to a security bypass condition where an attacker could gain access to potentially sensitive information. The attack can only be performed between a vulnerable client and server.

OpenSSL clients are vulnerable in all versions of OpenSSL before the versions 0.9.8za, 1.0.0m and 1.0.1h. Servers are only known to be vulnerable in OpenSSL 1.0.1 and 1.0.2-beta1. Users of OpenSSL servers earlier than 1.0.1 are advised to upgrade as a precaution.<ref>Template:Cite web</ref>

Template:AnchorClientHello sigalgs DoS

This vulnerability (CVE-2015-0291) allows anyone to take a certificate, read its contents and modify it accurately to abuse the vulnerability causing a certificate to crash a client or server. If a client connects to an OpenSSL 1.0.2 server and renegotiates with an invalid signature algorithms extension, a null-pointer dereference will occur. This can cause a DoS attack against the server.

A Stanford Security researcher, David Ramos had a private exploit and presented it before the OpenSSL team where they patched the issue.

OpenSSL classified the bug as a high-severity issue, noting version 1.0.2 was found vulnerable.<ref>Template:Cite web</ref>

Template:AnchorKey Recovery Attack on Diffie Hellman small subgroups

This vulnerability (CVE-2016-0701) allows, when some particular circumstances are met, to recover the OpenSSL server's private Diffie–Hellman key. An Adobe System Security researcher, Antonio Sanso, privately reported the vulnerability.

OpenSSL classified the bug as a high-severity issue, noting only version 1.0.2 was found vulnerable.<ref>Template:Cite web</ref>

Forks

Template:AnchorAgglomerated SSL

In 2009, after frustrations with the original OpenSSL API, Marco Peereboom, an OpenBSD developer at the time, forked the original API by creating Agglomerated SSL (assl), which reuses OpenSSL API under the hood, but provides a much simpler external interface.<ref>Template:Cite web</ref>

LibreSSL

Template:Main article

In April 2014 in the wake of Heartbleed, members of the OpenBSD project forked OpenSSL starting with the 1.0.1g branch, to create a project named LibreSSL.<ref name="fork">Template:Cite web</ref> In the first week of pruning the OpenSSL's codebase, more than 90,000 lines of C code had been removed from the fork.<ref>Template:Cite web</ref>

Template:AnchorBoringSSL

In June 2014, Google announced its own fork of OpenSSL dubbed BoringSSL.<ref>https://boringssl.googlesource.com/boringssl/ BoringSSL</ref> Google plans to co-operate with OpenSSL and LibreSSL developers.<ref>Template:Cite web</ref><ref>Template:Cite web</ref><ref>https://nakedsecurity.sophos.com/2014/06/24/boringssl-wants-kill-the-excitement-that-led-to-heartbleed/</ref>

See also

Template:Portal

References

"Firebase - CrunchBase". CrunchBase. Retrieved June 11, 2014.

External links

Template:Commons category


Pranala Menarik