Virtual Network Computing (VNC)
Программа Virtual Network Computing разработана в Англии, в лаборатории AT&T Research Labs Кембриджского университета. Ее можно найти по адресу http://www.uk. research.att.com/vnc. Программа обладает многими уникальными возможностями. Во-первых, ее можно использовать на многих платформах. Этот программный продукт можно устанавливать на компьютеры под управлением системы Windows, Linux и Solaris, а просматривать — в Windows, Linux, Solaris, Macintosh и даже с помощью Windows СЕ. Кроме того, эта программа имеет интерфейс на языке Java, что позволяет ее использовать через такие Java-совместимые броузеры, как Netscape Communicator и Microsoft Internet Explorer. Лучше всего то, что программа VNC является бесплатной!
Поскольку программа VNC обладает такими богатыми функциональными возможностями, неудивительно, что работа с этим продуктом сопряжена с некоторыми серьезными проблемами, связанными с нарушением безопасности. Она оказывается уязвимой при использовании программы Revelation. Как было показано в главе 5, через удаленное соединение программу VNC можно легко установить в системе Windows NT. Все что для этого требуется, — это инсталлировать службу VNC из командной строки после единственного изменения удаленного системного реестра, что позволит запустить ее в скрытом режиме. Конечно же, независимо от версии в списке Process List все равно будет содержаться процесс winVNC. EXE. Однако важнее всего то, что программа VNC подвержена следующим атакам.
Ниже каждая из этих атак будет рассмотрена более подробно.
Прямой подбор паролей VNC
Основным механизмом защиты сервера VNC от несанкционированного доступа является пароль, выбранный системным администратором. В этой книге уже не раз отмечалось, что взлом проще всего осуществить, если используются ненадежные пароли. Поскольку серверу VNC зачастую предоставляются высокие привилегии, решительно настроенный взломщик, проявив определенное упорство, сможет подобрать пароль сервера VNC "в лоб", простым перебором. Для подбора паролей VNC можно воспользоваться дополнительной программой rfbproto.c , которую можно применить к клиентскому приложению vncviewer. С помощью команды patch программу rfbproto.c нужно применить к пакету vnc-3.3.3rl_unixsrc.tgz. В следующем примере демонстрируется, как легко подобрать пароль сервера VNC.
[crush] # vncviewer 192.168.1.101
v' MC server supports protocol version 3.3 (viewer 3.3)
Trying password '#!comment:' VNC authentication failed
Trying password 'Common'
VNC authentication failed
Trying password 'passwords,'
VNC authentication failed
Trying password 'compiled1
VNC authentication failed
Trying password 'passwd'
VNC authentication failed
Trying password 'test'
VNC authentication succeeded
Desktop name "twistervm"
Connected to VNC server, using protocol version 3.3
Модифицированный клиент vncviewer быстро перебрал предоставленный список паролей и отгадал пароль test. После этого программа vncviewer соединилась с удаленным сервером и взломщик получил полный контроль над системой. Подобный подбор паролей производится очень быстро, и сервер VNC никак не реагирует на неудачные попытки регистрации.
Контрмеры: защита от подбора паролей VNС
При настройке сервера 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[]=(Ox2F, 0x98, OxlD, OxC5, 0x48, OxEO, Ox9E, ОхС2};
После этого можно скомпоновать исполняемый файл vndec, а затем запустить его.
[shadow]# vncdec
test
Как видно из примера, пароль сервера test без особых усилий можно перевести в незашифрованный текстовый формат.
Контрмеры против ненадежного хранения паролей VNС
В последней версии программы, доступной во время написания данной книги, этот недостаток все еще не был устранен. Наилучшей зашитой от доступа взломщиков к системному реестру является использование средств обеспечения безопасности на уровне серверов. В главах 5 и 6 приведен исчерпывающий список мер предосторожности систем Windows NT и 2000.