Virtual Network Computing (VNC)
Перехват сетевого трафика
Если пакет VNC установлен без каких бы то ни было модификаций, то после аутентификации шифрование потока сообщений между клиентом и сервером не выполняется. Не стоит надеяться на то, что если этот поток сообщений сжат, то его труднее перехватить, чем, скажем, в сеансе telnet. Поскольку файлы с исходным кодом VNC найти очень легко, то не составит особого труда и разработать специальный перехватчик сообщений VNC. Поэтому установка соединения с сервером VNC без применения шифрования сопряжена с большим риском. Хотя исходный пароль VNC передается с использованием механизма "вопрос/ответ", весь поток сообщений передается в незашифрованном виде. Вполне возможно, что взломщик сможет отследить передаваемые сообщения и перехватить пароли, вводимые пользователями при регистрации.
Контрмеры: предотвращение перехвата сетевого трафика
К счастью, существуют различные механизмы, которые можно использовать для шифрования трафика VNC. Первым и основным из них является использование оболочки ssh, с помощью которой можно организовать защищенный канал между клиентом и сервером VNC.. Кроме того, к исходному коду пакета VNC можно применить дополнительные модули (http://web.mit.edu/thouis/vnc/), которые позволяют реализовать шифрование по открытому ключу. И наконец, для контроля каждого IP-адреса, с которого происходит доступ, можно использовать ТСР-оболочки (http://www.uk.research.att.com/vnc/archives/1998-09/0168.html).
Ненадежный метод хранения паролей VNC
В октябре 1999 года Конд Вампиро (Conde Vampiro) сообщил о некоторых изъянах программы VNC (http://www.roses-labs.com/advisory/RLvncbug.txt). Самый серьезный недостаток связан с тем, как служба VNC хранит пароль сервера VNC (а именно в системном реестре Windows). Хотя пароль сервера VNC шифруется с помощью алгоритма 3DES, при этом пароль каждый раз сохраняется с использованием фиксированного ключа (23 82 107 6 35 78 88 7). Это еще один наглядный пример неумелого применения надежного алгоритма шифрования (3DES). Поскольку ключ известен, то можно без проблем расшифровать пароль любого сервера VNC.
Пароль VNC хранится в ключе системного реестра HKEY_USERSX.DEFAULT\ SOFTWARE\ ORL\WinVNC3\Password. В нашем примере этот ключ представлен следующим блоком данных:
2F 98 ID С5 48 ЕО 9Е С2
Если сервер, на котором запущена служба VNC, взломан, то для получения пароля VNC можно воспользоваться программой vncdec (более подробную информацию о взломе систем Windows NT и 2000 можно найти в главах 5 и 6 соответственно). Перед компиляцией исходного файла его нужно немного изменить, чтобы строка паролей выглядела следующим образом.
/*поместите в массив р[] хеш-код пароля*/ char p[]=(0x2F, 0x98, 0xlD, 0xC5, 0x48, 0xE0, 0x9E, 0хС2};
После этого можно скомпоновать исполняемый файл vndec, а затем запустить его.
[shadow]# vncdec test
Как видно из примера, пароль сервера test без особых усилий можно перевести в незашифрованный текстовый формат.
Контрмеры против ненадежного хранения паролей VNС
В последней версии программы, доступной во время написания данной книги, этот недостаток все еще не был устранен. Наилучшей зашитой от доступа взломщиков к системному реестру является использование средств обеспечения безопасности на уровне серверов. В главах 5 и 6 приведен исчерпывающий список мер предосторожности систем Windows NT и 2000.