Как стать автором
Обновить
0
VDSina.ru
Серверы в Москве и Амстердаме

Они среди нас: исследуем уязвимости и вредоносный код в приложении Zoom для Windows

Время на прочтение5 мин
Количество просмотров16K
Автор оригинала: Thorsten Schröder

Кто добавил в Zoom этот «изюм»?


В последнее время часто приходится слышать примерно такие реплики:

«Мы/я не используем Zoom для конфиденциальных разговоров»



Но что если кто-то кроме конфиденциальности сеанса Zoom заботится о целостности данных на своем устройстве? И не зря, потому что, как оказалось, для этого есть основания. На кону не только данные конференции Zoom, но и целостность и конфиденциальность всего, что участник конференции сохраняет на своем компьютере.

Итак, я провел два вечера (в общей сложности около 5-6 часов), препарируя Zoom для Windows (версия 4.6.11 (20559.0413)). Я занимался только статическим анализом, не наблюдая за работой приложения в реальном времени. Но мне хватило и этого. Всё, что я обнаружил, описано в данной статье. Но я уверен, что это только верхушка айсберга. Представьте себе, что может накопать аналитик по безопасности, обладающий достаточным количеством времени и бюджетом… А я целенаправленно искал те уязвимости, которые можно использовать для раскрытия конфиденциальной информации третьим лицам (например, утечка информации в Facebook).

Я провёл очень поверхностное исследование и не углублялся в детали. Я занимался этим в свободное время и больше этим заниматься не намерен. Я ставил перед собой чёткую цель — дать оценку качеству кода с точки зрения безопасности и наличия (или отсутствия) поддержки программного обеспечения, входящего в состав приложения Zoom (что особенно необходимо при использовании большого количества сторонних библиотек).

Архаичное 32-битное приложение


Серьёзно? Ну почему?! Microsoft добавила поддержку 64-битных приложений и различных улучшений безопасности для 64-битных процессоров, начиная с Windows 7. Это было в 2009 году, одиннадцать лет назад. Да и сама Windows 7 уже давно морально устарела (с 14 января 2020 года эта ОС больше не поддерживается). Но нет, в 2020-м Zoom по-прежнему выпускает только 32-разрядные приложения для Windows.

zData.dll


zData.dll использует компонент с уязвимостями. Устаревшая библиотека OpenSSL 1.0.2 (от 27 марта 2018) известна своими уязвимостями, которые больше никто не будет исправлять.

С декабря 2019 года работа над OpenSSL 1.0.2 прекращена. Вот что пишут её разработчики:

«По текущим и будущим релизам проект OpenSSL принял следующие решения:

  • Следующей версией OpenSSL станет 3.0.0.
  • Версия 1.1.1 будет поддерживаться до 2023-09-11 (LTS).
  • Версия 1.0.2 больше не поддерживается. Теперь доступна расширенная платная поддержка.
  • Версии 1.1.0, 1.0.1, 1.0.0 и 0.9.8 больше не поддерживаются».

Или вот:



Объединение SQL-выражений


  • CWE-89: Некорректная нейтрализация специальных элементов SQL-команд (SQL-инъекции)

В zData.dll бэкенд используется для хранения различных данных сеанса и конфигурации в зашифрованной базе SQLite. В некоторых случаях в коде операторы SQL, по-видимому, просто объединяются, как показано ниже:

Пример 1:



Пример 2:



В зависимости от реализации оператора +=, zData.dll может потенциально создавать уязвимость SQL-инъекций, которые могут привести к раскрытию информации или выполнению произвольного кода на устройствах конечных пользователей Zoom.

Ой, простите… а это, случайно, не ключ для криптографического дешифрования зашифрованной базы данных SQLite?



Точно не знаю, на самом деле :-) Однако шифрование базы в принципе не мешает получить доступ к конфиденциальным данным, которые там хранятся. Похоже, что Zoom использует базу данных SQLite для хранения записей истории, журналов и, возможно, также для хранения конфиденциальных данных, таких как пароли и / или криптографические ключи. Я не стал углубляться в использование SQLite в качестве контейнера данных, оставляю это удовольствие более любопытным читателям.

