Исследование безопасности лицензионных токенов
В последние годы проблема уязвимостей в системах промышленной автоматизации становится все более актуальной. Вероятно, главным источником проблем безопасности АСУ ТП послужило то, что они развивались параллельно с системами IT, относительно независимо и часто без оглядки на современные практики разработки безопасного кода. В результате появились многочисленные частные решения: собственные сетевые протоколы, алгоритмы аутентификации и шифрования. Именно они стали основным источником находок исследователей ИБ АСУ ТП. С другой стороны, мы видим, что некоторые проблемы безопасности системы промышленной автоматизации получают с общими технологиями (вспомним CodeSys Runtime, уязвимости MS Windows и т. д.).
Компании по-разному оценивают приоритетность таких проблем и риски, с ними связанные. Всем очевидно, что раскрывать информацию об уязвимости до разработки исправления – нельзя. Однако многие компании считают, что и после появления доступного патча этого делать не стоит. Для разработчиков ПО это всегда удар по репутации. А компании, использующие уязвимые системы, не всегда физически могут своевременно установить патч, либо эта установка сопряжена с существенными затратами (перерыв в работе обновляемых систем, оплата самих работ по обновлению и т.д.).
Мы оценку риска строим, исходя из нашего опыта, – опыта разработчика и поставщика систем безопасности. Мы твёрдо уверены, что абсолютно необходимо сообщать пользователям уязвимого ПО о появлении новой угрозы и необходимости срочного обновления ПО. Это, конечно, не гарантирует, что все пользователи уязвимых систем вовремя их обновят, и угроза исчезнет. Однако в противном случае, как показывает наша практика, мало кто обновляет свои системы своевременно, даже при наличии исправлений. Мы ежедневно сталкиваемся с сотнями тысяч новых угроз и видим, что злоумышленники постоянно ищут новые возможности для атак. И мы понимаем, что, умалчивая о проблемах, мы даем им шанс.
Поэтому мы расскажем об очередной находке: как показало наше исследование, подключение к компьютеру токена для контроля лицензий ПО может открывать скрытый канал удаленного доступа для злоумышленника.
Почему мы решили исследовать SafeNet Sentinel
Во время проведения различных тестов на проникновение эксперты Kaspersky Lab ICS CERT неоднократно замечали присутствие одного и того же сервиса на компьютерах заказчиков, у которых использовались программные и аппаратные решения различных промышленных вендоров. На этот сервис не обращали внимания до тех пор, пока не нашли в нем уязвимость. Как выяснилось, это был сервис hasplms.exe, который относится к программно-аппаратному комплексу SafeNet Sentinel компании Gemalto. Это решение отвечает за контроль лицензий ПО, используемого заказчиками, и является очень распространенным во многих АСУ ТП и IT системах.
Программная часть решения представлена драйвером, веб приложением и набором других программных компонентов. Аппаратной частью является USB-токен. Токен надо подключать к персональному компьютеру или серверу, на котором ПО требуется лицензия. Некоторые модели USB-токенов приведены в таблице ниже.
Принцип работы таких средств контроля лицензий заключается в следующем: для корректной работы какого-либо программного обеспечения требуется лицензия; после того, как USB-токен вставлен в компьютер, программное обеспечение «видит» эту лицензию и начинает полноценно функционировать. Токен должен подключаться при каждом запуске и на протяжении всего времени использования программного обеспечения. Программная часть решения Gemalto устанавливается один раз и продолжает функционировать постоянно вне зависимости от жизненного цикла ПО, для которого требуется токен.
Данное решение компании Gemalto входит в состав продуктов других производителей ПО. Среди них такие компании как ABB, General Electric, HP, Cadac Group, Zemax и множество других организаций, количество которых, по некоторым оценкам, доходит до 40 тысяч.
По результатам независимых исследований, проведенных в 2011 году компанией Frost and Sullivan, продукт SafeNet Sentinel, которым сейчас владеет компания Gemalto, по объемам продаж охватывает 40% рынка решений по контролю лицензий в Северной Америке и более 60% – в Европе.
Количество конечных пользователей, которые используют решения Gemalto, неизвестно. Но если хотя бы у каждой компании есть 100 клиентов, то оно исчисляется миллионами. И мало кто задумывается над тем, что подключение к компьютеру токена для контроля лицензий ПО может быть небезопасным.
Уязвимости и векторы атак
Поведение hasplms.exe в системе, с точки зрения исследователей, было довольно любопытным: удаленно получить доступ и коммуницировать с ним можно было по открытому 1947 порту. Тип протокола определялся заголовком сетевого пакета – использовался HTTP или собственный бинарный протокол. У сервиса также имелся свой API, который базировался на HTTP-протоколе.
Процесс анализа сервиса затруднялся тем, что бинарный файл был защищен протектором типа VMProtect и генерировал свой байт-код из оригинального кода Gemalto. Поэтому было принято решение использовать фаззинг как основной инструмент для исследования поведения уязвимого сервиса.
Первым делом мы обратили внимание на функцию локализации – пользователь мог загрузить языковую локализацию в виде двух файлов, один из которых localize.xml. Во втором html файле присутствуют параметры, один из которых оказался уязвим к переполнению буфера. Это была бы простая уязвимость, если бы не один пикантный момент: как упоминалось выше, сервис защищен протектором, однако по какой-то причине разработчики не использовали классические механизмы защиты от эксплуатации подобных бинарных уязвимостей (такие как Stack Canary, Stack Cookie, ASLR и так далее). В результате простое переполнение буфера позволило выполнить произвольный код на удаленной системе.
Отметим, что такие ошибки при разработке ПО очень редко встречаются в современных решениях. Как правило, при создании серьезных коммерческих продуктов внедряются практики безопасной разработки (например, SDL – security development lifecycle), то есть безопасность приложения закладывается на этапе разработки, а не является дополнительной опцией.
Этот вектор атаки можно использовать и без LPE (локальное повышение привилегий) – уязвимый процесс запущен с правами SYSTEM, что позволяет выполнять код с наивысшими привилегиями.
Данной уязвимости был присвоен номер CVE-2017-11496.
Это была лишь одна из найденных нами уязвимостей. Итог же наших изысканий был довольно тревожным.
В конце 2016 – начале 2017 года было найдено 11 уязвимостей: две уязвимости, эксплуатация которых позволяла удаленное выполнение произвольного кода, и 9 уязвимостей отказа в обслуживании.
К июню Kaspersky Lab ICS CERT обнаружил еще три уязвимости: XML-бомба и два отказа в обслуживании, один из которых потенциально ведет к удаленному выполнению произвольного кода.
Таким образом, всего было обнаружено 14 уязвимостей, и весьма опасных (к примеру, все уязвимости типа Удаленное выполнение произвольного кода эксплуатируются автоматически с правами SYSTEM – а это наиболее привилегированные права в ОС Windows).
Информацию об обнаруженных уязвимостях мы незамедлительно отправляли Gemalto. Все найденные уязвимости получили соответствующие номера CVE:
- CVE-2017-11496 – Remote Code Execution
- CVE-2017-11497 – Remote Code Execution
- CVE-2017-11498 – Denial of Service
- CVE-2017-12818 – Denial of Service
- CVE-2017-12819 – NTLM hash capturing
- CVE-2017-12820 – Denial of Service
- CVE-2017-12821 – Remote Code Execution
- CVE-2017- 12822 – Remote manipulations with configuration files
Кроме описаний уязвимостей, мы отправили в Gemalto и описание одной странной функциональности.
Странные возможности
У hasplms.exe эксперты Kaspersky Lab ICS CERT обнаружили довольно нетипичная функциональность:
- В случае первичного подключения USB-токена производства компании Gemalto к компьютеру (даже при наличии заблокированной активной сессии!), при наличии доступа к интернету происходит автоматическая установка драйвера и службы, принимающей сетевые подключения на порту 1947;
- В случае ручной установки драйвера с сайта Gemalto происходит установка драйвера и службы, принимающей сетевые подключения на порту 1947, а также добавление порта 1947 в исключения межсетевого экрана Windows.
- В случае установки ПО Gemalto в составе установочного файла ПО третьей стороны, порт 1947 также добавляется в исключения межсетевого экрана Windows.
- Существует API-функция, позволяющая включить и выключить в веб-интерфейсе административную панель, которая позволяет менять настройки программной части программно-аппаратного комплекса SafeNet Панель доступна по умолчанию на IP-адресе local host 127.0.0.1;
- С использованием API можно изменить настройки внутреннего прокси-сервера для обновления языковых пакетов;
- После изменения прокси-сервера, используя внутреннюю логику сервиса, можно получить NTLM-хеш пользователя, из-под которого запущен процесс hasplms.exe (SYSTEM).
Данная функциональность имеет признаки недокументированных возможностей и может быть использована для скрытого удаленного доступа. То есть удаленный злоумышленник, используя эти возможности, способен организовать доступ к административной панели ПО Gemalto, провести атаки с правами системного пользователя и по завершении атаки скрыть свое присутствие.
Как было сказано выше, представители компании Gemalto были проинформированы об этом векторе атаки.
Непрозрачная безопасность
Решения, технологии или же отдельные программные модули, используемые множеством сторонних производителей, зачастую не подвергаются должным проверкам защищенности, что потенциально открывает новые векторы атак. При этом закрытие критических уязвимостей в таких продуктах, которые используются в том числе в сфере банковских технологий и АСУ ТП, не всегда проходит гладко – почему-то компании-разработчики не спешат оповещать своих пользователей об обнаруженной в своём продукте проблеме.
В начале 2017 года мы отправили Gemalto информацию об обнаруженных 11 уязвимостях. И только в конце июня, в ответ на наш очередной запрос, вендор сообщил, что исправление уже выпущено, а уведомление о закрытии уязвимостей и новой версии драйвера доступно на внутреннем пользовательском портале.
26 июня мы сообщили Gemalto о подозрительной функциональности и еще 3 уязвимостях. На сей раз дело пошло быстрее: уже 21 июля вендор выпустил приватное уведомление о новой версии драйвера – но без упоминания о закрытых уязвимостях.
Компания Gemalto уверяет, что оповестила всех своих клиентов о необходимости обновления драйвера в их личных кабинетах. Однако, видимо, этого оказалось недостаточно: после того, как мы опубликовали информацию о найденных уязвимостях, к нам начали обращаться разработчики ПО, использующего hasplms. Из общения с ними стало понятно, что они находятся в неведении относительно существования проблемы и продолжают использовать версии продукта, содержащие множественные уязвимости.
Срочно обновите софт до актуальной версии (7.6)
Мы призываем пользователей и компании, которые используют решения SafeNet Sentinel компании Gemalto, срочно установить последнюю (безопасную) версию драйвера или же связаться с компанией Gemalto для получения инструкций по обновлению драйвера.
В случае установки драйвера через серверы обновления Microsoft Windows Update мы рекомендуем проверить версию hasplms.exe и убедиться, что она последняя. Если используется устаревшая версия, необходимо срочно установить последнюю (безопасную) версию драйвера с сайта производителя или же связаться с компанией Gemalto для получения инструкций по обновлению драйвера.
Также рекомендуется закрыть порт 1947 хотя бы на внешнем (периметровом) межсетевом экране – но только в том случае, если это не нарушит бизнес-процессов. Это позволит снизить риск эксплуатации уязвимостей.
Некоторые производители ПО, использующие решения третьей стороны в составе своего продукта, могут уделять пристальное внимание безопасности своего кода, отдавая на откуп безопасность сторонних решений другим компаниям (производителям этих решений). Мы очень надеемся, что большинство компаний ответственно относятся к безопасности и своих решений, и сторонних решений, используемых в их продуктах.
Серебряная пуля для атакующего