Уязвимость в Zoom и битва хакеров с разработчиками

Интересное с DEF CON 30: уязвимость в клиенте Zoom для macOS.

Уязвимость в клиенте Zoom для macOS

В марте 2020 года, когда весь мир привыкал к удаленной работе, в одном из главных инструментов для удаленного общения, клиенте для сервиса Zoom, была обнаружена уязвимость в установщике, позволяющая выполнять на компьютерах Apple произвольный код. Компания Zoom починила уязвимость… Почти. В августе 2022 года примерно там же была найдена еще одна дыра, которую можно было использовать в похожих целях. В этом посте мы расскажем про свежую проблему и попробуем объяснить, почему дыры в софте иногда находят в одном и том же месте несколько раз подряд. И что с этим делать.

Что за свежая уязвимость?

О новой проблеме в клиенте для веб-конференций Zoom известный исследователь Патрик Уордл рассказал на конференции DEF CON 30 в начале августа. Если совсем коротко, в системе автоматических обновлений клиента Zoom на компьютерах Apple было обнаружено несколько ошибок. Они теоретически позволяли получить так называемые права суперпользователя, с которыми потенциальный атакующий может делать на компьютере все что угодно. Для эксплуатации уязвимости, впрочем, злоумышленник уже должен иметь доступ к компьютеру — пусть и без особых прав. Но нельзя сказать, что это совсем уж нереальный сценарий: например, владелец может отойти и забыть заблокировать компьютер. Уязвимостью в теории могли воспользоваться и авторы вредоносной программы, которая иначе не могла бы нанести пользователю серьезного ущерба.

А подробнее?

Своевременная доставка и простая установка обновлений — важное требование для любой современной программы. В идеале установка программ вообще должна проходить незаметно для пользователя, но это не всегда возможно. Часто для завершения обновления программу нужно перезапустить, в некоторых случаях требуется ввести пароль пользователя, а иногда нужна и перезагрузка. Нас всех раздражают внезапно всплывающие напоминания о необходимости обновить программу, операционную систему, прошивку на смартфоне и планшете. Но это важно и необходимо: обновления закрывают прорехи в безопасности, которые иначе могут быть использованы против вас. В некоторых, особо серьезных случаях защититься от активных кибератак на какое-то уязвимое ПО необходимо как можно быстрее: день промедления может стоить потерянных данных.

Самый банальный способ обновить приложение на Mac OS ничем не отличается от первой установки программы: скачиваем файл с новой версией, запускаем, вводим пароль пользователя. В Zoom постарались эту процедуру упростить: клиент для конференц-звонков сам обращается к серверу, сам скачивает новую версию и сам устанавливает ее, не требуя от пользователя ввода пароля. К сожалению, этот процесс связи с сервером, скачивания и установки программ далеко не всегда удается реализовать правильно. 10 лет назад было распространено обращение к серверам без шифрования данных: а значит, потенциальный злоумышленник просто может подменить файл с обновлением на вредоносную программу. Внедрили шифрование — стало сложнее, но можно подменить файл уже после загрузки, когда он уже сохранен на диске, но еще не устанавливается.

В свежей (по состоянию на конец прошлого года, когда Патрик начал свое исследование) версии Zoom вроде бы все было сделано правильно. Клиент обращается к специальному серверу обновлений по защищенному каналу. Скачивает файл, удостоверяется в его подлинности, проверяя, что он подписан сертификатом производителя, устанавливает. Для установки у системы временно запрашиваются права суперпользователя, но так, чтобы владельцу компьютера не приходилось вводить пароль.

Цитата из презентации Патрика Уордла, показывающая пользу подписывания обновлений.

Цитата из презентации Патрика Уордла, показывающая пользу подписывания обновлений. Источник.

Цифровая подпись — это важно. Ведь по сути откуда-то из Интернета на компьютер пользователя скачивается программа и выполняется с максимальными привилегиями. Нужно удостовериться, что это действительно «та» программа. И просто так подменить загруженный файл не получится: как показано выше на слайде из презентации Патрика, подмена файла приводит к выводу сообщения об ошибке — цифровой подписи у ложного обновления нет, а подделать ее крайне трудно.

Увы, сам процесс проверки цифровой подписи нес в себе ошибку. Работал он так: запускалась системная утилита. Она выводила параметры цифровой подписи скачанного обновления, в том числе строку с данными о том, какая компания получила сертификат:

Zoom Video Communications, Inc. Developer ID Certification Authority Apple Root CA

