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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline archimed7592  
#1 Оставлено : 17 июня 2016 г. 8:18:04(UTC)
archimed7592

Статус: Участник

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

Поблагодарили: 4 раз в 4 постах
Последнюю неделю наблюдаю очень странную проблему.

Код, который подписывает и шифрует файлы начал валится, причем не на уровне .NET, а на уровне unmanaged кода системы.

Код:
Faulting application name: w3wp.exe, version: 8.5.9600.16384, time stamp: 0x5215df96
Faulting module name: ntdll.dll, version: 6.3.9600.18233, time stamp: 0x56bb4ebb
Exception code: 0xc0000374
Fault offset: 0x00000000000f1b70
Faulting process id: 0x1a74
Faulting application start time: 0x01d1c84cc41f6f90
Faulting application path: c:\windows\system32\inetsrv\w3wp.exe
Faulting module path: C:\Windows\SYSTEM32\ntdll.dll
Report Id: 2d491651-3440-11e6-83a6-ec2280eba695
Faulting package full name: 
Faulting package-relative application ID: 


Странность проблемы заключается в том, что:
* на N-ую попытку подписание/шифрование завершается успешно
* мы давно ничего не меняли, в том числе не менялся сертификат в адрес которого производится шифрование
* проявляется как на сервере (win 2012 r2) так и на компьютере разработчика (win 8.1 x64)
* проявляется на разном уровне обновленности Windows (на компьютере разработчика стоят все обновления, сервер квартал не обновляли)
* проявляется на разных версиях CSP (обновление CSP, .NET Client/Server до последних версий не помогло)

Код, который занимается подписью и шифрованием примитивен и использует встроенные в .NET средсва для работы с CMS. Один подписант, один получатель.
Код:
    Public Function CmsSign(Content As Byte(), Detached As Boolean, Silent As Boolean, ParamArray Signers As System.Security.Cryptography.X509Certificates.X509Certificate2()) As Byte()
        Dim SCms = New System.Security.Cryptography.Pkcs.SignedCms(New System.Security.Cryptography.Pkcs.ContentInfo(Content), detached:=Detached)

        For Each Signer In Signers
            Dim CmsSigner = New System.Security.Cryptography.Pkcs.CmsSigner(Signer)
            SCms.ComputeSignature(CmsSigner, silent:=Silent)
        Next

        Return SCms.Encode
    End Function

    Public Function CmsEncrypt(Content As Byte(), ParamArray Recipients As System.Security.Cryptography.X509Certificates.X509Certificate2()) As Byte()
        Dim ECms = New System.Security.Cryptography.Pkcs.EnvelopedCms(New System.Security.Cryptography.Pkcs.ContentInfo(content))
        Dim CmsRecipients = New System.Security.Cryptography.Pkcs.CmsRecipientCollection()
        For Each Recipient In Recipients
            CmsRecipients.Add(New System.Security.Cryptography.Pkcs.CmsRecipient(Recipient))
        Next
        Call ECms.Encrypt(CmsRecipients)
        Return ECms.Encode
    End Function


От версии, как я уже говорил, не зависит, последняя на которой проявляется: "CSPSetup-3.9R2 (3.9.8423) от 14.04.2016" и "NETSetup 1.0.5913.0 от 10.03.2016".

Если бы проблема была на стороне .NET, я бы разобрал её до винтиков... а в случае unmanaged не хватает экспертизы, даже не представляю куда копать.
Подскажите, пожалуйста, как можно локализовать проблему?

На машине разработчика удалось получить вот такой stack-trace, но какой из него можно сделать вывод не понимаю:
Код:
>	ntdll.dll!RtlReportCriticalFailure()	Unknown
 	ntdll.dll!RtlpHeapHandleError()	Unknown
 	ntdll.dll!RtlpLogHeapFailure()	Unknown
 	ntdll.dll!RtlFreeHeap()	Unknown
 	KernelBase.dll!LocalFree()	Unknown
 	cryptnet.dll!PkiFree()	Unknown
 	cryptnet.dll!OcspFreeStrongSignPropInfo(struct _OCSP_STRONG_SIGN_PROP_INFO *)	Unknown
 	cryptnet.dll!I_ValidateOcspResponse()	Unknown
 	cryptnet.dll!I_RetrieveObjectByOcspUrlValidForSubject()	Unknown
 	cryptnet.dll!RetrieveObjectByOcspUrlValidForSubject()	Unknown
 	cryptnet.dll!RetrieveTimeValidObjectByUrl()	Unknown
 	cryptnet.dll!CTVOAgent::GetTimeValidObjectByUrl()	Unknown
 	cryptnet.dll!CTVOAgent::GetTimeValidObject()	Unknown
 	cryptnet.dll!CrlFromCertGetTimeValidObject(char const *,void *,struct _CERT_CONTEXT const *,struct _FILETIME *,unsigned long,unsigned long,void * *,struct _CRYPT_CREDENTIALS *,struct _CRYPT_GET_TIME_VALID_OBJECT_EXTRA_INFO *)	Unknown
 	cryptnet.dll!GetTimeValidCrl()	Unknown
 	cryptnet.dll!MicrosoftCertDllVerifyRevocation()	Unknown
 	crypt32.dll!VerifyDefaultRevocation()	Unknown
 	crypt32.dll!CertVerifyRevocation()	Unknown
 	crypt32.dll!CChainPathObject::CalculateRevocationStatus()	Unknown
 	crypt32.dll!CChainPathObject::CalculateAdditionalStatus()	Unknown
 	crypt32.dll!CCertChainEngine::CreateChainContextFromPathGraph()	Unknown
 	crypt32.dll!CCertChainEngine::GetChainContext()	Unknown
 	crypt32.dll!CertGetCertificateChain()	Unknown
 	System.ni.dll!00007ffea40eead1()	Unknown
 	System.ni.dll!00007ffea4036144()	Unknown
 	System.ni.dll!00007ffea40bf524()	Unknown
 	System.Security.ni.dll!00007ffea18eb314()	Unknown
 	System.Security.ni.dll!00007ffea19162f1()	Unknown
 	System.Security.ni.dll!00007ffea1915f33()	Unknown
 	00007ffe46f9db91()	Unknown
 	00007ffe46f9da4a()	Unknown
 	00007ffe46f9ab2a()	Unknown
 	00007ffe46f73a82()	Unknown
 	00007ffe46f70bc7()	Unknown
 	00007ffe46f70565()	Unknown
 	00007ffe46f12ce2()	Unknown
 	System.ServiceModel.ni.dll!00007ffea29e2967()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2a2f02f()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2a05b78()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2a05030()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2a2b4bc()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2a6ec65()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2a7012c()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2a6e661()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2a703c6()	Unknown
 	System.ServiceModel.Internals.ni.dll!00007ffea0f7ec8b()	Unknown
 	System.ServiceModel.Internals.ni.dll!00007ffea0f15341()	Unknown
 	System.ServiceModel.Internals.ni.dll!00007ffea0f6b187()	Unknown
 	System.ServiceModel.Internals.ni.dll!00007ffea0f6a78a()	Unknown
 	System.ServiceModel.Internals.ni.dll!00007ffea0f6973c()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2b748df()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2b687d8()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2b68723()	Unknown
 	System.ServiceModel.Internals.ni.dll!00007ffea0f6500f()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2b5ebb0()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2b24912()	Unknown
 	System.ServiceModel.ni.dll!00007ffea2af8e84()	Unknown
 	System.ServiceModel.Activation.ni.dll!00007ffe66b031e5()	Unknown
 	System.ServiceModel.Activation.ni.dll!00007ffe66b001de()	Unknown
 	System.ServiceModel.Activation.ni.dll!00007ffe66aff66f()	Unknown
 	System.ServiceModel.Activation.ni.dll!00007ffe66aff5ac()	Unknown
 	System.ServiceModel.Internals.ni.dll!00007ffea0f17e66()	Unknown
 	System.ServiceModel.Internals.ni.dll!00007ffea0f17dc8()	Unknown
 	mscorlib.ni.dll!00007ffea501df12()	Unknown
 	clr.dll!CallDescrWorkerInternal()	Unknown
 	clr.dll!CallDescrWorkerWithHandler()	Unknown
 	clr.dll!DispatchCallSimple()	Unknown
 	clr.dll!BindIoCompletionCallBack_Worker(void *)	Unknown
 	clr.dll!ManagedThreadBase_DispatchInner()	Unknown
 	clr.dll!ManagedThreadBase_DispatchMiddle()	Unknown
 	clr.dll!ManagedThreadBase_DispatchOuter()	Unknown
 	clr.dll!ManagedThreadBase_DispatchInCorrectAD()	Unknown
 	clr.dll!Thread::DoADCallBack(struct ADID,void (*)(void *),void *,int)	Unknown
 	clr.dll!ManagedThreadBase_DispatchInner()	Unknown
 	clr.dll!ManagedThreadBase_DispatchMiddle()	Unknown
 	clr.dll!ManagedThreadBase_DispatchOuter()	Unknown
 	clr.dll!ManagedThreadBase_FullTransitionWithAD()	Unknown
 	clr.dll!BindIoCompletionCallbackStubEx(unsigned long,unsigned long,struct _OVERLAPPED *,int)	Unknown
 	clr.dll!BindIoCompletionCallbackStub(unsigned long,unsigned long,struct _OVERLAPPED *)	Unknown
 	clr.dll!ThreadpoolMgr::CompletionPortThreadStart(void *)	Unknown
 	clr.dll!Thread::intermediateThreadProc(void *)	Unknown
 	kernel32.dll!BaseThreadInitThunk()	Unknown
 	ntdll.dll!RtlUserThreadStart()	Unknown