Zzhost.dll


Угроза переполнения буфера


Просматривая таблицы импорта бинарных файлов, я наткнулся на вызов sprintf (). Но ведь известно, что sprintf () — потенциально опасная функция, и компиляторы выдают предупреждения, если вы используете её. Похоже, что такие предупреждения не беспокоят разработчиков Zoom.

  • CWE-120: копирование содержимого буфера без предварительной проверки размера входных данных (в функции логирования)
  • CWE-676: использование потенциально опасных функций (sprintf)



Чтобы успешно использовать эту ​​уязвимость, необходимо контролировать содержимое исходного буфера. Сам я это делать не пробовал. Однако, поскольку это функция ведения журнала (то есть, логирования), злоумышленники теоретически могут влиять на содержимое исходного буфера. Еще раз, сам я не проверял, возможно ли это на самом деле. Но даже сам факт возникновения такой возможности и игнорирование предупреждений об опасности использования функций — очень плохая практика. Разработчики! Не делайте так!

zCrashReport.exe


Сохранение ключей реестра Windows


Реестр Windows содержит достаточно важную информацию — особенно, когда мы обращаемся к нему через процесс с привилегированными правами.

Я нашёл вот что:



«Dumping registry keys» («Сохранение ключей реестра») для меня звучит как вредоносная функция, поэтому я попытался выяснить, действительно ли она сохраняет ключи и значения реестра Windows. Да, это так, я нашёл в коде соответствующий фрагмент:



Захват экрана в Crash Reporter


zCrashReport.dll предлагает нам следующие функции:



В crashReport.exe, используются функции Windows API для захвата экрана и окон.



Как думаете отсылает ли Zoom захваченные с экрана данные на свои серверы? Если да, то это можно расценивать как вредоносный код.

Airhost.exe


Компоненты с уязвимостями


Airhost.exe использует libcurl 7.36.0 (вышла 26 марта 2014), в которой найдено 52 уязвимости. Ну а curl, в свою очередь включает libssh2, которая также отметилась рядом уязвимостей:




Эти уязвимости, к счастью, не представляют угрозы конкретно для пользователей Zoom. Тем не менее, зачем использовать устаревшие и уязвимые библиотеки, если вы вообще заботитесь о своем коде? Проще использовать последнюю версию, чем гадать, повлияет ли очередная найденная уязвимость на ваше приложение, не правда ли?

Шифрование/дешифрование с «захардкоженными» ключами


Airhost.exe использует константу в качестве ключа симметричного шифрования: Выходная строка SHA256 “0123425234234fsdfsdr3242” используется для шифрования / дешифрования AES-256 через OpenSSL.



А строка “3423423432325249” используется как вектор инициализации IV.



Уязвимости zWebService.dll и tp.dll


zWebService.dll и tp.dll используют libcurl 7.55.1. Даже несмотря на то, что эта библиотека не такая старая, как libcurl 7.36.0 (которая используется в airhost.exe), она всё-таки тоже немного устарела. Если бы разработчикам была по-настоящему важна безопасность конечных пользователей, они изучили бы этот список уязвимостей:



Уязвимости turbojpeg.dll


Turbojpeg.dll использует libjpeg-turbo 2.0.0 (build 20190715). Вот список уязвимостей класса Remote code execution (Удаленное выполнение кода) turbojpeg/libjpeg-turbo:



Что дальше?


На этом месте я прекратил копаться во внутренностях Zoom для Windows. Тем, кто хочет продолжить, я с удовольствием передаю эстафету:

sha256 checksums of Zoom 4.6.11 (20559.0413) executable files

Теги:
Хабы:
Всего голосов 26: ↑22 и ↓4+18
Комментарии14

Публикации

Информация

Сайт
vdsina.ru
Дата регистрации
Дата основания
Численность
11–30 человек
Местоположение
Россия
Представитель
Mikhail

Истории