Post

SSL/TLS 버전 취약성 (with. SSL_Labs, Testssl)

[0x00] SSL/TLS


SSL

SSL(Secure Sockets Layer)은 네트워크 통신에서 보안을 제공하는 프로토콜로, 데이터를 암호화하여 안전한 전송을 가능하게 한다.

TLS

TLS(Transport Layer Security)는 SSL의 후속 버전으로, 더 안전하고 강력한 암호화 방법을 제공하여 데이터의 안전성을 강화한다. TLS는 현재 주로 웹 통신에서 사용되며, HTTPS(SSL/TLS를 이용한 HTTP)의 기본적인 보안 기술로 활용된다.

다만 위의 SSL/TLS를 사용함에 있어 취약점들이 발견되어, 버전 관리에 유의해야 한다.

[0x01] Check Version


Openssl

아래와 같이 버전을 지정하여 확인 가능

1
2
3
4
openssl s_client -connect google.com:443 -tls1
openssl s_client -connect google.com:443 -tls1_1
openssl s_client -connect google.com:443 -tls1_2
openssl s_client -connect google.com:443 -tls1_3

대상 버전 미지원 시 아래와 같은 형태로 에러가 나타난다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
└─# openssl s_client -connect www.test.com:443 -tls1_3
CONNECTED(00000003)
40B76E358F7F0000:error:0A000410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:../ssl/record/rec_layer_s3.c:1586:SSL alert number 40
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 251 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
This TLS version forbids renegotiation.
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---

Website

아래와 같이 ssl 검사 사이트를 통해 확인이 가능하며, 각 버전별로 어떠한 점이 취약한지도 보여준다.

Testssl

취약한 ssl/tls 버전 확인과 관련하여 testssl도 좋은 듯하여 내용을 추가한다. 우선 git을 통해 설치해주어야 한다.

1
git clone --depth 1 https://github.com/drwetter/testssl.sh.git

다운로드가 되었다면, 아래와 같이 대상과 포트를 지정해주면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌──(root㉿kali)-[/home/user/testssl.sh]
└─# ./testssl.sh testmyhome.com:443

###########################################################
    testssl.sh       3.2rc3 from https://testssl.sh/dev/
    (a2fdfb0 2024-02-28 10:22:11)

      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/

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

지원하는 버전 정보가 아래와 같이 나온다.

1
2
3
4
5
6
7
8
 SSLv2      not offered (OK)
 SSLv3      not offered (OK)
 TLS 1      offered (deprecated)
 TLS 1.1    offered (deprecated)
 TLS 1.2    offered (OK)
 TLS 1.3    not offered and downgraded to a weaker protocol
 NPN/SPDY   not offered
 ALPN/HTTP2 not offered

취약한 CVE가 있는지에 대한 정보도 출력된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 Heartbleed (CVE-2014-0160)                not vulnerable (OK), timed out
 CCS (CVE-2014-0224)                       not vulnerable (OK)
 Ticketbleed (CVE-2016-9244), experiment.  not vulnerable (OK), no session ticket extension
 ROBOT                                     not vulnerable (OK)
 Secure Renegotiation (RFC 5746)           supported (OK)
 Secure Client-Initiated Renegotiation     VULNERABLE (NOT ok), DoS threat (10 attempts)
 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)
 TLS_FALLBACK_SCSV (RFC 7507)              Downgrade attack prevention supported (OK)
 SWEET32 (CVE-2016-2183, CVE-2016-6329)    VULNERABLE, uses 64 bit block ciphers
 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=CC487D6793B486502A9E1DDB26AA4DF1B993C7830354A47E0DE22849F47D55B7
 LOGJAM (CVE-2015-4000), experimental      not vulnerable (OK): no DH EXPORT ciphers, no DH key detected with <= TLS 1.2
 BEAST (CVE-2011-3389)                     TLS1: ECDHE-RSA-AES256-SHA AES256-SHA CAMELLIA256-SHA ECDHE-RSA-AES128-SHA AES128-SHA SEED-SHA CAMELLIA128-SHA
                                                 IDEA-CBC-SHA ECDHE-RSA-DES-CBC3-SHA DES-CBC3-SHA
                                           VULNERABLE -- but also supports higher protocols  TLSv1.1 TLSv1.2 (likely mitigated)
 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) - CAMELLIA or ECDHE_RSA GCM ciphers found
 RC4 (CVE-2013-2566, CVE-2015-2808)        VULNERABLE (NOT ok): ECDHE-RSA-RC4-SHA RC4-SHA RC4-MD5

[0x02] Vulnerable Version


주로 사용되는 SSL/TLS 버전은 다음과 같다.

  • SSL 2.0: 매우 취약하여 더 이상 권장되지 않습니다. 사용을 피해야 함
  • SSL 3.0: POODLE (Padding Oracle On Downgraded Legacy Encryption) 취약점으로 인해 안전하지 않아 더 이상 권장되지 않음
  • TLS 1.0: BEAST (Browser Exploit Against SSL/TLS) 공격에 취약하므로 사용을 피하는 것이 좋음
  • TLS 1.1: 보안 결함이 발견되어 현재는 사용이 권장되지 않습니다.
  • TLS 1.2: 현재까지 널리 사용되며 안전한 통신을 위한 권장 사양 중 하나
  • TLS 1.3: 최신 버전으로, 보안성과 성능 면에서 향상되었습니다. 최신 웹 브라우저와 서버는 TLS 1.3을 지원하는 경우가 많음

[0x03] Exploitation


중간자 공격 (Man-in-the-Middle, MITM)

  • 취약한 SSL/TLS 버전은 암호화 강도가 낮거나 취약할 수 있어, 공격자가 중간에서 통신을 감시하거나 조작할 수 있는 기회를 제공
  • 공격자가 암호화된 연결을 해독하고 수정하여 사용자 정보를 탈취하거나 악성 코드를 주입

암호 해독 (Decryption)

  • 취약한 SSL/TLS 버전은 암호화된 데이터의 해독을 쉽게 만들 수 있어, 이를 통해 공격자는 중요한 정보를 빠르게 탈취하거나 악용 가능

POODLE (Padding Oracle On Downgraded Legacy Encryption)

  • SSL 3.0의 취약점을 이용한 공격으로, 공격자가 암호화된 통신의 끝부분에서 패딩을 조작하여 정보를 추출 가능

BEAST (Browser Exploit Against SSL/TLS)

  • TLS 1.0의 취약점을 이용한 공격으로, 공격자가 암호화된 쿠키 정보 등을 탈취 가능

FREAK (Factoring RSA Export Keys)

  • 이전에 Export용으로 만들어진 RSA 키를 사용하는 취약한 시스템을 이용한 공격

DROWN (Decrypting RSA with Obsolete and Weakened eNcryption)

  • TLS 및 SSL 버전 간 공격으로, 하위 호환성을 이용하여 암호화된 정보를 탈취하는 공격

[0x04] Reference


  • https://www.ssllabs.com/ssltest/analyze.html
  • https://aday7.tistory.com/entry/HTTPS-SSLTLS-%EB%B3%B4%EC%95%88-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-TLS-12-TLS-13
This post is licensed under CC BY 4.0 by the author.