klink0v (klink0v) wrote,
klink0v
klink0v

Categories:

Очередная пидерсия в Windows (SmartCard+RDP)

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

Сперва небольшой исторический экскурс. Начиная с версии Windows Vista и соответствующих ей серверных систем (Server 2008 R1) мелкомягкие полностью переделали архитектуру работающих со смарт-картами компонентов. Это коснулось в том числе и драйверов.

В первый раз с "нововведениями" я столкнулся, когда попытался сделать для пользователей доступ в локальную сеть через OpenVPN в неинтерактивном режиме с аутентификацией по eToken-у. В Windows XP оно прекрасно работало, в Vista и семерке — перестало. Совместно с аладдиновскими разработчиками причина тому была найдена. В той самой пресловутой "новой архитектуре" системные службы (и вообще все что выполняется не из контекста пользователя) больше не могут общаться с драйверами eToken в PKI-режиме, а драйвера режима ядра в принципе не умеют однофакторную (то есть без ввода пароля на токен) аутентификацию. Надо ли разъяснять, что в неинтерактивном режиме пароль вводить как бе и некому? Вот так было работающее отлаженное решение -> не стало решения.

Теперь я столкнулся с "усовершенствованиями" ещё раз, во всей их красе. Поводом стала ситуация, когда некоторые очень кривые криптопродукты (самый красочный пример — BSS) просто отвратительно работают со смарт-картами в RDP-сеансах. Проще говоря, дико тормозят и тупят. И это заметил не я один. Но поскольку дать [censored] рукожопым программистам из BSS я не в состоянии и отказаться от использования их продуктов — тоже, решил искать обходные пути. Например, редиректить токен на терминал-сервер не встроенным в RDP-клиента способом, а сторонним софтом, который на низком уровне заворачивает USB-шину в Ethernet. Ха-ха, не тут-то было!

Внезапно я узнал, что терминал-сервер так устроен, что локально подключенные к серверу смарт-карты в RDP-сеансах не доступны by design. То есть в самой WinSCard.dll, через которую проходят все вызовы API-функций работы со смарт-картами есть однозначное логическое ветвление. Если вызов приходит из нулевого сеанса (RDP с ключем "/admin", локально залогиненный пользователь, VNC или Radmin и т.д.), то в этой сессии доступны локально подключенные к серверу токены. В противном же случае (если номер RDP-сеанса ненулевой), то возможно работать только со смарт-картами RDP-клиента и только из того же самого сеанса. Пруф.

И дошло до того, что некоторые народные умельцы начали самостоятельно отлаживать и патчить пресловутую WinSCard.dll для того, чтобы можно было работать с физически подключенными к серверу токенами из RDP-сеанса (начало, продолжение). Но это ж онанизм и извращение, согласитесь. Особенно в корпоративных средах.

А на аладдиновских форумах регулярно всплывают вопросы "ой, а почему у меня не работает?" (раз, два).

Вот же "доулучшались", черти мелкомягкие. И чего у них зазудило, спрашивается? Хотели как лучше, а получилось как всегда?

Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 7 comments