Расплавленный Новый год

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

Те, кто хочет посмотреть на конкретные примеры кода, могут зайти в блог Google Zero Project. Для желающих узнать подробности прочитать описание уязвимостей и их последствий по-русски даем ссылку на цикл статей Олега Артамонова. Мы же вкратце опишем природу уязвимостей.

Обе проблемы связаны с архитектурой относительно современных (1995-го года рождения и моложе) процессоров. Meltdown характерен прежде всего для процессоров Intel, Spectre затрагивает и AMD, и современные процессоры ARM, и чипы от Qualcomm…

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

Семейство уязвимостей Spectre — тоже атака по побочным каналам, связанная с доступом к кешу. По оценкам исследователей, этой уязвимости подвержены почти все современные процессоры. Процесс определения того, какие ветки кода выполнятся, вероятностный, и набор статистики происходит по всем процессам системы. Для атаки требуется много-много раз «скормить» подсистеме сборки статистики, скажем, переходы на нужный адрес в памяти, после этого дождаться, когда легальная программа, работающая с сенситивными данными, выполнит подобные операции и начнёт их в результате с предсказанного адреса — и тогда уже прочитать данные из кеша. Это более тонкая работа, и эксплуатировать её гораздо тяжелее (для Meltdown прототипы эксплойтов уже есть, а для Spectre ещё нет). Ещё, в отличие от Meltdown, Spectre оставляет следы.

Ещё один вариант Spectre по большому счёту распространяется на один, хотя и очень важный, класс программ: браузеры. Внедряя JS-код на страницы, злоумышленники могут, например, прочитать память, куда попали конфиденциальные данные, относящиеся к другим вкладкам браузера. В Mozilla уже подтвердили уязвимость и приняли контрмеры, выпустив новую, исправленную версию браузера.

На одной из карикатур после исправления уязвимости Meltdown современный процессор Intel превращается в старый добрый 386-й. Это, конечно, преувеличение, но просадка производительности составляет, по некоторым оценкам, до 20 процентов, что довольно много. А по сообщениям компании Epic, загрузка процессоров на серверах вообще удвоилась. И, как справедливо указывают комментаторы, баг, может быть, и исправят в новых поколениях железа, но обход его останется в ПО навсегда, и производительность в любом случае останется ниже оптимальной. Google уже предложил внести изменения в компиляторы, чтобы затруднить использование уязвимости, но это тоже займёт некоторое время. Попытки полностью избежать Spectre тоже съедят какую-то долю общей производительности.

Для предотвращения Meltdown вроде бы достаточно пропатчить ядро операционной системы. Обнаруженная ещё летом прошлого года, проблема полгода изучалась в поисках решений всеми крупными производителями операционных систем, и к моменту открытой публикации все — Microsoft, Apple, производители Linux, Cisco — уже подготовили исправления. Правда, похоже, что в этот раз забыли вовремя уведомить разработчиков FreeBSD. В случае с Linux Линус Торвальдс уже подверг критике тот факт, что исправление применяется независимо от того, какой именно процессор стоит в компьютере. Такой подход приводит к просадке производительности там, где этого можно было бы избежать. В случае с Windows некоторое количество компьютеров с процессорами AMD стали неработоспособными после применения внепланового обновления от Microsoft. У части пользователей, которые всё-таки смогли загрузиться после обновления, перестали работать некоторые программы. Само обновление, к тому же, не захотело ставиться в случае, когда в системе были установлены антивирусы. В итоге пришлось перегрузить миллионы виртуальных машин на разного рода облачных хостингах — без срочного применения обновления в отдельных системах виртуализации из контейнеров становилась доступной память хост-системы. А некоторые эксперты высказывают сомнения в том, что принятые меры в принципе могут окончательно решить обе проблемы.

Да, для эксплуатации обеих уязвимостей по-прежнему требуется доступ к компьютеру жертвы. Но рано или поздно получить доступ злоумышленнику удается, так что исправления на операционную систему ставить надо, пусть это и сопряжено с потерями в производительности.

Это уже второй случай за последние несколько лет, когда нам напоминают о том, что наше программное обеспечение работает не с абстрактными вычислительными ресурсами, а со вполне конкретными процессорами. Первый случай — набор уязвимостей Rowhammer, когда, меняя значение одного бита, можно было оказывать влияние на соседние биты в физическом модуле памяти.

Вопрос, который интересует аналитиков рынка — как изменится доля рынка после такого грандиозного разоблачения. Скажем, российские «Эльбрусы», судя по всему, уязвимости не подвержены, но вряд ли завоюют мир — мощностей производства не хватит, да и покупатели могут испугаться «русских хакеров». Разработка процессоров, которые не будут подвержены Meltdown и Spectre, займёт существенное время, и до того продаваться по-прежнему будут уязвимые компоненты. Хотя,скорее всего, AMD сможет отвоевать какую-то долю рынка за счёт иммунитета к Meltdown.

В уже упомянутом цикле статей отдельное внимание уделяется тому, что на рынке практически отсутствуют смартфоны с уязвимыми по отношению к Spectre процессорами ARM — производители предпочитают более дешёвые, примитивные (и неуязвимые) варианты. А вот новые флагманские продукты современных производителей вполне имеют шанс оказаться уязвимыми, но на рынке их сейчас почти нет. Экосистема Android характеризуется тем, что обновления почти никогда не доступны, и баги живут, пока не умрёт сам телефон, так что появление новых продуктов могло бы сыграть злую шутку с ещё многими миллионами пользователей.

Похоже, что в этом году гонка за статус «уязвимости года» закончилась на самом старте. Честно говоря, мы затрудняемся (и опасаемся) представить баг, который сможет создать конкуренцию связке Meltdown-Spectre. А для полного описания всех проблем, которыми чреваты обнаруженные уязвимости, потребовалась бы статья примерно вдвое длиннее.


Автор:  Дмитрий Белявский (ТЦИ)

Возврат к списку