Предисловие
Ниже перевод английской статьи,
опубликованной несколько дней назад на
сайте SecurityFocus. По моему довольно интересна
по ряду причин: 1) Управляя в терминальном
режиме серверами и рабочими станциями я (почему-то
🙂 никогда не задумывался о возможности
перехвата информации; 2) Статья описывает
ряд инструментов и процессов, интересных
каждому интересующемуся безопасностью,
особенно начинающим. Несогласные идут
лесом и пишут свои варианты 🙂
За дело
Один из вопросов, стоящих перед
администратором Windows сети - как безопасно
управлять удаленными компьютерами? В мире
Linux все решает SSH, этого протокола вполне
достаточно для решения такой задачи. Благодаря SSH мы не
только можем управлять удаленной станцией
в текстовом терминальном режиме, но и при помощи
туннелирования запустить X-Window и рулить
компьютером уже через него - в графике. И все это,
заметьте, с мощным шифрование, которое
защищает информацию от посторонних глаз.
К сожалению в Windows безопасное управление
не столь элементарно. Почему? Во-первых только
NT Terminal Server, 2000 Server и XP поставляются с
терминальными службами. Во-вторых
программы для удаленного управления для
Windows вообще не шифруют передаваемые данные
или шифруют, но в таком случае стоят как
паровоз.
В предлагаемом мной решении этой проблемы
мы будем пользоваться следующим софтом:
- VNC - Virtual Network Computing, программа для
удаленного управления Windows системой. В
нашем случае VNC будет ядром всего решения. - Stunnel - утилита, создающая SSL "туннели"
для передачи зашифрованных данных. В
нашем случае она будет прокладывать
дорогу для протокола VNC. - OpenSSL - библиотека с криптографическими
функциями, при помощи нее можно управлять
открытыми ключами (генерировать, подписывать.
отзывать), в нашем случае именно это и
надо для клиента и сервера.
Привожу концепцию работы всей системы:
Устанавливаем
VNC
Качаем отсюда: http://www.uk.research.att.com/vnc/,
устанавливаем на машину, откуда будем
рулить, сервер. Регистрируем (Register VNC Server Service)
и ребутимся, после чего настраиваем
параметры. Главное: задать правильный
пароль и отключить опцию Enable Java Viewer.
Далее грузим клиент и устанавливаем на управляемую
машину. Нужно проверить, могут ли клиент и
сервер соединиться в принципе и продолжить
конфигурацию. Так как VNC сервер по идее
должен иметь связь только с локально
установленной Stunnel, надо добавить в реестр
следующий ключ:
Key: HKEY_LOCAL_MACHINE\Software\ORL\WinVNC3
Name: LoopbackOnly
Type: REG_DWORD
Value: 1
Это позволит только локальному
компьютеру (127.0.0.1) получить доступ к 5900 TCP
порту и оградит VNC от доступа из локальной
сети. Для того, что бы изменения вступили в
силу надо рестартовать сервис.
Stunnel
Следующий шаг - установка утилиты на
клиент и сервер. Качать тут: http://www.stunnel.org/download/binaries.html,
необходимо скачать библиотеки libeay32.dll,
libssl32.dll и положить их в каталог программы.
OpenSSL
Библиотека поставляется в большинстве
Linux'овых дистрибутивов, наверное в основном
из-за того, что библиотека требуется для
работы OpenSSH. Но существует b версия OpenSSL
портированная под MS Windows. Бинарник OpenSSL (openssl.exe)
можно скачать с сайта Stunnel, в каталог
программы нужно доложить те же либы, что и в
предыдущем случае. Дополнительно нужен
конфигурационный файл openssl.conf
и батник ca.bat
для генерирования ключей.
Ключи и сертификаты
Авторитет по сертификатам 🙂
Начать следует с создания приватного\публичного
ключей и сертификата для третьей стороны,
Certification Authority. Приватный ключ далее будет
использоваться для удостоверения
сертификатов клиента и сервера VNC.
Сертификаn СА будет размещен на всех
серверах и клиентах. Так как приватный ключ
- один из основных элементов системы, его
надо хранить в сухом и прохладном месте, генерировать лучше со сложным паролем. Для
генерации ключей и сертификатов надо
сделать примерно следующее:
C:\progra~1\OpenSSL\ca genca
после этого сертификат можно будет найти в
файле C:\CA\CAcert.pem file, а ключи оставят в
C:\CA\private\CAkey.
VNC сервер
C:\progra~1\OpenSSL\ca server
Результат смотрим в C:\CA\temp\vnc_server:
- server.key - пара ключей
- server.crt - серверный сертифика
- server.pem - server.key + server.crt
VNC клиент
C:\progra~1\OpenSSL\ca client
Подбираем:
- client.key
- client.crt
- client.pem
(Продолжение следует)