Analisis de certificados SSL

El análisis de certificados SSL/TLS es crucial para asegurar que las comunicaciones en línea sean seguras y privadas. SSL (Secure Sockets Layer) y su sucesor TLS (Transport Layer Security) son protocolos que cifran los datos transmitidos entre un cliente (como un navegador web) y un servidor, protegiendo la información contra interceptaciones y ataques man-in-the-middle (MITM).

Importancia del Análisis de Certificados SSL/TLS

  1. Verificación de la Validez del Certificado:

    • Asegura que el certificado no ha expirado y es emitido por una autoridad de certificación (CA) confiable.

  2. Comprobación de la Configuración:

    • Evalúa la configuración del servidor para asegurar que utiliza versiones seguras de SSL/TLS y que los cifrados utilizados son robustos.

  3. Detección de Vulnerabilidades:

    • Identifica posibles vulnerabilidades como soporte para protocolos obsoletos (SSLv2, SSLv3) o cifrados débiles (RC4).

  4. Cumplimiento Normativo:

    • Ayuda a garantizar que las prácticas de cifrado cumplan con estándares y regulaciones de seguridad.

  5. Prevención de Ataques:

    • Detecta configuraciones que podrían ser explotadas en ataques como POODLE, Heartbleed, y BEAST.

Herramienta: testssl.sh

testssl.sh es una herramienta de línea de comandos de código abierto que permite realizar pruebas de seguridad en servidores SSL/TLS. Proporciona una evaluación completa de la configuración de seguridad de un servidor, incluyendo la validación del certificado, la compatibilidad de cifrados, y la detección de vulnerabilidades conocidas.

Comando de testssl.sh y Ejemplo de Salida

Para realizar un análisis de un servidor utilizando testssl.sh, se utiliza el siguiente comando:

Comando

./testssl.sh --wide --tls 192.168.1.50

Explicación del Comando

  • ./testssl.sh: Ejecuta el script testssl.sh.

  • --wide: Muestra un reporte detallado y extendido.

  • --tls: Limita las pruebas a las versiones de TLS, excluyendo SSL.

  • 192.168.1.50: La dirección IP del servidor objetivo.

Ejemplo de Salida

./testssl https://spartan-cybersec.com/


###########################################################
    testssl       3.2rc3 from https://testssl.sh/dev/

      This program is free software. Distribution and
             modification under GPLv2 permitted.
      USAGE w/o ANY WARRANTY. USE IT AT YOUR OWN RISK!

       Please file bugs @ https://testssl.sh/bugs/

###########################################################

 Using "OpenSSL 3.1.4 24 Oct 2023 (Library: OpenSSL 3.1.4 24 Oct 2023)" [~94 ciphers]
 on SPARTAN-SERVER:/usr/bin/openssl
 (built: "Nov 25 20:35:59 2023", platform: "debian-amd64")


Testing all IPv4 addresses (port 443): 3.163.49.26 3.163.49.82 3.163.49.121 3.163.49.8
--------------------------------------------------------------------------------
 Start 2024-05-18 14:52:01                -->> 3.163.49.26:443 (spartan-cybersec.com) <<--

 Further IP addresses:   3.163.49.82 3.163.49.121 3.163.49.8 2600:9000:2672:2000:1c:9b0d:4540:93a1
                         2600:9000:2672:c200:1c:9b0d:4540:93a1 2600:9000:2672:8c00:1c:9b0d:4540:93a1
                         2600:9000:2672:2800:1c:9b0d:4540:93a1 2600:9000:2672:5e00:1c:9b0d:4540:93a1
                         2600:9000:2672:2a00:1c:9b0d:4540:93a1 2600:9000:2672:3c00:1c:9b0d:4540:93a1
                         2600:9000:2672:9400:1c:9b0d:4540:93a1
 rDNS (3.163.49.26):     server-3-163-49-26.bog51.r.cloudfront.net.
 Service detected:       HTTP


 Testing protocols via sockets except NPN+ALPN

 SSLv2      not offered (OK)
 SSLv3      not offered (OK)
 TLS 1      not offered
 TLS 1.1    offered (deprecated)
 TLS 1.2    offered (OK)
 TLS 1.3    offered (OK): final
 NPN/SPDY   not offered
 ALPN/HTTP2 h2, http/1.1 (offered)

 Testing cipher categories

 NULL ciphers (no encryption)                      not offered (OK)
 Anonymous NULL Ciphers (no authentication)        not offered (OK)
 Export ciphers (w/o ADH+NULL)                     not offered (OK)
 LOW: 64 Bit + DES, RC[2,4], MD5 (w/o export)      not offered (OK)
 Triple DES Ciphers / IDEA                         not offered
 Obsoleted CBC ciphers (AES, ARIA etc.)            offered
 Strong encryption (AEAD ciphers) with no FS       offered (OK)
 Forward Secrecy strong encryption (AEAD ciphers)  offered (OK)


 Testing server's cipher preferences

