Как экспортировать неэкспортируемый закрытый ключ из магазина - PullRequest
42 голосов
/ 12 октября 2010

Мне нужно экспортировать закрытый ключ из магазина Windows. Что мне делать, если ключ помечен как неэкспортируемый? Я знаю, что это возможно, программа джейлбрейк может экспортировать этот ключ.

Для экспорта ключа я использую Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(), который экспортирует ключ из (RSACryptoServiceProvider)cryptoProv.ExportParameters(true). Экспортируемый ключ, который я использую в Org.BouncyCastle.Cms.CmsSignedDataGenerator для подписи CMS.

Мне нужно решение для .Net, но любое решение будет полезно. Спасибо.

Ответы [ 8 ]

42 голосов
/ 20 октября 2010

Вы правы, никакого API, который я знаю для экспорта PrivateKey, помеченного как неэкспортируемый.Но если вы исправите (в памяти) нормальные API, вы можете использовать обычный способ экспорта:)

Существует новая версия mimikatz, которая также поддерживает экспорт CNG (Windows Vista / 7/2008 ...)

  1. загрузка (и запуск с правами администратора): http://blog.gentilkiwi.com/mimikatz (версия транка или последняя версия)

Запустите его и введите в его строку следующие команды:

privilege::debug (если он у вас уже есть или вы не используете только CryptoApi) crypto::patchcng (нт 6) и / или crypto::patchcapi (нт 5 и 6) crypto::exportCertificates и / или crypto::exportCertificates CERT_SYSTEM_STORE_LOCAL_MACHINE

.pfx файлы защищены паролями "mimikatz"

15 голосов
/ 22 марта 2016

Gentil Kiwi's ответ правильный. Он разработал этот инструмент mimikatz, который может извлекать неэкспортируемые закрытые ключи.

Однако его инструкции устарели. Вам нужно:

  1. Загрузите последнюю версию с https://github.com/gentilkiwi/mimikatz/releases

  2. Запустите cmd с правами администратора на том же компьютере, где был запрошен сертификат

  3. Перейдите в каталог bin mimikatz (версия для Win32 или x64)

  4. Пробег mimikatz

  5. Следуйте инструкциям вики , и файл .pfx (защищенный паролем mimikatz ) будет помещен в ту же папку в бункере мимиката

mimikatz # crypto :: capi
Локальный патч CryptoAPI

mimikatz # привилегия :: отладка
Привилегия '20' OK

mimikatz # crypto :: cng
Исправлена ​​услуга "KeyIso"

mimikatz # crypto :: сертификаты / systemtore: local_machine / store: my / Экспорт
* Системный магазин: 'local_machine' (0x00020000)
* Магазин: «мой»

  1. example.domain.local
    Контейнер ключей: example.domain.local
    Провайдер: поставщик программного обеспечения Microsoft Key Storage
    Тип: Ключ CNG (0xffffffff)
    Экспортный ключ: NO
    Размер ключа: 2048
    Открытый экспорт: ОК - local_machine_my_0_example.domain.local.der '
    Частный экспорт: ОК - local_machine_my_0_example.domain.local.pfx '
13 голосов
/ 16 августа 2011

Я хотел бы упомянуть Джейлбрейк специально ( GitHub ) :

Джейлбрейк

Jailbreak - это инструмент для экспорта сертификатов, помеченных как неэкспортируемые из хранилища сертификатов Windows.Это может помочь, когда вам нужно извлечь сертификаты для резервного копирования или тестирования.Для работы джейлбрейка у вас должен быть полный доступ к закрытому ключу в файловой системе.

Предварительные требования: Win32

1 голос
/ 14 марта 2018

К сожалению, упомянутый выше инструмент заблокирован несколькими поставщиками антивирусов.Если это так, то взгляните на следующее:

Откройте неэкспортируемый сертификат в хранилище сертификатов и найдите значение Thumbprint.

Затем откройте regedit по указанному ниже пути и найдите раздел реестра, соответствующий значку отпечатка.

Экспорт раздела реестра будет содержать полный сертификат, включая закрытый ключ.После экспорта скопируйте экспорт на другой сервер и импортируйте его в реестр.

Сертификат появится в диспетчере сертификатов с включенным закрытым ключом.

Хранилище компьютеров: HKLM \ SOFTWARE \ Microsoft \ SystemCertificates \ MY \ Сертификаты Хранилище пользователя: HKCU \ SOFTWARE \ Microsoft \ SystemCertificates\ MY \ Certificates

В крайнем случае вы можете сохранить экспорт как резервную копию сертификата.

0 голосов
/ 29 мая 2019

Код и двоичные файлы доступны здесь для консольного приложения, которое может экспортировать закрытые ключи, помеченные как неэкспортируемые, и оно не будет запускать антивирусные приложения, такие как mimikatz.

Код основан на документе NCC Group .потребуется запустить инструмент с локальной системной учетной записью, так как он работает путем записи непосредственно в память, используемую процессом Windows lsass, чтобы временно пометить ключи как экспортируемые.Это можно сделать с помощью PsExec из SysInternals ' PsTools :

  1. Создать новую командную строку, запущенную от имени пользователя локальной системы:

    PsExec64.exe -s -i cmd

  2. В новой командной строке запустите инструмент:

    exportrsa.exe

  3. Инструмент запросит у вас пароль для каждого найденного ключа - это пароль, которым вы хотите защитить экспортируемый файл PFX, поэтому он может быть любым, что вы хотите

0 голосов
/ 27 сентября 2018

Вам может понадобиться удалить антивирус (в моем случае мне пришлось избавиться от Avast).

Это гарантирует, что команда crypto::cng будет работать.В противном случае он выдавал мне ошибки:

mimikatz $ crypto::cng
ERROR kull_m_patch_genericProcessOrServiceFromBuild ; OpenProcess (0x00000005)

После удаления Avast:

mimikatz $ crypto::cng
"KeyIso" service patched

Магия.(:

BTW

Защитник Windows - это еще одна программа, блокирующая работу программы, поэтому вам необходимо также отключить ее на время использования программы по крайней мере.

0 голосов
/ 15 марта 2017

Это работало для меня в Windows Server 2012 - мне нужно было экспортировать неэкспортируемый сертификат для настройки другого сервера ADFS, и это помогло.Не забудьте использовать приведенные выше инструкции для джейлбрейка, например:

crypto :: Certificates / Export / Systemstore: CERT_SYSTEM_STORE_LOCAL_MACHINE

0 голосов
/ 12 октября 2010

Мне не известен API для экспорта закрытых ключей Windows, помеченных как «неэкспортируемые» при их создании.Там могут быть различные хаки, но их детали, вероятно, будут меняться от одной версии системы к другой без предупреждения.

...