Top Banner
SSL/TLS: история уязвимостей Лепихин Владимир Учебный центр «Информзащита»
54

SSL/TLS: история уязвимостей

Jul 25, 2015

Download

Technology

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: SSL/TLS: история уязвимостей

SSL/TLS: история уязвимостей

Лепихин Владимир

Учебный центр «Информзащита»

Page 2: SSL/TLS: история уязвимостей

Предпосылки (1)2

Page 3: SSL/TLS: история уязвимостей

Предпосылки (2)3

TLS Connection 1 TLS Connection 2

Multifunction Man-in-the-Middle gateway

Page 4: SSL/TLS: история уязвимостей

Вместо вступления…4

Page 5: SSL/TLS: история уязвимостей

Two main types of handshakes in TLS5

Протокол Согласование ключей

Аутентификация

RSA handshake RSA RSA

DH handshake DH RSA/DSA

Page 6: SSL/TLS: история уязвимостей

DH handshake6

Client Hello { …Client Random …}

Server Hello { …Server RandomServer CertificateServer DH parameter …}

ClientKeyExchange { …Client DH parameter …}

Premaster secret Premaster secret

Page 7: SSL/TLS: история уязвимостей

Server DH parameters (RFC 5246)7

Page 8: SSL/TLS: история уязвимостей

Тяжёлое наследие прошлого8

Client Hello { …Client Random …CipherSuite TLS_DHE_EXPORT….}

Page 9: SSL/TLS: история уязвимостей

Вариант атаки9

Client Hello

TLS_DHE_...

Client Hello

TLS_DHE_EXPORT...

Server Hello

TLS_DHE_...

Server Hello

TLS_DHE_EXPORT...

Server CertificateServer DH parameter (dh_p512,… )

master secret

Вычисление master secret

Server Hello Done

ClientKeyExchange

ServerFinished

Page 10: SSL/TLS: история уязвимостей

Что это было?TLS Logjam – очередной вариант атаки на SSL/TLS

https://weakdh.org/

10

Page 11: SSL/TLS: история уязвимостей

Как всё начиналось?11

… - 1994 Версия 1.0 Внутренняя разработка компании Netscape Communications

Февраль 1995

Версия 2.0

Ноябрь1996

Версия 3.0

1999 TLS 1.0 RFC 2246

2006 TLS 1.1 RFC 4346

2008 TLS 1.2 RFC 5246

Page 12: SSL/TLS: история уязвимостей

Схемы атак на SSL/TLS 12

Page 13: SSL/TLS: история уязвимостей

«Лучший» вариант13

«Многофункциональный» шлюз

3G, 4G

Page 14: SSL/TLS: история уязвимостей

Атаки на SSL

Часть 1 «Обычный» человек посередине (атаки на механизм аутентификации)

Часть 2 BEAST CRIME…

Page 15: SSL/TLS: история уязвимостей

«Обычный» человек посередине (HTTPS)

TLS Connection 1 TLS Connection 2

HTTP HTTPS

Page 16: SSL/TLS: история уязвимостей

«Обычный» человек посередине (HTTPS)

TLS Connection 1 TLS Connection 2

Основная проблема: «выдержать» проверку сертификата клиентом

Page 17: SSL/TLS: история уязвимостей

Пример 1: проверка CN

TLS Connection 1 TLS Connection 2

CN (Common Name)

www.example.com

Page 18: SSL/TLS: история уязвимостей

Пример 1: проверка CN

TLS Connection 1 TLS Connection 2

CN = www.example.com\0.evil.com

www.example.comevil.com

*\0.evil.com - ?

Page 19: SSL/TLS: история уязвимостей

Пример 2: OCSP

Запрос OCSP

tryLater (3)

Page 20: SSL/TLS: история уязвимостей

Ещё варианты

SSL Rebinding SSL Cache poisoning

http://www.google.com

https://ssl.com

foo.js

Page 21: SSL/TLS: история уязвимостей

SSL Strip

HTTP HTTPS

1. Переход в результате «редиректа»2. Переход по ссылке

Page 22: SSL/TLS: история уязвимостей

Multifunction Man-in-the-Middle gateway22

