Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo

1

Некриптографическоеисследование носителей православной криптографии,или как мы проверяли безопасность хранения ключей на токенах… 
Сергей СолдатовМихаил Егоров 
КОНФЕРЕНЦИЯ 
13-14 НОЯБРЯ 
WWW.ZERONIGHTS.RU

2

Зачем нужны токены? 
для хранения ключей!

3

Зачем нужны токены? 
Неизвлекаемогодля хранения ключей! 
Ключ не извлекается из памяти приложения 
Ключ не извлекается из трафика до приложения 
Ключ не извлекается из токенаимитацией работы легитимного приложения

4

Зачем нужны токены? 
Неизвлекаемогодля хранения ключей! 
Ключ не извлекается из памяти приложения 
Ключ не извлекается из трафика до приложения 
Ключ не извлекается из токенаимитацией работы легитимного приложения 
Всеоперации с ключом должны выполняться в токене=> токенпо спецификации должен поддерживатьиспользуемые криптографические алгоритмы (есть сложности, если токензападного производства)

5

Основной принцип (ОП) 
Ключ не должен покидать токен, 
за исключением, может быть, легального экспорта

6

Работа с токенамив Windows 
Winscard.dllот Microsoft (стандартный компонент Windows) 
CSP 
MS CryptoAPI 
Приложение 
PKCS#11 от производителя 
Какое-тодругое API от производителя 
APDU* 
Какие-то системные вызовы 
*APDU –Application Protocol Data Unit

7

Архитектура токенаи его сервисы безопасности 
Железо 
ОС 
Приложения 
JVM 
Апплеты Java 
JCAPI 
Ответственность производителя 
API 
Ответственность разработчика приложения 
Потребитель 
•Разделение ответственности и криптографическая гарантия этого (жизненный цикл карты и приложений). 
•Контроль целостности ОС и приложений. 
•Возможность задания политики безопасности на каждом уровне ответственности. 
•Обеспечение безопасных коммуникаций с приложением: взаимная аутентификация, обеспечение целостности передаваемых данныхкоманд, шифрование трафика APDU. 
Архитектура токенапозволяетреализовать отечественную криптографию на неотечественномтокенебезопасно, если игнорировать «сценарий Сноудена»

8

Дополнительный «уровень защиты»…. 
•Недоступные технические спецификации! 
•Команд APDU 
•Механизмы обеспечения защиты секретного ключа 
•Прочие сервисы безопасности 
… за исключением того, что на всё есть все необходимые сертификаты государственных регуляторов.

9

Атаки 
•Копирование секретного ключа: 
•Из трафика APDU 
•Непосредственно из токена, эмулируя работу легитимного приложения 
•Из приложения, путем патча памяти приложения 
•Атаки на пароль пользователя 
•Кейлогер 
•Восстановление кешированногопароля == сложности взлома пользовательского аккаунта Windows 
•Простой фишингчерез промптерс аналогичным внешним видом 
Все коды здесь: github.com/votadlos/Antitoken

10

Демо №1: Восстановление контейнера из трафика APDU 
•Условия: 
•Административный доступ на АРМ пользователя. 
•Почему это работает (уязвимости): 
•Нарушение ОП, 
•Передача данных в APDUв открытом виде. 
•Как это работает: 
•Перехват трафика APDU из Winscard.dll.

11

Формат контейнера КриптоПРО 
0x36 = 56 -2 
0x22 = 36 -2 
0x03b4 = 948 = 952-4 
0x6c = 0x6e -2 
Секрет 
Имя контейнера 
Всякая описательная часть

12

Демо №2: Извлечение контейнера непосредственно из токена 
•Условия: 
•Знание пароля пользователя на токен. 
•Почему это работает (уязвимости): 
•Нарушение ОП, 
•Как это работает: 
•Наше приложение отправляет на токенкоманды APDU,которые приводят к отправке контейнера с секретным ключом из токенав наше приложение.

13

Аутентификация запрос-ответ в Aladdin eTokenPro 72k 
80:18:00:00:04:0E:02:00:00:14 
E1:F8:98:FE:10:06:18:E5:6E:54:DC:12:1F:56:8D:0C:C2:D0:6B:35:90:00[salt 20 байт] 
80:17:00:00:08 
90:E0:EE:98:1C:FE:CB:F1:90:00 [challenge 8 байт] 
80:11:00:11:0A:10:08:C2:91:52:CE:17:90:2F:D8[response 8 байт] 
90:00

14

Генерация ключа шифрования 
Password (Unicode) 
Salt 
Static 
SHA-1 
SHA-1 
998 раз 
20 байт ключа 
SHA-1 
sum64 
Password (Unicode) 
Salt 
Static 
20 байт ключа 
sum64 
SHA-1 
4 байта ключа 
998 раз

15

Вычисление ответа 
Challenge 
3DES-EDE 
24байтаключа 
Response

16

Демо №3: Восстановление ключа через патч памяти процесса 
•Условия: 
•Знание пароля пользователя на токен 
•Почему это работает (уязвимости): 
•Нарушение ОП 
•Модули криптопровайдера загружаются в память процесса пользователя 
•Как это работает: 
•В памяти приложения исправляется «флаг экспортируемости» контейнера и производится «легальный» экспорт

17

Флаг экспортируемости контейнера 
611E1BC2 DWORD PTR DS:[EDI+68],F0000000 
611E1BC9 JE SHORT cpcspi.611E1BD8 
611E1BCB DWORD PTR SS:[EBP+1C],8000 
611E1BD2 JNZ cpcspi.611E1ECC 
611E1BD8 TEST DWORD PTR SS:[EBP+1C],800 
611E1BDF JE cpcspi.611E1ECC 
998–не экспортируемый контейнер 
99С–экспортируемый контейнер

18

Патчинг памяти процесса (22 байта) 
611E1BC2 DWORD PTR DS:[EDI+68],F0000000 
611E1BC9 JE SHORT cpcspi.611E1BD8 
611E1BCB DWORD PTR SS:[EBP+1C],8000 
611E1BD2 JNZ cpcspi.611E1ECC 
611E1BD8 TEST DWORD PTR SS:[EBP+1C],800 
611E1BDF JE cpcspi.611E1ECC 
611E1BC2 CMP BYTE PTR SS:[EBP+1C],98 
611E1BC9 JNZ SHORT cpcspi.611E1BD2 
611E1BCB MOV BYTE PTR SS:[EBP+1C],9C 
611E1BD2 NOP 
611E1BD3 NOP 
611E1BD4 NOP 
611E1BD5 NOP 
611E1BD6 NOP 
611E1BD7 NOP 
611E1BD8 TEST DWORD PTR SS:[EBP+1C],800 
611E1BDF JE cpcspi.611E1ECC

19

Демо№4: Восстановление кэшированного пароля 
•Условия: 
•Доступ в аккаунт пользователя Windows. 
•Почему это работает (уязвимости): 
•Хранение «запомненных»/кэшированных паролей на токен(pin-кодов) в реестре с защитой функцией CryptProtectDataот MS CryptoAPI. 
•Как это работает: 
•Вычитываем из реестра и используем функцию CryptUnprotectDataот MS CryptoAPI. 
Эта «фича» КриптоПроCSP полностью приравнивает безопасность хранения ключа на токенек безопасности хранения ключа в реестре Windows 
–что позволяет неплохо сэкономить на приобретении токенов

20

Демо №4’: Простой фишинг 
•Условия: 
•Доступ в сессию пользователя. 
•Почему это работает (уязвимости): 
•Потому что фишинговоеокно внешне похоже на легальное . 
•Как это работает: 
•Пользователь сам вводит пароль, который передается атакующему.

21

Что же делать разработчикам криптопровайдеров? 
•Не нарушать ОП! 
•В полном объеме использовать сервисы безопасности, предоставляемые токеном. 
•Не загружать модули криптопровайдера в память процесса пользователя. 
•Регулярно проводить независимые аудиты безопасности своих продуктов и иметь штатную продуктовую безопасность.

22

Что же делать пользователям? 
•Если решились использовать токены, выбирайте ту модель, которая бы аппаратно* поддерживала ГОСТ. 
•Если токенаппаратноне поддерживает ГОСТ –можете сэкономить на токенахи потратиться на тщательную защиту рабочего места. 
•По возможности не создавайте экспортируемые ключи.

23

Сергей Солдатов, CISA, CISSP 
reply-to-all.blogspot.com 
Михаил Егоров, CISSP, OSCP 
0ang3el.blogspot.com 
СПАСИБО! 
ВОПРОСЫ? 
WWW.ZERONIGHTS.RU

More Related Content

Некриптографическое исследование носителей православной криптографии

  • 1. Некриптографическоеисследование носителей православной криптографии,или как мы проверяли безопасность хранения ключей на токенах… Сергей СолдатовМихаил Егоров КОНФЕРЕНЦИЯ 13-14 НОЯБРЯ WWW.ZERONIGHTS.RU
  • 2. Зачем нужны токены? для хранения ключей!
  • 3. Зачем нужны токены? Неизвлекаемогодля хранения ключей! Ключ не извлекается из памяти приложения Ключ не извлекается из трафика до приложения Ключ не извлекается из токенаимитацией работы легитимного приложения
  • 4. Зачем нужны токены? Неизвлекаемогодля хранения ключей! Ключ не извлекается из памяти приложения Ключ не извлекается из трафика до приложения Ключ не извлекается из токенаимитацией работы легитимного приложения Всеоперации с ключом должны выполняться в токене=> токенпо спецификации должен поддерживатьиспользуемые криптографические алгоритмы (есть сложности, если токензападного производства)
  • 5. Основной принцип (ОП) Ключ не должен покидать токен, за исключением, может быть, легального экспорта
  • 6. Работа с токенамив Windows Winscard.dllот Microsoft (стандартный компонент Windows) CSP MS CryptoAPI Приложение PKCS#11 от производителя Какое-тодругое API от производителя APDU* Какие-то системные вызовы *APDU –Application Protocol Data Unit
  • 7. Архитектура токенаи его сервисы безопасности Железо ОС Приложения JVM Апплеты Java JCAPI Ответственность производителя API Ответственность разработчика приложения Потребитель •Разделение ответственности и криптографическая гарантия этого (жизненный цикл карты и приложений). •Контроль целостности ОС и приложений. •Возможность задания политики безопасности на каждом уровне ответственности. •Обеспечение безопасных коммуникаций с приложением: взаимная аутентификация, обеспечение целостности передаваемых данныхкоманд, шифрование трафика APDU. Архитектура токенапозволяетреализовать отечественную криптографию на неотечественномтокенебезопасно, если игнорировать «сценарий Сноудена»
  • 8. Дополнительный «уровень защиты»…. •Недоступные технические спецификации! •Команд APDU •Механизмы обеспечения защиты секретного ключа •Прочие сервисы безопасности … за исключением того, что на всё есть все необходимые сертификаты государственных регуляторов.
  • 9. Атаки •Копирование секретного ключа: •Из трафика APDU •Непосредственно из токена, эмулируя работу легитимного приложения •Из приложения, путем патча памяти приложения •Атаки на пароль пользователя •Кейлогер •Восстановление кешированногопароля == сложности взлома пользовательского аккаунта Windows •Простой фишингчерез промптерс аналогичным внешним видом Все коды здесь: github.com/votadlos/Antitoken
  • 10. Демо №1: Восстановление контейнера из трафика APDU •Условия: •Административный доступ на АРМ пользователя. •Почему это работает (уязвимости): •Нарушение ОП, •Передача данных в APDUв открытом виде. •Как это работает: •Перехват трафика APDU из Winscard.dll.
  • 11. Формат контейнера КриптоПРО 0x36 = 56 -2 0x22 = 36 -2 0x03b4 = 948 = 952-4 0x6c = 0x6e -2 Секрет Имя контейнера Всякая описательная часть
  • 12. Демо №2: Извлечение контейнера непосредственно из токена •Условия: •Знание пароля пользователя на токен. •Почему это работает (уязвимости): •Нарушение ОП, •Как это работает: •Наше приложение отправляет на токенкоманды APDU,которые приводят к отправке контейнера с секретным ключом из токенав наше приложение.
  • 13. Аутентификация запрос-ответ в Aladdin eTokenPro 72k 80:18:00:00:04:0E:02:00:00:14 E1:F8:98:FE:10:06:18:E5:6E:54:DC:12:1F:56:8D:0C:C2:D0:6B:35:90:00[salt 20 байт] 80:17:00:00:08 90:E0:EE:98:1C:FE:CB:F1:90:00 [challenge 8 байт] 80:11:00:11:0A:10:08:C2:91:52:CE:17:90:2F:D8[response 8 байт] 90:00
  • 14. Генерация ключа шифрования Password (Unicode) Salt Static SHA-1 SHA-1 998 раз 20 байт ключа SHA-1 sum64 Password (Unicode) Salt Static 20 байт ключа sum64 SHA-1 4 байта ключа 998 раз
  • 15. Вычисление ответа Challenge 3DES-EDE 24байтаключа Response
  • 16. Демо №3: Восстановление ключа через патч памяти процесса •Условия: •Знание пароля пользователя на токен •Почему это работает (уязвимости): •Нарушение ОП •Модули криптопровайдера загружаются в память процесса пользователя •Как это работает: •В памяти приложения исправляется «флаг экспортируемости» контейнера и производится «легальный» экспорт
  • 17. Флаг экспортируемости контейнера 611E1BC2 DWORD PTR DS:[EDI+68],F0000000 611E1BC9 JE SHORT cpcspi.611E1BD8 611E1BCB DWORD PTR SS:[EBP+1C],8000 611E1BD2 JNZ cpcspi.611E1ECC 611E1BD8 TEST DWORD PTR SS:[EBP+1C],800 611E1BDF JE cpcspi.611E1ECC 998–не экспортируемый контейнер 99С–экспортируемый контейнер
  • 18. Патчинг памяти процесса (22 байта) 611E1BC2 DWORD PTR DS:[EDI+68],F0000000 611E1BC9 JE SHORT cpcspi.611E1BD8 611E1BCB DWORD PTR SS:[EBP+1C],8000 611E1BD2 JNZ cpcspi.611E1ECC 611E1BD8 TEST DWORD PTR SS:[EBP+1C],800 611E1BDF JE cpcspi.611E1ECC 611E1BC2 CMP BYTE PTR SS:[EBP+1C],98 611E1BC9 JNZ SHORT cpcspi.611E1BD2 611E1BCB MOV BYTE PTR SS:[EBP+1C],9C 611E1BD2 NOP 611E1BD3 NOP 611E1BD4 NOP 611E1BD5 NOP 611E1BD6 NOP 611E1BD7 NOP 611E1BD8 TEST DWORD PTR SS:[EBP+1C],800 611E1BDF JE cpcspi.611E1ECC
  • 19. Демо№4: Восстановление кэшированного пароля •Условия: •Доступ в аккаунт пользователя Windows. •Почему это работает (уязвимости): •Хранение «запомненных»/кэшированных паролей на токен(pin-кодов) в реестре с защитой функцией CryptProtectDataот MS CryptoAPI. •Как это работает: •Вычитываем из реестра и используем функцию CryptUnprotectDataот MS CryptoAPI. Эта «фича» КриптоПроCSP полностью приравнивает безопасность хранения ключа на токенек безопасности хранения ключа в реестре Windows –что позволяет неплохо сэкономить на приобретении токенов
  • 20. Демо №4’: Простой фишинг •Условия: •Доступ в сессию пользователя. •Почему это работает (уязвимости): •Потому что фишинговоеокно внешне похоже на легальное . •Как это работает: •Пользователь сам вводит пароль, который передается атакующему.
  • 21. Что же делать разработчикам криптопровайдеров? •Не нарушать ОП! •В полном объеме использовать сервисы безопасности, предоставляемые токеном. •Не загружать модули криптопровайдера в память процесса пользователя. •Регулярно проводить независимые аудиты безопасности своих продуктов и иметь штатную продуктовую безопасность.
  • 22. Что же делать пользователям? •Если решились использовать токены, выбирайте ту модель, которая бы аппаратно* поддерживала ГОСТ. •Если токенаппаратноне поддерживает ГОСТ –можете сэкономить на токенахи потратиться на тщательную защиту рабочего места. •По возможности не создавайте экспортируемые ключи.
  • 23. Сергей Солдатов, CISA, CISSP reply-to-all.blogspot.com Михаил Егоров, CISSP, OSCP 0ang3el.blogspot.com СПАСИБО! ВОПРОСЫ? WWW.ZERONIGHTS.RU