Ключевое слово в защите информации
ключевое слово
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Basile  
#1 Оставлено : 15 ноября 2016 г. 15:04:39(UTC)
Basile

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.11.2016(UTC)
Сообщений: 4

Добрый день.

Можно ли завернуть КриптоПро CSP 4.0 в VMWare ThinApp? Какая цель? - По сути хочется создать одну большую DLL-ку для "Онлайн-Спринтер".

Завернул, загрузил корневые сертификаты, загрузил в реестр сертификат ЭЦП и с помощью утилиты csptest попробовал подписать файл (* - замены):
Код:
D:\bin>csptest.exe -stack 3 -sfsign -sign -detached -add -in 1.txt -out 1.txt.sig -my ******@host11.taxcom.ru
cps_get_p: Max detect stack size=392192(49024)
           Stack size limit=392192
#0:
Subject: СНИЛС=***********, ОГРН=*************, ИНН=00**********, E=******@host11.taxcom.ru, C=RU, S=77 г. Москва, L=г.Москва, O="ООО ""*******""", CN="ООО ""*******""", STREET="******************, д.***, к.**, ,", T=генеральный директор, G=Олег Геннадьевич, SN=*********
Valid  : 16.09.2016 13:33:00 - 16.09.2017 13:38:00 (UTC)
Issuer : ОГРН=1045002007984, ИНН=005009046312, STREET=ул. Минская  д. 1Г корп. 1, E=uc@technokad.ru, C=RU, S=77 г.Москва, L=Москва, O=ООО ТехноКад, OU=Удостоверяющий центр, CN=CA TechnoKad

A CSP has been acquired.
Source message length: 8
An error occurred in running the program.
signtsf.c:591:Signature creation error
Error number 0xc0000225 (-1073741275).

====
    FFFFFFFFFFFFFFFE 4216BCA74216BCA7 0000000000000000 000000007ED7F38A
    4216BCA74216BCA7 0000000000000000 0000000000125238 4216BCA74216BCA7
Top = 43106, &p[i] = 0000000000123D90
Stack size=47344
printf size=2232
malloc/free size=856
fopen/fclose size=10224
Total: SYS: 0,266 sec USR: 0,250 sec UTC: 0,703 sec
[ErrorCode: 0xc0000225]


Запустил встроенный API-снифер. Кусок лога, где происходит ошибка:
Большой кусок лога:

Функции, заканчивающиеся на "+" перехватываются внутренним виртуальным окружением.

