
Разбор уязвимости CVE-2019-9745.
Творческий подход лежит в основе тестирования на проникновение, что делает нашу работу интересной. Однако одной из ловушек является склонность к «переусложнению» сценариев атак и сосредоточению исключительно на ошибках (условиях ошибок). Дефекты (непредусмотренное поведение) могут присутствовать с не менее разрушительными последствиями. Эта статья представляет собой пример из практики, демонстрирующий важность тестирования на проникновение на предмет таких дефектов. Одновременно она аргументирует необходимость применения процесса SDLC (Secure Development Lifecycle).
Статья является частью RD (ответственного раскрытия) уязвимости CVE-2019-9745 и написана в тесном сотрудничестве с вендором CloudCTI. Она даёт обзор уязвимости высокого уровня перед детальным погружением в технические подробности. После демонстрации эксплуатации уязвимости приводятся выводы и извлечённые уроки.
CloudCTI Recognition Configuration Tool, который мы исследовали во время одного из наших тестов на проникновение, используется для получения информации из CRM-систем (Customer Relationship Management). Это предоставляет персоналу колл-центра соответствующую информацию во время звонков клиентов. Было выявлено несколько проблем, которые можно объединить для полной компрометации локальной системы. Вендор хотел бы подчеркнуть, что это не затрагивает системы других клиентов и их собственные.
Как и в случае со многими уязвимостями безопасности, важная проблема заключается в проверке данных, поступающих из-за пределов вашей сферы влияния. Не менее важно осознание того, что системы и программное обеспечение работают во враждебных средах. Время и опыт научили нас, что перехват является угрозой в интернете. Однако то же самое справедливо и для других каналов связи, даже внутри самой системы. Это сыграло ключевую роль в обнаружении уязвимости.
Анализ первопричин выявленных проблем показывает важность таких практик, как TM (моделирование угроз). TM помогает выявлять риски на ранних стадиях проектирования и разработки. Это может привести к снижению неприемлемых рисков или перепроектированию/переработке. Хотя читателю рекомендуется провести собственный анализ, для справки приведены описания контрмер вендора.
Программное обеспечение вендора состоит из четырёх приложений, работающих вместе. Первое приложение — графический интерфейс пользователя (GUI). Он позволяет пользователю инициировать получение информации из нескольких пакетов CRM-программ:
GUI делегирует получение информации службе (второму приложению) путём отправки сообщения. Первые проблемы безопасности проявляются именно здесь: не только любой пользователь системы может наблюдать сообщения между GUI и службой, чтобы определить их формат и содержимое (влияя на конфиденциальность), но и отправлять собственные сообщения (влияя на авторизацию). Кроме того, источник сообщений для службы не проверяется (влияя на неотказуемость). В терминологии моделирования угроз STRIDE это означает, что система подвержена раскрытию информации и вмешательству. Действительно, информация, извлечённая из этих сообщений, сыграла решающую роль в обнаружении уязвимости.
Третье приложение — один из множества специализированных импортеров. Служба перекладывает получение информации для конкретного пакета CRM на конкретный импортер. Сообщение, отправляемое GUI, содержит конкретные инструкции для этого импортера. При изучении импортера CRM Exquise выясняется, что получение информации дополнительно делегируется внешнему (четвёртому) приложению. При исследовании внутренней логики импортера было обнаружено, что внешнее приложение может быть указано в сообщении между GUI и службой. Проблема, которая здесь проявляется, заключается в том, что внешнее приложение выполняется без проверки его идентичности (влияя на неотказуемость).
Объединив эти проблемы, мы могли перехватывать сообщения для определения их формата и отправлять сообщение, в котором указывали собственное вредоносное внешнее приложение. Это внешнее приложение выполняется с теми же привилегиями, что и импортер/служба. Поскольку эти привилегии являются наивысшими возможными в системе, достигается полный контроль, и система оказывается скомпрометированной.
Эти проблемы устранены вендором путём шифрования сообщений (устраняя проблему конфиденциальности) с использованием уникальных общих секретов (устраняя проблему авторизации), доступ к которым имеют только аутентифицированные системные пользователи, владеющие ими (устраняя первую проблему неотказуемости). Наконец, внешнее приложение криптографически подписано (устраняя вторую проблему неотказуемости). Сочетание этих мер успешно устраняет уязвимость.
Когда приложение GUI CloudCTI Recognition Configuration Tool (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\CloudCTI Recognition Configuration Tool.exe) установлено, оно исследуется с помощью Process Explorer. Это показывает, что вспомогательная служба (Recognition Update Client Service) устанавливается и выполняется с правами NT AUTHORITY\SYSTEM:
При исследовании исполняемого файла службы (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\RecognitionUpdateClientServiceService.exe) становится очевидно, что он разработан с использованием языка программирования .NET. Его можно декомпилировать с помощью dnSpy, чтобы получить представление о его внутренней логике, которая будет подробно описана ниже.
RUCS2017Service (внутреннее пространство имён .NET в исполняемом файле службы) оказывается тонкой обёрткой вокруг пространства имён RUCS2017 (C:\Program Files (x86)\CloudCTI Recognition Configuration Tool\RUCS\RUCS2017.dll). Он определяет сервер именованных каналов (Named Pipe) с именем RUCS20151029 на RUCS2017.dll:RUCS2017.TRUCS2017:902:
Этот сервер именованных каналов запускается на RUCS2017.dll:RUCS2017.TRUCS2017:833: