В этом посте я решил поделиться реализацией дополнительной аутентификации пользователя, при доступе к компьютеру через удалённый рабочий стол на базе ОС Windows, с использованием RSA-алгоритма
Обеспечить доступ к удалённому компьютеру только определенным пользователям.
Хабраюзер, наверняка, сразу скажет, что можно с помощью встроенных методов аутентификации ограничить доступ. Согласен, но заказчик не согласен был на такие условия опираясь на клавиатурные шпионы, подборы паролей и другое.
И тогда предложил ему аутентификацию с помощью асимметричного алгоритма.
Читать
Необходимы:
1. Генератор открытого ключа (ОК) и секретного ключа (СК);
2. Серверная часть, которая будет запускаться при прохождении windows-аутентификации, и ждать от пользователя СК;
3. Пользовательская часть — отправляет к серверной части СК.
Организовали VPN-соединение для работы под терминалом.
1. Устанавливаем серверную часть;
2. Генерируем ОК и СК;
3. Запрещаем редактирование, чтение файла для всех, кроме пользователя, под которым запускается серверная часть;
4. В настройках пользователей при работе через удалённый рабочий стол указываем, что серверную часть нужно сразу запускать при входе пользователя:
Расскажу подробнее о серверной части, точнее что происходит после ее запуска.
В первую очередь — блокировка движений мышки и игнорирование нажатий кнопок на клавиатуре. Пользователь на своём компьютере спокойно может работать, но в терминале удалённый компьютер игнорирует действия пользователя до тех пор, пока пользователь не отправит ему правильный СК. Тайм-аут стоит 3-5 минуты. Если за это время СК не был отправлен — сервер завершает сеанс удалённого рабочего стола.
Если СК — правильный — пользователю предоставляется доступ.
1. Устанавливаем клиентскую часть;
2. Настраиваем удалённый рабочий стол;
3. Копируем на съемный носитель СК.
Пользователь открывает сеанс удаленного рабочего стола и проходит windows-аутентификацию:
После этого, сервер сразу запускает нашу серверную часть и блокирует любые действия, отправляет клиенту массив случайных байтов (открытый текст), запускается таймер 3-5 минут.
Пользователь запускает свою часть, указывает секретный ключ с помощью которого происходит шифрование ОТ и отправка результата шифрования серверу.
Сервер, с помощью ОК, расшифровывает шифрт-текст и сравнивает с ОТ.
Если ключ подходит или не подходит, пользователю эта информация выдается на экран. В данном случае СК подошёл и пользователь может работать на удалённом компьютере.
Можно ограничить доступ к своему компьютеру или, как в данной ситуации, между офисами в разных местах.
Исходники выложу вечером.
UPD: Читая комментарии, Хабрачитателю может стало не понятно зачем всё так было сделать. Сделаю небольшое отступление:
Верно было сказано, что можно реализовать с помощью разных технологий, но основная проблема, даже требование, которое было выдвинуто — быстрота развёртывание на новой машине и предоставление доступа определенному пользователю, а не компьютеру. Да, настроить доступ по IP — можно, но человеческий фактор будет присутствовать. В моём случае тоже — но тут сводится к потере/передаче СК третьему лицу
Задача
Обеспечить доступ к удалённому компьютеру только определенным пользователям.
Хабраюзер, наверняка, сразу скажет, что можно с помощью встроенных методов аутентификации ограничить доступ. Согласен, но заказчик не согласен был на такие условия опираясь на клавиатурные шпионы, подборы паролей и другое.
И тогда предложил ему аутентификацию с помощью асимметричного алгоритма.
Читать
Идея
Необходимы:
1. Генератор открытого ключа (ОК) и секретного ключа (СК);
2. Серверная часть, которая будет запускаться при прохождении windows-аутентификации, и ждать от пользователя СК;
3. Пользовательская часть — отправляет к серверной части СК.
Реализация
Этап первый
Организовали VPN-соединение для работы под терминалом.
Этап второй — настройка удалённого компьютера
1. Устанавливаем серверную часть;
2. Генерируем ОК и СК;
3. Запрещаем редактирование, чтение файла для всех, кроме пользователя, под которым запускается серверная часть;
4. В настройках пользователей при работе через удалённый рабочий стол указываем, что серверную часть нужно сразу запускать при входе пользователя:
Расскажу подробнее о серверной части, точнее что происходит после ее запуска.
В первую очередь — блокировка движений мышки и игнорирование нажатий кнопок на клавиатуре. Пользователь на своём компьютере спокойно может работать, но в терминале удалённый компьютер игнорирует действия пользователя до тех пор, пока пользователь не отправит ему правильный СК. Тайм-аут стоит 3-5 минуты. Если за это время СК не был отправлен — сервер завершает сеанс удалённого рабочего стола.
Если СК — правильный — пользователю предоставляется доступ.
Этап третий — настройка пользовательского компьютера
1. Устанавливаем клиентскую часть;
2. Настраиваем удалённый рабочий стол;
3. Копируем на съемный носитель СК.
Как это всё работает
Пользователь открывает сеанс удаленного рабочего стола и проходит windows-аутентификацию:
После этого, сервер сразу запускает нашу серверную часть и блокирует любые действия, отправляет клиенту массив случайных байтов (открытый текст), запускается таймер 3-5 минут.
Пользователь запускает свою часть, указывает секретный ключ с помощью которого происходит шифрование ОТ и отправка результата шифрования серверу.
Сервер, с помощью ОК, расшифровывает шифрт-текст и сравнивает с ОТ.
Если ключ подходит или не подходит, пользователю эта информация выдается на экран. В данном случае СК подошёл и пользователь может работать на удалённом компьютере.
Характеристики
- Длинна ключа: 128 байт
- Использование для использования любого порта
- Возможности вести логи
Где можно применить
Можно ограничить доступ к своему компьютеру или, как в данной ситуации, между офисами в разных местах.
Исходники выложу вечером.
UPD: Читая комментарии, Хабрачитателю может стало не понятно зачем всё так было сделать. Сделаю небольшое отступление:
Верно было сказано, что можно реализовать с помощью разных технологий, но основная проблема, даже требование, которое было выдвинуто — быстрота развёртывание на новой машине и предоставление доступа определенному пользователю, а не компьютеру. Да, настроить доступ по IP — можно, но человеческий фактор будет присутствовать. В моём случае тоже — но тут сводится к потере/передаче СК третьему лицу