Linux Mallory apache sslstrip transparent proxy configuration …

Page 23: SSL/TLS: история уязвимостей

Пример: mallory&sslstrip23

Sslstrip Log Mallory DB

SQLite DB

Поиск&Парсинг

Page 24: SSL/TLS: история уязвимостей

Пример: mallory&sslstrip24

Просмотр результатов

Page 25: SSL/TLS: история уязвимостей

Всё, что нужно знать о шифровании Алгоритмы шифрования

Симметричные Асимметричные

Симметричные шифры Потоковые Блочные

Симметричные алгоритмы и режимы шифрования

ECB CBC OFB

DES DES-ECB DES-CBC DES-OFB

AES AES-ECB AES-CBC AES-OFB

BF BF-ECB BF-CBC BF-OFB

Page 26: SSL/TLS: история уязвимостей

Cipher Block ChainingВ режиме CBC добавляется механизм обратной связи: результаты шифрования предыдущих блоков влияют на шифрование текущего блока.

В первом блоке используется вектор инициализации (IV), передаваемый по сети в открытом виде

26

Сообщение (пакет, record)

Page 27: SSL/TLS: история уязвимостей

Вектор инициализации в TLS (RFC 5246)

Page 28: SSL/TLS: история уязвимостей

Расшифрование Пример: расшифрование 1-го блока

28

Ciphertext

Block cipher decryption

Key

IV

Plaintext

Page 29: SSL/TLS: история уязвимостей

BEASTBrowser Exploit Against SSL/TLS Attack (BEAST)

29

Page 30: SSL/TLS: история уязвимостей

Шаг 1: перехват сообщения

Ci = Encrypt (Key, Password XOR Ci-1)

30

Password

Pi

Сi

Page 31: SSL/TLS: история уязвимостей

Шаг 2: формирование сообщения

Первый блок P1 = Ci-1 XOR IV XOR Password

С1 = Encrypt (Key, Р1 XOR IV) С1 = Encrypt (Key, Ci-1 XOR Password) = Ci

31

Password

Pi

Сi

P1

С1

Page 32: SSL/TLS: история уязвимостей

POST запрос

POST /default/login.asp?folder=18 HTTP/1.1Content-Type: application/x-www-form-urlencodedContent-Length: 78

login=user1&passwd=12345&Authorize.x=25&Authorize.y=6

P O S T / d e f a u l t / l o g i n . a s p ?

f o l d e r = 1 8 H T T P / 1 . 1 \r \n C o n t

Граница блока

Page 33: SSL/TLS: история уязвимостей

CRIME

Compression Ratio Info-leak Made Easy (CRIME)

33

Page 34: SSL/TLS: история уязвимостей

POST запрос

POST / HTTP/1.1Host: example.comUser-Agent: Mozilla /5.0….Cookie: sessionid =1234567890abcdefgh

<body>