Hexcode  Cipher Suite Name (OpenSSL)       KeyExch.   Encryption  Bits     Cipher Suite Name (IANA/RFC)
-----------------------------------------------------------------------------------------------------------------------------
SSLv2
 -
SSLv3
 -
TLSv1
 -
TLSv1.1 (server order)
 xc013   ECDHE-RSA-AES128-SHA              ECDH 253   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
 xc014   ECDHE-RSA-AES256-SHA              ECDH 253   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
 x35     AES256-SHA                        RSA        AES         256      TLS_RSA_WITH_AES_256_CBC_SHA
 x2f     AES128-SHA                        RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA
TLSv1.2 (server order)
 xc02f   ECDHE-RSA-AES128-GCM-SHA256       ECDH 253   AESGCM      128      TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
 xc027   ECDHE-RSA-AES128-SHA256           ECDH 253   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
 xc013   ECDHE-RSA-AES128-SHA              ECDH 253   AES         128      TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
 xc030   ECDHE-RSA-AES256-GCM-SHA384       ECDH 253   AESGCM      256      TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
 xcca8   ECDHE-RSA-CHACHA20-POLY1305       ECDH 253   ChaCha20    256      TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
 xc028   ECDHE-RSA-AES256-SHA384           ECDH 253   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
 xc014   ECDHE-RSA-AES256-SHA              ECDH 253   AES         256      TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA
 x9c     AES128-GCM-SHA256                 RSA        AESGCM      128      TLS_RSA_WITH_AES_128_GCM_SHA256
 x9d     AES256-GCM-SHA384                 RSA        AESGCM      256      TLS_RSA_WITH_AES_256_GCM_SHA384
 x3c     AES128-SHA256                     RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA256
 x35     AES256-SHA                        RSA        AES         256      TLS_RSA_WITH_AES_256_CBC_SHA
 x2f     AES128-SHA                        RSA        AES         128      TLS_RSA_WITH_AES_128_CBC_SHA
