Эксперты «Лаборатории Касперского» изучили различные реализации системы удаленного доступа Virtual Network Computing (VNC) и выявили множество проблем. Эксплуатация некоторых из обнаруженных уязвимостей приводит к удаленному исполнению произвольного кода.
На сегодняшний день система VNC, в том числе благодаря возможности кроссплатформенных реализаций и лицензии с открытым кодом, стала одной из самых распространенных. Только по данным Shodan, количество VNC-серверов составляет более 600 000. С учетом устройств, доступных только внутри локальных сетей, можно с уверенностью сказать, что общее количество используемых VNC-серверов многократно (возможно, на порядки) больше.
По данным аналитиков, VNC также активно применяется на объектах промышленной автоматизации. Так, около 32% компьютеров в индустриальной сети имеют различные установленные средства для удаленного администрирования, в том числе VNC.
В ходе проведения исследования эксперты изучили наиболее часто встречающиеся реализации VNC, в том числе LibVNC, UltraVNC, TightVNC и TurboVNC. RealVNC проверять не стали, так как лицензия продукта не позволяет заниматься реверс-инжинирингом.
В итоге экспертам удалось выявить 37 различных уязвимостей. Более того, исследователи отмечают, что многие из обнаруженных проблем оказались «слишком простыми» и время жизни каждой из них было очень долгим. Некоторые классы уязвимостей, обнаруженные в результате исследования, содержатся в большом количестве open-source проектов и сохраняются в даже после рефакторинга кодовой базы.
«Почти во всех проанализированных проектах отсутствуют юнит-тесты, не проводится систематическое тестирование программ на безопасность при помощи статического анализа кода или фаззинга. За счет того, что код зачастую наполнен магическими константами, его можно сравнить с карточным домиком: в этой неустойчивой конструкции изменение одной константы может привести к появлению уязвимости», — рассказывает эксперт Kaspersky ICS CERT Павел Черемушкин.
К счастью, для эксплуатации серверных уязвимостей зачастую необходима парольная аутентификация, при этом из соображений безопасности сервер может не позволять пользователю установить беспарольный метод аутентификации. Именно таким образом это, например, реализовано в UltraVNC. Исследователи пишут, что для того чтобы обезопасить себя от злоумышленников, клиентам не стоит подключаться к неизвестным VNC серверам, а администраторам надо настроить аутентификацию на сервере с сильным уникальным паролем.
Также разработчикам и производителям, которые используют в своих продуктах код сторонних VNC проектов, рекомендуется: настроить механизм отслеживания багов и следить за регулярными обновлениями до последних релизов; добавить опции компиляции, усложняющие эксплуатацию возможных уязвимостей; проводить фаззинг и тестирование проекта на всех архитектурах, для которых поставляется продукт; использовать санитайзеры в ходе фаззинга и на этапе тестирования.
Детальную информацию о найденных в ходе анализа уязвимостях можно найти в отчете Kaspersky ICS CERT.