Самое важное в логе:
Код:
GetProcAddress+ ->*=*7ECCF6E1h (HMODULE hModule=7fefd090000h, struct {LPCSTR lpProcName=*7FEFDA83902h->"BCryptOpenAlgorithmProvider")
BCryptOpenAlgorithmProvider (*phAlgorithm=*2C2C10h->*0h<null pointer> <bad ptr>, LPCWSTR pszAlgId=*2669D0h->L"GOST R 34.11-94", LPCWSTR pszImplementation=*0h<null pointer> <bad ptr>, ULONG dwFlags=0h)
  NtDeviceIoControlFile (HANDLE =3cch, HANDLE =0h, PIO_APC_ROUTINE =*0h<null pointer> <bad ptr>, PVOID =*0h<null pointer> <bad ptr>, *=*12EAF0h->struct {ULONG_PTR Information=1h}, ULONG =390402h, PVOID =*12EC40h, ULONG =50h, PVOID =*12EB00h, ULONG =8h)
  NtDeviceIoControlFile ->long=80000005h (HANDLE =3cch, HANDLE =0h, PIO_APC_ROUTINE =*0h<null pointer> <bad ptr>, PVOID =*0h<null pointer> <bad ptr>, *=*12EAF0h->struct {ULONG_PTR Information=80000005h}, ULONG =390402h, PVOID =*12EC40h, ULONG =50h, PVOID =*12EB00h, ULONG =8h)
BCryptOpenAlgorithmProvider ->long=C0000225h (*phAlgorithm=*2C2C10h->*0h<null pointer> <bad ptr>, LPCWSTR pszAlgId=*2669D0h->L"GOST R 34.11-94", LPCWSTR pszImplementation=*0h<null pointer> <bad ptr>, ULONG dwFlags=0h)
GetProcAddress+ (HMODULE hModule=7fefcf10000h, struct {LPCSTR lpProcName=*7FEFDA834EAh->"CryptReleaseContext")


Из функции "BCryptOpenAlgorithmProvider" выполняется вызов функции "NtDeviceIoControlFile", который завершается статусом "STATUS_BUFFER_OVERFLOW", после чего функция "BCryptOpenAlgorithmProvider" завершается статусом "STATUS_NOT_FOUND". Собственно этот статус виден в выводе утилиты csptest.

Из-за чего может возникать подобная ошибка?

Отредактировано пользователем 15 ноября 2016 г. 16:35:29(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#2 Оставлено : 15 ноября 2016 г. 19:49:00(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,461
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 751 раз в 646 постах
BCrypt - это CNG криптопровайдер, видимо Vmware не стали их перехватывать.
Знания в базе знаний, поддержка в центре поддержки
Offline Basile  
#3 Оставлено : 16 ноября 2016 г. 11:10:25(UTC)
Basile

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.11.2016(UTC)
Сообщений: 4

А можете подсказать, куда дальше переходит управление?

Ради интереса запустил полученную сборку на компьютере с установленным КриптоПро, и все успешно отработало. Отсюда делаю вывод, что какие-то DLL КриптоПро прописываются в реестре. На этом (приведенном выше куске лога) производится вызов драйвера, который загружает DLL КриптоПро. Т.к. в случае ThinApp виртуальный реестр и DLL находятся внутри контейнера и не покидают userspace, драйвер не может обработать вызов и программа завершается с ошибкой. На сколько я прав? Просьба объяснить подробнее, как формируется ЭЦП (производится ли ядерный вызов, и куда дальше передается управление).

Отредактировано пользователем 16 ноября 2016 г. 11:13:24(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#4 Оставлено : 16 ноября 2016 г. 18:57:23(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,461
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 751 раз в 646 постах
Вы же сами видите, что производится. Трасса вызовов будет содержать несколько сотен функций CryptoAPI, я пока не готов это описывать.
Знания в базе знаний, поддержка в центре поддержки
Offline Basile  
#5 Оставлено : 18 ноября 2016 г. 14:27:46(UTC)
Basile

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.11.2016(UTC)
Сообщений: 4

Копнул поглубже, на сколько это возможно. NtDeviceIoControlFile из лога, приведенного выше, получает информацию о криптоалгоритмах и библиотеках (обращается к устройству "\Device\KsecDD"), которые их поддерживают. В примере выше возвращается результат: не найдено, поэтому вызов функции BCryptOpenAlgorithmProvider завершается с ошибкой. В случае успеха функция возвращает имя dll (cpcng.dll в случае КриптоПро и ГОСТ'овых сертификатов) и дальше вся работа производится уже в пространстве пользователя (с этой dll), больше системных вызовов нет. Теоретически, если бы имелась возможность обойти этот вызов, то это бы решило проблему.
Возможные варианты:
1. Раз системная функция возвращает только информацию о криптоалгоритмах и библиотеках с ними связанных, можно попробовать прописать ветки реестра на компьютере, где будет выполняться витуальное приложение. Перенес ветку HKLM\CurrentControlSet\Control\Cryptography\*, успешно удалось подписать файл, но сломалась криптография Windows, например, IE не может зайти на https-сайты.
2. Пропатчить bcrypt.dll и поместить её в контейнер виртуального приложения.
3. Взять и "допилить" bcrypt.dll от проектов типа WINE, результат положить в контейнер виртуального приложения.

А может быть у вас есть какой-нибудь "КриптоПро KC0", который не делает системных вызовов, работает только а пространстве пользователя?
Offline Максим Коллегин  
#6 Оставлено : 22 ноября 2016 г. 11:02:35(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,461
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 751 раз в 646 постах
Давайте взглянем с другой стороны - какую вы задачу решаете?
Знания в базе знаний, поддержка в центре поддержки
Offline Basile  
#7 Оставлено : 28 ноября 2016 г. 18:16:34(UTC)
Basile

Статус: Новичок

Группы: Участники
Зарегистрирован: 14.11.2016(UTC)
Сообщений: 4

Автор: maxdm Перейти к цитате
Давайте взглянем с другой стороны - какую вы задачу решаете?


Постараюсь изложить первое сообщение другими словами:
Есть VMWare View Horizon тонкие клиенты. На этих клиентах работают бухгалтеры. У бухгалтеров, в силу специфики их работы, есть потребность сдавать отчетность в электронной форме. У компании Такском есть продукт "Онлайн-Спринтер", решающий эту задачу (помогает решать эту задачу и КриптоПро, как один из компонентов "Онлайн-Спринтера"; если что, лицензия к КриптоПро передаётся вместе с договором на обслуживание). Можно просто установить руками все необходимые компоненты (для этого поребуется выполнить N шагов), но... Но, в связи с особенностью работы VMV (условиями и настройками, которые от меня лично не зависят, и повлиять на них я не могу), виртуальная машина (а тонкие клиенты VMV - это виртуальные машины; каждый пользователь работает в своей виртуальной машине) пользователя может быть сброшена, при этом профиль пользователя остается без изменений, а всё остальное приводится к начальному образу. После такого сброса придется снова выполнить установку необходимых компонент для работы "Онлайн-Спринтер" (те же N шагов). В качестве возможного решения был рассмотрен вариант использования механизма VMWare ThinApp. Механизм позволяет завернуть отдельное приложение в контейнер (приложение при этом не будет знать, что работает в контейнере), в т.ч. получить на выходе MSI-пакет. Все произведенные приложением изменения (реестр, файлы) пишутся в специальную папку (конечно же за исключением некоторых папок как "Рабочий стол", "Мои документы", сетевых шар/дисков и т.п., а иначе какой смысл в таком приложении?) в профиле пользователя. Полученный MSI-пакет назначается на конкретную виртуальную машину. При сбросе ВМ этот пакет полностью автоматически разворачивается на ВМ пользователя. Учитывая, что всё важные данные хранятся в профиле пользователя, пользователь после установки сразу же работает с настроенным приложением. Для создания виртуального приложения (+ назначить приложение на виртуалки) требуется M шагов. Пускай даже M >> N, эти N шагов необходимо выполнять каждый раз при сбросе ВМ для каждого пользователя, что в конечном итоге всегда будет больше M.

Итак, вернемся к самому началу:
Автор: Basile Перейти к цитате
Можно ли завернуть КриптоПро CSP 4.0 в VMWare ThinApp? Какая цель? - По сути хочется создать одну большую DLL-ку для "Онлайн-Спринтер"
Offline densi  
#8 Оставлено : 3 августа 2017 г. 14:25:36(UTC)
densi

Статус: Новичок

Группы: Участники
Зарегистрирован: 03.08.2017(UTC)
Сообщений: 1
Откуда: Moscow

Сказал(а) «Спасибо»: 1 раз
Добрый день!
Пишу здесь, т.к. тема максимально близка.
Есть Server 2012R2, на нем установлено Крипто Про серверная 4.0.9660
Все было хорошо до июня месяца, перестали работать приложения, запускаемые с помощью Remote Application Vmware Horizon View 6.
Что интересно, такая проблема была в версии 3.9, в следствие чего пришлось приобрести 4.0 и проблема исчезла, но примерно на год.
На сервере устанавливается агент Vmware, который позволяет с помощью удаленного клиента запускать приложения этого сервера.
Спасибо!

Отредактировано пользователем 3 августа 2017 г. 14:26:09(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#9 Оставлено : 7 октября 2018 г. 12:52:40(UTC)
Максим Коллегин

Статус: Сотрудник

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,461
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 39 раз
Поблагодарили: 751 раз в 646 постах
Знания в базе знаний, поддержка в центре поддержки
thanks 1 пользователь поблагодарил Максим Коллегин за этот пост.
densi оставлено 08.10.2018(UTC)
Offline yds  
#10 Оставлено : 1 ноября 2018 г. 17:38:13(UTC)
yds

Статус: Новичок

Группы: Участники
Зарегистрирован: 01.11.2018(UTC)
Сообщений: 3
Российская Федерация
Откуда: Москва



Максим, аналогичная ошибка на вирт.машине при работе с ЭЦП.

RuntimeBroker в исключения добавлять на вирт.машине или сервере?
Я добавил параметр на вирт.машине, но ничего не изменилось. Требуется ли перезапуск?
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.