Offline Максим Коллегин  
#2 Оставлено : 17 июня 2016 г. 9:23:04(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Похоже на double free. Revocation Provider из состава CSP не используется?
Попробуйте запустить приложение под app verifier и windbg.
Знания в базе знаний, поддержка в техподдержке
Offline archimed7592  
#3 Оставлено : 17 июня 2016 г. 11:16:31(UTC)
archimed7592

Статус: Участник

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

Поблагодарили: 4 раз в 4 постах
Автор: maxdm Перейти к цитате
Похоже на double free. Revocation Provider из состава CSP не используется?

Как это понять? Напрямую - точно не используется.

Автор: maxdm Перейти к цитате
Попробуйте запустить приложение под app verifier и windbg.

Попробую разобраться как это сделать.

P.S. Поставил CSP 4.0 - на нём проблема не воспроизвелась. Сегодня вечером на сервер поставлю, может быть проблема уйдёт сама собой, останется только лицензию обновить.
Offline Максим Коллегин  
#4 Оставлено : 17 июня 2016 г. 13:06:12(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Revocation Provider - фича установлена или нет.
Знания в базе знаний, поддержка в техподдержке
Offline archimed7592  
#5 Оставлено : 20 июня 2016 г. 8:45:06(UTC)
archimed7592

Статус: Участник

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

Поблагодарили: 4 раз в 4 постах
Автор: maxdm Перейти к цитате
Revocation Provider - фича установлена или нет.

Нет, эту фичу никогда не устанавливали. На компьютере разработчика с которой был снят трейс установлены всякие ЭЦП SDK с их OCSP Client 1.5/2.0.

Переход на CSP 4.0 - 3-ый день, полет нормальный, проблем не на наблюдается, куча портится перестала.
Offline Максим Коллегин  
#6 Оставлено : 20 июня 2016 г. 8:59:31(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Мы бы хотели исправить и в CSP 3.9, если это наша ошибка. Поэтому информация для воспроизведения была бы очень полезна.
Знания в базе знаний, поддержка в техподдержке
Offline archimed7592  
#7 Оставлено : 21 июня 2016 г. 0:13:38(UTC)
archimed7592

Статус: Участник

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

Поблагодарили: 4 раз в 4 постах
Постараюсь на этих выходных вернуть 3.9 и провести эксперимент.
Offline Максим Коллегин  
#8 Оставлено : 2 октября 2018 г. 22:33:47(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Эта тема имеет продолжение.
Знания в базе знаний, поддержка в техподдержке
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.