TLSv1.3 (server order)
 x1301   TLS_AES_128_GCM_SHA256            ECDH 253   AESGCM      128      TLS_AES_128_GCM_SHA256
 x1302   TLS_AES_256_GCM_SHA384            ECDH 253   AESGCM      256      TLS_AES_256_GCM_SHA384
 x1303   TLS_CHACHA20_POLY1305_SHA256      ECDH 253   ChaCha20    256      TLS_CHACHA20_POLY1305_SHA256

 Has server cipher order?     yes (OK) -- TLS 1.3 and below


 Testing robust forward secrecy (FS) -- omitting Null Authentication/Encryption, 3DES, RC4

 FS is offered (OK)           TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 ECDHE-RSA-AES256-GCM-SHA384
                              ECDHE-RSA-AES256-SHA384 ECDHE-RSA-AES256-SHA ECDHE-RSA-CHACHA20-POLY1305
                              TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256 ECDHE-RSA-AES128-SHA256
                              ECDHE-RSA-AES128-SHA
 Elliptic curves offered:     prime256v1 secp384r1 X25519
 TLS 1.2 sig_algs offered:    RSA-PSS-RSAE+SHA256 RSA-PSS-RSAE+SHA384 RSA-PSS-RSAE+SHA512 RSA+SHA256 RSA+SHA384
                              RSA+SHA512 RSA+SHA224 RSA+SHA1
 TLS 1.3 sig_algs offered:    RSA-PSS-RSAE+SHA256 RSA-PSS-RSAE+SHA384 RSA-PSS-RSAE+SHA512

 Testing server defaults (Server Hello)

 TLS extensions (standard)    "server name/#0" "EC point formats/#11" "renegotiation info/#65281" "status request/#5"
                              "session ticket/#35" "supported versions/#43" "key share/#51"
                              "application layer protocol negotiation/#16" "extended master secret/#23"
 Session Ticket RFC 5077 hint 86400 seconds, session tickets keys seems to be rotated < daily
 SSL Session ID support       yes
 Session Resumption           Tickets: yes, ID: no
 TLS clock skew               Random values, no fingerprinting possible
 Certificate Compression      none
 Client Authentication        none
 Signature Algorithm          SHA256 with RSA
 Server key size              RSA 2048 bits (exponent is 65537)
 Server key usage             Digital Signature, Key Encipherment
 Server extended key usage    TLS Web Server Authentication, TLS Web Client Authentication
 Serial                       08586F309D1248A22B9E9DE330B61FE5 (OK: length 16)
 Fingerprints                 SHA1 2DAF576A098A32A153F9EF71AB78D6DFF1FE571D
                              SHA256 2E3C8EE0D45C37CF717A418D431E52AB58B923D77DABAE88F140602A3BF62B4C
 Common Name (CN)             spartan-cybersec.com  (request w/o SNI didn't succeed)
 subjectAltName (SAN)         spartan-cybersec.com www.spartan-cybersec.com
 Trust (hostname)             Ok via SAN and CN (SNI mandatory)
 Chain of trust               Ok
 EV cert (experimental)       no
 Certificate Validity (UTC)   361 >= 60 days (2024-04-15 00:00 --> 2025-05-14 23:59)
 ETS/"eTLS", visibility info  not present
 Certificate Revocation List  http://crl.r2m03.amazontrust.com/r2m03.crl
 OCSP URI                     http://ocsp.r2m03.amazontrust.com
 OCSP stapling                offered, not revoked
 OCSP must staple extension   --
 DNS CAA RR (experimental)    not offered
 Certificate Transparency     yes (certificate extension)
 Certificates provided        4
 Issuer                       Amazon RSA 2048 M03 (Amazon from US)
 Intermediate cert validity   #1: ok > 40 days (2030-08-23 22:26). Amazon RSA 2048 M03 <-- Amazon Root CA 1
                              #2: ok > 40 days (2037-12-31 01:00). Amazon Root CA 1 <-- Starfield Services Root Certificate Authority - G2
                              #3: ok > 40 days (2034-06-28 17:39). Starfield Services Root Certificate Authority - G2 <--
 Intermediate Bad OCSP (exp.) Ok


 Testing HTTP header response @ "/"

 HTTP Status Code             200 OK
 HTTP clock skew              -1 sec from localtime
 Strict Transport Security    2592000 s = 30 days is too short ( >= 15552000 seconds recommended), just this domain
 Public Key Pinning           --
 Server banner                Apache
 Application banner           --
 Cookie(s)                    (none issued at "/")
 Security headers             X-Frame-Options: sameorigin
                              X-Content-Type-Options: nosniff
                              Permissions-Policy: accelerometer=(), autoplay=(), camera=(), encrypted-media=(),
                                fullscreen=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(),
                                payment=(), usb=()
                              X-XSS-Protection: 1
                              Referrer-Policy: no-referrer
 Reverse Proxy banner         X-Cache: Miss from cloudfront
                              Via: 1.1 1c2461c064ac06ff0bdbcf3b708e2514.cloudfront.net (CloudFront)


 Testing vulnerabilities

 Heartbleed (CVE-2014-0160)                not vulnerable (OK), no heartbeat extension
 CCS (CVE-2014-0224)                       not vulnerable (OK)
 Ticketbleed (CVE-2016-9244), experiment.  not vulnerable (OK), no session tickets
 ROBOT                                     not vulnerable (OK)
 Secure Renegotiation (RFC 5746)           supported (OK)
 Secure Client-Initiated Renegotiation     likely not vulnerable (OK), timed out
 CRIME, TLS (CVE-2012-4929)                not vulnerable (OK)
 BREACH (CVE-2013-3587)                    potentially NOT ok, "gzip" HTTP compression detected. - only supplied "/" tested
                                           Can be ignored for static pages or if no secrets in the page
 POODLE, SSL (CVE-2014-3566)               not vulnerable (OK), no SSLv3 support
 TLS_FALLBACK_SCSV (RFC 7507)              Check failed, unexpected result , run testssl -Z --debug=1 and look at /tmp/testssl.bVJ2UX/*tls_fallback_scsv.txt
 SWEET32 (CVE-2016-2183, CVE-2016-6329)    not vulnerable (OK)
 FREAK (CVE-2015-0204)                     not vulnerable (OK)
 DROWN (CVE-2016-0800, CVE-2016-0703)      not vulnerable on this host and port (OK)
                                           make sure you don't use this certificate elsewhere with SSLv2 enabled services, see
                                           https://search.censys.io/search?resource=hosts&virtual_hosts=INCLUDE&q=2E3C8EE0D45C37CF717A418D431E52AB58B923D77DABAE88F140602A3BF62B4C
 LOGJAM (CVE-2015-4000), experimental      not vulnerable (OK): no DH EXPORT ciphers, no DH key detected with <= TLS 1.2
 BEAST (CVE-2011-3389)                     not vulnerable (OK), no SSL3 or TLS1
 LUCKY13 (CVE-2013-0169), experimental     potentially VULNERABLE, uses cipher block chaining (CBC) ciphers with TLS. Check patches
 Winshock (CVE-2014-6321), experimental    not vulnerable (OK)
 RC4 (CVE-2013-2566, CVE-2015-2808)        no RC4 ciphers detected (OK)


 Running client simulations (HTTP) via sockets

 Browser                      Protocol  Cipher Suite Name (OpenSSL)       Forward Secrecy
------------------------------------------------------------------------------------------------
 Android 6.0                  TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Android 7.0 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Android 8.1 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Android 9.0 (native)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Android 10.0 (native)        TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Android 11 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Android 12 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Chrome 79 (Win 10)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Chrome 101 (Win 10)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Firefox 66 (Win 8.1/10)      TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Firefox 100 (Win 10)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 IE 6 XP                      No connection
 IE 8 Win 7                   No connection
 IE 8 XP                      No connection
 IE 11 Win 7                  TLSv1.2   ECDHE-RSA-AES128-SHA256           256 bit ECDH (P-256)
 IE 11 Win 8.1                TLSv1.2   ECDHE-RSA-AES128-SHA256           256 bit ECDH (P-256)
 IE 11 Win Phone 8.1          TLSv1.2   ECDHE-RSA-AES128-SHA256           256 bit ECDH (P-256)
 IE 11 Win 10                 TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Edge 15 Win 10               TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Edge 101 Win 10 21H2         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Safari 12.1 (iOS 12.2)       TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Safari 13.0 (macOS 10.14.6)  TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Safari 15.4 (macOS 12.3.1)   TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Java 7u25                    No connection
 Java 8u161                   TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Java 11.0.2 (OpenJDK)        TLSv1.3   TLS_AES_128_GCM_SHA256            256 bit ECDH (P-256)
 Java 17.0.3 (OpenJDK)        TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 go 1.17.8                    TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 LibreSSL 2.8.3 (Apple)       TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 OpenSSL 1.0.2e               TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 OpenSSL 1.1.0l (Debian)      TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 OpenSSL 1.1.1d (Debian)      TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 OpenSSL 3.0.3 (git)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Apple Mail (16.0)            TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Thunderbird (91.9)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)

Interpretación de la Salida

La salida del comando testssl.sh proporciona una evaluación detallada del estado de seguridad SSL/TLS del dominio spartan-cybersec.com. Aquí se interpreta la información más relevante:

Información General

  • Versiones Protocolares:

    • SSLv2 y SSLv3: No se ofrecen, lo cual es positivo ya que estos protocolos están obsoletos y son inseguros.

    • TLS 1.0: No se ofrece, lo cual es bueno ya que también está desaconsejado.

    • TLS 1.1: Se ofrece, pero es un protocolo obsoleto y debería ser deshabilitado.

    • TLS 1.2 y TLS 1.3: Se ofrecen y son las versiones recomendadas para uso seguro.

  • Cifrado:

    • Cifrado Nulo, Anónimo y Exportación: No se ofrecen, lo cual es positivo.

    • Cifrado Bajo y CBC Obsoleto: Ofrecido, pero debería ser deshabilitado en favor de cifrados más modernos.

    • Cifrado Fuerte y Forward Secrecy: Ofrecido, lo cual es positivo.

Preferencias de Cifrado del Servidor

  • Orden de Cifrados:

    • TLS 1.1 y 1.2: Listas de cifrados adecuados se ofrecen, con algunos cifrados CBC obsoletos que deben ser eliminados.

    • TLS 1.3: Se ofrecen cifrados fuertes y modernos (AES_128_GCM_SHA256, AES_256_GCM_SHA384, CHACHA20_POLY1305_SHA256).

  • Forward Secrecy (FS):

    • Se ofrece FS con cifrados fuertes como ECDHE-RSA-AES256-GCM-SHA384 y TLS_CHACHA20_POLY1305_SHA256, lo cual es positivo.

Certificado del Servidor

  • Información del Certificado:

    • Nombre Común (CN): spartan-cybersec.com

    • SAN (Subject Alternative Name): spartan-cybersec.com, www.spartan-cybersec.com

    • Emisor: Amazon RSA 2048 M03

    • Validez: Válido hasta el 14 de mayo de 2025 (más de 60 días restantes)

    • OCSP y CRL: Certificado no revocado, con OCSP Stapling ofrecido.

Configuración del Servidor

  • Renegociación Segura: Soportada, lo cual es positivo.

  • Resúmenes TLS (RFC 5077): Soportado, pero con tickets rotados diariamente.

  • Certificados Intermedios y Raíz: Correctamente configurados, con validez adecuada.

  • Cabeceras HTTP: Implementación de cabeceras de seguridad como X-Frame-Options, X-Content-Type-Options, Permissions-Policy, X-XSS-Protection, Referrer-Policy.

Vulnerabilidades

  • Heartbleed, CCS, Ticketbleed, ROBOT: No vulnerable.

  • POODLE, CRIME, DROWN: No vulnerable.

  • BREACH: Potencialmente vulnerable debido a la compresión HTTP gzip, pero sólo relevante si se transmiten datos sensibles.

  • LUCKY13: Potencialmente vulnerable debido al uso de cifrados CBC con TLS.

  • RC4, FREAK, SWEET32: No vulnerable.

Simulaciones de Cliente

  • Compatibilidad: Compatible con navegadores modernos (Chrome, Firefox, Safari, Edge) y versiones de Android e iOS.

  • Cifrado Fuerte: Utiliza cifrados fuertes y modernos, garantizando la seguridad en las comunicaciones.

Última actualización