Для выявления и последующего устранения проблемы было разработано тестовое приложение, которое реализует функционал подписания с минимальным вызовом CryptoAPI (использование метода CryptSignMessage()). Приложение производит подписание заданное количество раз и фиксирует текущее количество дескрипторов (собственных) и службы КриптоПРО CSP (cpcsp | cpcsp1).
Тестирование было произведено более, чем на 10 компьютерах с разными версиями ОС Windows
- - Windows 7;
- - Windows 10;
- - Windows Server 2012 R2;
- - Windows Server 2016 Standard;
и разными версиями КриптоПРО:
- - КриптоПро CSP 3.9 R2;
- - КриптоПро CSP 4.0 R3;
- - КриптоПро CSP 4.0 R4;
На всех окружениях была активирована служба хранения ключей.
На 3-х компьютерах (из >10) удалось воспроизвести проблему возрастания дескрипторов при использовании ГОСТ-ключей (RSA-ключи не приводят к потерям):
- - Windows 10 + КриптоПро CSP 4.0 R3;
- - Windows Server 2012 R2 + КриптоПро CSP 3.9 R2;
- - Windows Server 2016 + КриптоПро CSP 4.0 R3;
На остальных количество дескрипторов колебалось в рамках "вменяемых" значений в диапазоне (+- 100). После завершения работы приложения, количество падало до первоначального.
Кроме возрастания дескрипторов в службе КриптоПРО CSP, было также выявлено (визуально, а затем и программно) синхронное возрастание дескрипторов в службах группы DcomLaunch:
- - BrokerInfrastructure;
- - DcomLaunch;
- - DeviceInstall;
- - LSM;
- - Power;
- - SystemEventsBroker;
(процесс .\svchost.exe -k DcomLaunch)
Кроме этого утилита csptest (из поставки КриптоПРО) также приводит к "потере" дескрипторов
csptest.exe -sfsign -sign -in csptest.cmd -out sign.sgn -MY xxx
на 3 дескриптора за каждую операцию подписания (также в обеих службах - cpcsp и DcomLaunch, см. 01_1_csptest.png - 01_3_csptest.png).
см.
Desc.rar
(32kb) загружен 5 раз(а).Дополнительно был произведен анализ открытых дескрипторов службы cpcsp после каждого вызова csptest.exe - см. 02_1_csptest.txt - 02_6_csptest.txt.
При сравнении списков дескрипторов видно, что прирост происходит на два дескриптора типа Event и один типа Token
- - Event, , 0x330;
- - Event, , 0x334;
- - Token, PRPO-SOS-DEV\Administrator: 0x93e5b (Impersonation), 0x338;
Эти дескрипторы после подписания не закрываются и происходит их накопление. При работе на промышленных контурах происходит их переполнение и сбой в работе криптосистемы,
в результате чего требуется перезапуск сервера (сервиса cpcsp).
Предположительно, накопление связано с некорректным обновлением Windows, но выявить конкретную проблему не удалось.
На доступных тестовых контурах, где воспроизводится проблема, в одном случае (среда виртуализации, сохранен снимок "сломанного" состояния, доступна любая диагностика), получилось подтвердить устойчивое исправление при удалении и повторной установке КриптоПРО той же или более свежей версии.
Итого выявлено, что при функционировании системы в определенном состоянии:
- при использовании RSA-ключа утечки хэндлов не воспроизводятся, в то время, как при использовании ГОСТ-ключа, утечки воспроизводятся даже в csptest
- после некоторых действия (переустановки СКЗИ, единожды вроде бы https://answers.microsof...1bb50e15abe8&page=20 отработка по инструкции помогла, но это не подтвердилось повторно) ситуация исправляется.
.
Прошу помочь в иных способах диагностики проблемы (без переустановки версии СКЗИ).
Отредактировано пользователем 12 февраля 2019 г. 11:19:45(UTC)
| Причина: Не указана