Length (encrypt(compress(header + body))

Page 35: SSL/TLS: история уязвимостей

Модифицированный POST запрос

POST / HTTP/1.1Host: example.comUser-Agent: Mozilla /5.0….Cookie: sessionid=1234567890abcdefgh

<body>

POST /sessionid =0 HTTP/1.1Host: example.comUser-Agent: Mozilla /5.0….Cookie: sessionid=1234567890abcdefgh

<body>

Page 36: SSL/TLS: история уязвимостей

Модифицированный POST запрос

POST / HTTP/1.1Host: example.comUser-Agent: Mozilla /5.0….Cookie: sessionid=1234567890abcdefgh

<body>

POST /sessionid =1 HTTP/1.1Host: example.comUser-Agent: Mozilla /5.0….Cookie: sessionid=1234567890abcdefgh

<body>

Page 37: SSL/TLS: история уязвимостей

Фрагментированный запрос

POST /Padddddddddding HTTP/1.1Host: example.comUser-Agent: Mozilla /5.0….Cookie: sessionid=1

234567890abcdefgh

<body>

Page 38: SSL/TLS: история уязвимостей

TIME – продолжение темы

Timing Info-leak Made Easy (TIME)

38

GET /somefile.html HTTP/1.1User-Agent: Mozilla /5.0….

HTTP/1.1 200 OKContent-Length: 340Content-Type: text/htmlLast-Modified: Wed, 10 Jul 2002 09:42:51 GMTServer: Microsoft-IIS/6.0

<HTML><HEAD>…..

Page 39: SSL/TLS: история уязвимостей

Критерии сравнения39

Техника плавающего окна для ТСР

Page 40: SSL/TLS: история уязвимостей

BREACH Browser Reconnaissance & Exfiltration via Adaptive Compression of Hypertext (BREACH)

40

GET /somefile.html HTTP/1.1User-Agent: Mozilla /5.0….

HTTP/1.1 200 OKContent-Length: 340Content-Type: text/htmlLast-Modified: Wed, 10 Jul 2002 09:42:51 GMTServer: Microsoft-IIS/6.0

<HTML><HEAD>…..

Page 41: SSL/TLS: история уязвимостей

LUCKY 1341

Payload MAC Padding

Шифртекст

Page 42: SSL/TLS: история уязвимостей

«Очередной» блок42

Блок Ci

POST /path Cookie: name=value...\r\n\r\nbody ‖ 20byteMAC ‖ padding

Шифруемое сообщение (запрос)

P O S T / p a t h C o o k i e :

Граница блока

Page 43: SSL/TLS: история уязвимостей

Примеры заполнителей43

G E T 5 5 5 5 5

Граница блока

P O S T 4 4 4 4

P R O T O C O L S 7 7 7 7 7 7 7

P R O T O C O L 8 8 8 8 8 8 8 8

Page 44: SSL/TLS: история уязвимостей

Вариант атаки

44

Заполнитель корректный?

Шифртекст

Сообщение об ошибке

Page 45: SSL/TLS: история уязвимостей

Расшифрование Происходит с использованием предыдущего блока

45

Ciphertext2

Block cipher decryption

Key

Ciphertext1

Plaintext

предыдущий

текущий

Кто здесь?

Ciphertext1 XOR Plaintext

Page 46: SSL/TLS: история уязвимостей

Ещё раз по-другому46

Вычисление Р1 - РN

P1 = Decrypt (Key, Ci) XOR Ci-1

Проверка и удаление заполнителя

Проверка и удаление МАС

Расшифрованное сообщение

Page 47: SSL/TLS: история уязвимостей

Формирование Ciphertext1Меняем последний байт

47

Ciphertext2

Block cipher decryption

Key

Plaintext

текущий

Кто здесь?

256 попыток

Ciphertext1

… … … … … 0х00

Page 48: SSL/TLS: история уязвимостей

Формирование Ciphertext1Меняем последний байт

48

0x1

Ciphertext2

Ciphertext1 (IV)

Plaintext

Кто здесь?

Decrypt

Меняем

Корректный заполнитель

Page 49: SSL/TLS: история уязвимостей

The POODLE Attack

49

Padding Oracle On Downgraded Legacy Encryption

CVE-2014-3566

В отличие от BEAST и Lucky 13, не имеет workaround

Page 50: SSL/TLS: история уязвимостей

The POODLE Attack

50

Многие реализации TLS в целях обратной совместимости поддерживают SSL 3.0

Как правило, в процессе TLS Handshake выбирается максимальная поддерживаемая обеими сторонами версия

Многие TLS-клиенты используют так называемый «downgrade dance»: если связь не устанавливается, делается новая попытка, но уже по более старому протоколу

SSL 3.0

TLS 1.2

Fail

OK

Page 51: SSL/TLS: история уязвимостей

The POODLE Attack51

Нарушитель может намеренно «помешать» установлению соединения и создать условия для выбора SSL 3.0

Далее могут быть использованы уязвимости SSL 3.0, в частности, padding oracle attack

Page 52: SSL/TLS: история уязвимостей

Небольшое дополнение: SSL Renegotiation Attack

Page 53: SSL/TLS: история уязвимостей

SSL Renegotiation Attack

TLS Handshake 11

2

TLS Handshake 2

3

GET /example.com/sendmoney

4

renegotiation

5

6GET /example.com/sendmoney

Page 54: SSL/TLS: история уязвимостей

Возвращаясь к Logjam: FREAK54

FREAK (Factoring Related Attack on Keys)