Вывод утилиты обрабатывался, и если такая строка там присутствовала — то начиналась установка. Проблема была в том, что в вывод также попадало имя файла. И теоретически злоумышленник мог сделать вредоносное обновление с хитрым именем файла: вместо стандартного «ZoomUpdate.pkg» использовать «Zoom Video Communications, Inc. Developer ID Certification Authority Apple Root CA.pkg». И этого было достаточно, чтобы обмануть процедуру проверки: раз нужная строка есть, значит, файл легитимный, хотя уже и файл не тот, и «волшебные слова» написаны не там!

То есть атака могла выглядеть так: каким-то образом инициируем процедуру проверки обновлений (это не сложно), скачивается легитимный апдейт, мы его подменяем вредоносной программой и переименовываем так, чтобы успешно прошла сломанная проверка сертификата. Вредоносный файл запускается с привилегиями системы, компьютер взломан!

Но 20 декабря было выпущено очередное обновление клиента, которое сделало этот вариант атаки невозможным. Изменение было простое: файл принудительно переименовывался после загрузки. Но Патрик Уордл смог модифицировать атаку: если клиент начиная с версии 5.9.0 защищен, то давайте «обновим» клиент Zoom до любой более старой. Оказалось, что такое возможно: ведь у старого обновления был легитимный цифровой сертификат, а версия при установке не проверялась.

Почему это важно?

Исследование Патрика Уордла показывает, как важно защищать систему доставки и установки обновлений. Кроме того, история этого бага также дает понять, как часто разработчики программ пытаются решить проблему каким-то простым изменением, не анализируя ее детально. Сначала (еще до того, как Уордл сообщил о проблеме в Zoom) в декабре 2021 года сломали самый простой вариант атаки, с банальной подменой файла и обходом проверки сертификата. После сообщения об уязвимости, в апреле 2022 года, закрыли возможность «даунгрейда» — установки более старой и более уязвимой версии Zoom через стандартный механизм доставки обновлений. Только в июле 2022 года, через полгода после отчета исследователя, механизм проверки цифровых сертификатов починили.

Самое интересное, что и это не полностью решило проблему. Да, у нашего потенциального взломщика «отобрали» два простых способа атаки: через подмену файла с обновлением на вредоносный код и через «даунгрейд» до уязвимой версии. Но была еще одна проблема: файл обновления, запускаемый с привилегиями суперпользователя, мог быть модифицирован кем угодно, имеющим доступ к компьютеру! Достаточно было найти способ таки подсунуть установщику Zoom вредоносный файл в подходящий момент: после того, как была проверена цифровая подпись, но до того, как начнется установка. И такой метод действительно сработал. В результате в августе 2022 года, когда Патрик Уордл докладывал о своей работе на конференции DEF CON, через 8 месяцев после сообщения в Zoom о проблеме, уязвимость так и не была закрыта полностью! И только 17 августа, через пять дней после доклада Патрика, проблема окончательно была решена еще одним патчем. Впрочем, и это утверждение нуждается в независимой проверке.

О хакерах и разработчиках

Когда знакомишься с исследованием Патрика Уордла, невольно возникает вопрос: а почему так вообще выходит? Как в важном месте программы возникают такие детские уязвимости и почему даже после сообщения о проблеме их закрывают по восемь месяцев и с третьей попытки? Не хотелось бы без причины обвинять разработчиков в некомпетентности. Во всех программах время от времени находят ошибки и недочеты. А если все программисты ошибаются, проклятиями в их адрес проблему не решить: других разработчиков у нас все равно нет.

Возможно, причина кроется в том, что у «ответственных хакеров» (исследователей безопасности, сообщающих о своих находках производителю) и киберпреступников (использующих дыры в ПО для атак на пользователей и получения выгоды) другой набор приоритетов по сравнению с создателями ПО. Когда ты разрабатываешь программу, тебе важно сделать правильно сотни разных задач. Твой приоритет — чтобы пользователям было комфортно, удобно, чтобы (в случае Zoom) было хорошее качество связи, чтобы с клиентом работали десятки тысяч разных устройств — микрофонов, веб-камер, наушников, и все это на разных операционных системах, на компьютерах, планшетах, смартфонах, и старых, и новых. Хакеру достаточно найти одну ошибку в коде, которой можно воспользоваться для темных дел. И вот представьте, что вам сообщают об уязвимости. Да, необходимо ее закрыть, но желательно не сломать всю сложную систему из клиентского и серверного ПО. Протестировать ее в сотнях разных конфигураций. Естественно, разработчик пытается решить проблему минимальными изменениями. А их часто оказывается недостаточно.

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

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

Советы

Как отключить слежку в iOS?

У вас есть iPhone, iPad или iPod? Потратьте несколько минут на настройку служб геолокации, чтобы сэкономить заряд батареи и сохранить конфиденциальность перемещений.