1 of 25

Padding Oracle

Автор Сценария:

Кирилл Шипулин

MUCH WOW

SUCH CRYPTO

VERY EXCITED

SO PADDING

TOO CBC

VERY PKCS

VERY ORACLE

MANY CLEARTEXT

2 of 25

Padding Oracle - Chosen ciphertext attack

1

SEND CIPHERTEXT #1

2

ERROR / SUCCESS

3

MODIFY CIPHERTEXT #1

SEND CIPHERTEXT #2

3 of 25

Padding дополняет данные до размера блока

В режиме блочного шифрования (ECB, CBC) данные дополняются до размера блока

8 bytes

PKCS #7

4 of 25

Неправильный Padding приводит к ошибке

PKCS7 padding is incorrect

500 Internal Server Error

etc...

5 of 25

Последнее условие - режим CBC

6 of 25

Режим ECB не всегда вам подходит

7 of 25

В CBC можем изменять байты паддинга

8 of 25

CORRECT PADDING

DECRYPTION

D ⊕ 0xD1

0x03

9 of 25

STILL CORRECT

DECRYPTION

D ⊕ 0xD1

0x03

D ⊕ 0xD2

0x01

10 of 25

Мы не знаем, какой Padding имеет шифротекст

Перебираем байт предыдущего блока

Y = 0x00..0xFF

Correct Padding

Z = 0x01

11 of 25

Мы не знаем, какой Padding имеет шифротекст

Перебираем байт предыдущего блока

Y1, Z1 = 0x01

Z = (Y1 ⊕ Z1) ⊕ Y

Z = (Y1 ⊕ 1) ⊕ Y

12 of 25

Пример

Перебираем красный байт, пока не исчезнет ошибка паддинга

13 of 25

Пример

Перебираем красный байт, пока не исчезнет ошибка паддинга

14 of 25

Пример

X = (Y1 ⊕ 1) ⊕ Y = 0x3B ⊕ 1 ⊕ 0x3D = 0x07

15 of 25

Далее так же перебираем следующий байт

XX = Y1 ⊕ Z1 ⊕ 0x02

Y2, Z2 = 0x02

16 of 25

Раскрываем весь текст последнего блока

17 of 25

Затем двигаемся на блок влево

18 of 25

Пример: Apache Axis2 XML Encryption

IV C1 C2 ...

Байты с конца “съедаются” без проверки

Берем IV, C1

Перебираем правый байт IV

Получаем 16 без ошибки

19 of 25

Пример: Apache Axis2 XML Encryption

Затем идем на блок вправо

IV = C1

C1 = C2

Перебираем байты в IV чтобы найти ошибки

xxxx < xxxxxxxxxxx - Error

20 of 25

Другой формат Padding тоже уязвим?

ISO 10126

ANSI X.923

ISO/IEC 7816-4

21 of 25

Другой формат Padding тоже уязвим?

ANSI X.923

Как и в PKCS7,5 - все байты паддинга проверяются.

Атакуем также

22 of 25

Другой формат Padding тоже уязвим?

ISO/IEC 7816-4

Как и в PKCS7,5 - все байты паддинга проверяются.

Атакуем также

23 of 25

Другой формат Padding тоже уязвим?

ISO 10126

Воспользоваться знанием о формате сообщения после дешифрования

(XML Encryption)

Двигать байты вправо, если можем шифровать “свои” данные

24 of 25

Encrypt-then-MAC поможет защититься

  • MAC-then-Encrypt - Так делает TLS
  • Encrypt-and-MAC - Так делает SSH
  • Encrypt-then-MAC - Так советуют делать

Холиварный достаточно вопрос

25 of 25

Вопросы

kirill_wow

kirill_wow

MUCH WOW

SUCH CRYPTO

VERY EXCITED

SO PADDING

TOO CBC

VERY PKCS

VERY ORACLE

MANY CLEARTEXT