Жизнь и смерть Adobe Flash

Как редактор векторной графики помог создать одну из самых важных технологий Интернета, и почему это привело к огромным рискам безопасности.

История технологии Flash

Давайте мысленно перенесемся — ну, например, в 2008 год. Вы только что приобрели компьютер с установленной Windows XP, подключили его к Интернету, открыли браузер, перешли на любимый веб-сайт… И обнаружили, что половина элементов на нем не отображается. «Наверное, нужно установить Adobe Flash», — подскажет вам по телефону опытный в компьютерных делах знакомый.

Истоки Flash уходят в самое начало девяностых: он зародился как инструмент для создания анимации в векторном формате — простых «мультиков», размеры которых получались достаточно компактными, чтобы их можно было загружать даже через медленное интернет-соединение по модему.

К концу нулевых Adobe Flash Player — грубо говоря, «инструмент для воспроизведения мультиков» — превратился в практически обязательный для скачивания программный продукт, без которого у вас буквально не работала половина Интернета. Тогда же его начали активно атаковать злоумышленники: уязвимости в Flash Player обнаруживали буквально десятками. Во многом из-за этого, начиная с 2010 года, у Flash появилось много ярых противников, и даже компания Adobe признала, что развитие Интернета должно идти иным путем. Тем не менее похороны Flash продлились почти 10 лет, да и то удались лишь частично. Это одна из самых интересных историй, связанных с информационной безопасностью в Сети. Мы хотим рассказать ее во всех подробностях.

Лихие планшеты лихих девяностых

История Flash начинается в 1992-1993 годах, когда сразу несколько производителей выпустили компьютеры-планшеты. Да, почти такие же, как Apple iPad, только на 13 лет раньше. Выглядело это, на примере очень редкого IBM ThinkPad 700T, как-то так:

Планшетный компьютер ThinkPad 700T.

Планшетный компьютер ThinkPad 700T. Источник

Операционную систему PenPoint OS для таких устройств разработала компания GO Corporation, и эта первая попытка сделать портативный компьютер-планшет достаточно быстро провалилась. Уже в 1994 году Go Corporation была продана корпорации AT&T, которая одновременно с этим прекратила производство собственного планшетного компьютера. Тем не менее под PenPoint OS было написано несколько независимых приложений. Одним из них стал графический редактор SmartSketch, разработанный компанией FutureWave Software.

Увы, релиз SmartSketch совпал по времени с полным провалом PenPoint OS. FutureWave сначала адаптировала редактор для Microsoft Windows и Mac OS, а потом добавила возможность создания анимированных изображений, заодно переименовав продукт в FutureSplash Animator. В 1996 году FutureWave Software была приобретена компанией Macromedia, а ее продукт был переименован в Macromedia Flash. Состоял он из двух компонентов: программы для собственно создания анимированной графики и компактной утилиты Macromedia Flash Player, способной воспроизводить эту анимацию на компьютерах пользователей. Важно то, что и SmartSketch, и ранняя Macromedia Flash использовали так называемую векторную графику.

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

В девяностые годы прошлого века пользователи, как правило, подключались к Сети через модемы. Это было крайне медленное соединение, обеспечивающее передачу данных со скоростью в лучшем случае 5-6 килобайт в секунду. Любая растровая картинка в минимально приличном качестве загружалась как минимум несколько секунд (а то и десятки). Из-за этого у многих загрузка изображений была и вовсе выключена в настройках браузера. Благодаря использованию векторной графики технология Macromedia Flash умела передавать красочные анимированные изображения, которые загружались очень быстро.

Прежде чем продолжить, надо обозначить еще один важный момент: говоря о Flash, мы говорим, по сути, о коде, который загружается на компьютер пользователя каждый раз, когда он открывает сайт с Flash-контентом. Это не обычный исполняемый файл, а лишь набор инструкций, который выполняется установленным на ПК софтом Macromedia Flash Player. Но смысл от этого не меняется. Хотя, в принципе, ничто не мешало сделать исполняемый файл, содержащий и контент, и проигрыватель.

Довольно быстро Flash начал обрастать дополнительной функциональностью: помимо графики, добавилось воспроизведение звука, наложение эффектов на изображение, позднее — даже передача видео.

Веб с добавками

Автор этих строк познакомился с Macromedia Flash в 2001 году, когда начал смотреть только появившийся веб-сериал «Масяня». Той осенью каждый понедельник по утрам я скачивал и смотрел новую серию — короткий мультик длительностью 1-2 минуты. Автор «Масяни», Олег Куваев, создавал анимированные ролики в программе Macromedia Flash и выкладывал их на свой сайт как раз в виде исполняемых файлов — в них был встроен Flash Player и сама анимация. По сути, это развлечение предшествовало современному просмотру видеороликов на YouTube. На примере «Масяни» легко оценить компактность формата: шестая серия сериала «Модем» занимала всего 600 килобайт, напомню, вместе с софтом для воспроизведения. Этот же эпизод в видеоформате, в самом базовом качестве, весит в три раза больше, и вам еще понадобится программа-проигрыватель.

Технология Macromedia Flash изрядно расширяла возможности интернет-браузеров тех лет, которые сами по себе разнообразием демонстрируемых форм контента не отличались: текст да картинки. Логичным развитием стало внедрение плагина, поддерживающего воспроизведение Flash-контента, прямо в браузер — чтобы не надо было ничего отдельно скачивать и запускать. То есть объекты Flash по-прежнему представляли собой код, который исполнялся на вашем компьютере. Разница лишь в том, что после установки плагина эти программы запускались без дополнительных действий с вашей стороны, по мере загрузки контента веб-страницы.

Расширялись и инструменты для разработчиков: к концу девяностых речь уже не шла о простой анимации. При помощи Flash уже можно было реализовывать элементы меню, с которыми пользователь мог взаимодействовать; появилась поддержка скриптового языка, позволяющего создавать все более сложные конструкции внутри Flash-объекта. Чтобы было наглядно, покажем эволюцию возможностей веб-сайтов. От самой первой веб-страницы 1990 года:

Первая в истории веб-страница.

Первая в истории веб-страница. Только текст и гиперссылки. Источник

…до типичного веб-сайта 1996 года:

Популярный портал Yahoo осенью 1996 года. Все еще текст и ссылки, но есть пара графических элементов.

Популярный портал Yahoo осенью 1996 года. Все еще текст и ссылки, но есть пара графических элементов. Источник

Веб-сайт с элементами Flash в 2000 году выглядел так:

Сайт игровой приставки Sony PlayStation в 2000 году.

Сайт игровой приставки Sony PlayStation в 2000 году. Буйство красок, но большая часть элементов выполнена в обычном HTML. Центральный элемент — анимированный, содержит фотографии, анимацию и видео. Источник

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

На сайте кроссовок Nike Air 2006 года весь интерфейс реализован с помощью Flash.

Во-первых, это красиво. На сайте кроссовок Nike Air 2006 года весь интерфейс реализован с помощью Flash. Без соответствующего плагина он не открывается. Источник

Технология Macromedia Flash серьезно расширяла границы возможного во всем, что касается дизайна сайтов. Она снимала с разработчиков множество ограничений по размещению анимированных элементов, использованию звука и видео, красивым эффектам перехода между «страницами».

В 2006 году Macromedia покупает корпорация Adobe. На базе Flash разрабатываются целые игры, которые работают прямо из браузера — невиданный для середины нулевых прогресс и удобство. Тем временем стремительно развиваются мобильные устройства. Аналоги Flash Player разрабатываются и для них, контент остается доступен почти для всех платформ. В 2005 году начинает работу сервис YouTube. Для доставки видеороликов он также использует Flash Player.

Были и негативные последствия — рекламодатели чрезмерно увлеклись созданием красочных баннеров на базе Macromedia / Adobe Flash. Так как это по-прежнему были программы, исполняемые на компьютере пользователя, они подчас заметно нагружали систему, серьезно замедляя работу всех остальных программ. В некоторых браузерах и плагинах для них появилась возможность отключать запуск объектов Flash по умолчанию. Но, как вскоре выяснилось, баннеры были самой меньшей из множества проблем, которые ожидали завязанный на Flash компьютерный мир.

Грандиозная дыра в безопасности

Реконструировать историю обнаружения уязвимостей в Adobe Flash Player достаточно сложно — программа появилась на заре современного веба. В начале нулевых еще не была распространена практика информирования пользователей и клиентов об уязвимостях. В архиве бюллетеней компании Adobe, включающем данные еще со времен Macromedia, первая запись об уязвимости в Flash Player относится к 2002 году. В базе уязвимостей на сайте MITRE есть записи о более 1100 уязвимостях, связанных с Adobe Flash Player.

Первые уязвимости с возможностью выполнения произвольного кода в этой базе относятся к 2002 году. Злоумышленник может прислать жертве файл в формате Adobe Flash, при воспроизведении которого будет выполнен вредоносный код. Некоторые уязвимости такого типа имеют максимальный рейтинг опасности по шкале CVSS в 10 баллов (а по непроверенным источникам, уязвимостей, связанных с выполнением произвольного кода во всех версиях Flash Player, было более 800). Такие уязвимости легко эксплуатировать — они зачастую не требуют особых действий от пользователя. Достаточно заманить жертву на веб-сайт, в который встроен вредоносный объект в формате Adobe Flash. В некоторых атаках взламывалась система распространения рекламы, в результате чего вредоносный контент внезапно появлялся на популярных веб-сайтах, которые посещали миллионы пользователей.

Мы не зря всю дорогу говорили о том, что Flash-объекты по сути представляют собой программы, которые доставляются пользователю и выполняются на его машине. Следствием широких возможностей технологии стало и обширное поле лазеек, через которые злоумышленники могли получить полный контроль над компьютером. Уже к 2005 году среди технологий, обеспечивающих работу веб-приложений, Flash была самой популярной.

Не проблема, подумаем мы в 2022 году, достаточно доставить всем пользователям обновление. Но автоматический механизм обновления Flash Player появился только к концу жизни технологии, в нулевых его просто не было. Нужно было зайти на веб-сайт Adobe, скачать новую версию и запустить установку вручную. Обычные пользователи могли даже не знать, что у них есть какой-то Flash Player и что его надо обновлять. Уязвимость 2006 года также отметилась (вместе с тремя другими) в бюллетене Microsoft, так как код Adobe мог распространяться вместе с операционной системой Windows XP. За доставку обновлений для него, соответственно, отвечала сама Microsoft, и ее процесс доставки и установки патчей также не был идеальным.

Насколько плохой была ситуация с доставкой обновлений, показывает отчет «Лаборатории Касперского» за 2012 год. В этом году Adobe Flash Player уже лидирует по количеству уязвимостей, обнаруженных на компьютерах пользователей. К тому времени начала действовать система уведомлений пользователей Flash Player о наличии обновлений, и можно было отследить, насколько быстро они устанавливаются. С каждой обнаруженной дырой доля уязвимых пользователей росла (достигнув максимума в 60% в 2012 году!), с каждым патчем она затем снижалась. Процесс распространения обновлений хотя бы для основной массы пользователей занимал от трех недель до двух месяцев — по современным меркам это очень долго. Хуже всего пришлось пользователям совсем старых версий, где даже напоминаний об обновлениях не было, — весь 2012 год их доля составляла около 10%.

Посмотрим еще один отчет «Лаборатории Касперского», на этот раз за 2015 год. Там перечислено 13 новых уязвимостей в Flash Player, про которые было известно, что они используются (вместе со старыми, но еще актуальными) в так называемых эксплойт-паках — универсальных сборниках вредоносного кода, которые по очереди атакуют различные уязвимости в софте на компьютере пользователя, пока не добьются результата. Большинство реальных атак на пользователей осуществлялись через браузер (62%), и, по данным специалистов «ЛК», чаще всего причиной такой атаки была уязвимость в Flash. Как главный источник угроз, Flash победил другой популярный плагин для браузера Java (он использовался, например, в ранних системах онлайн-банкинга).

Десятилетние похороны

К середине 2010-х Adobe Flash уже считался устаревшей технологией. Пожалуй, первым громким выступлением против Flash стало письмо основателя и руководителя Apple Стива Джобса Thoughts on Flash. После перманентного кризиса в девяностых, к 2010 году Apple была на коне: в 2007 году был выпущен первый Apple iPhone, в 2010-м — первый iPad, планшет, который оказался успешным, в отличие от изделий 1993 года. В iPhone поначалу не было многих функций, имевшихся в других смартфонах. В частности, не была реализована поддержка Flash, а значит, сайты, использующие эту технологию, были недоступны. В конце нулевых это был серьезный аргумент со стороны поклонников смартфонов Nokia на Symbian или ранних устройств на базе Android — там Flash поддерживался.

Стив Джобс обозначил безопасность как один из главных аргументов, из-за которых Flash на мобильных устройствах Apple не будет работать никогда. Кроме того, Apple не могла смириться с ситуацией, когда у нее нет никакого контроля над работой Flash на собственных устройствах. Всю свою жизнь Flash (за исключением отдельных его элементов) был проприетарным решением — в отличие от открытых стандартов, таких как HTML5 или JavaScript. Если бы Apple позволила реализовать поддержку Flash на своих устройствах, а Adobe реализовала бы ее, игры, видео и элементы веб-сайтов тормозили бы на смартфоне или приводили бы к сбоям. А обвиняли бы в этом производителя телефонов!

Были и другие аргументы: в отличие от настольных компьютеров, на смартфонах код требовалось выполнять максимально эффективно, чтобы батарейка не садилась за пару часов работы. Добиться этого с Flash, который на тот момент даже не поддерживал ускорение с использованием графической подсистемы, было решительно невозможно. Даже если представить, что Adobe сделает прекрасную версию Flash Player, во многом эффективность работы приложений Flash (давайте уж называть их так, это честнее) зависела от тысяч разработчиков. Apple, со своим стремлением контролировать все и вся, на такое пойти не могла.

У других игроков индустрии IT были похожие чувства: они не хотели зависеть от проприетарной технологии, которая принадлежит конкуренту. Нормальный способ взаимодействия участников рынка — это совместная работа над открытым стандартом. Но нужно еще договориться, чтобы все игроки приняли этот стандарт! Это было нелегко — некоторые пытались повторить успех Flash и создавали собственные проприетарные форматы. В частности, в 2007 году компания Microsoft решила сделать свой «улучшенный флеш» под названием Silverlight, который, к счастью, не получил особой популярности.

В 2015 году журнал Wired публикует статью с говорящим названием «Флеш должен умереть». В ней описываются попытки разных игроков индустрии справиться с одной большой уязвимостью под названием Adobe Flash Player. Разработчики браузера Firefox в тот год вообще выключили плагин для воспроизведения Flash-контента по умолчанию. Chrome заявил, что будет отключать «неважный» Flash-контент на веб-сайтах (читай — баннеры с видео, серьезно нагружающие систему). Алекс Стамос, тогда работавший шефом соцсети Facebook по безопасности, предложил наконец назначить день окончания поддержки этой устаревшей технологии. Между тем сам Facebook на тот момент все еще использовал Flash для воспроизведения видеороликов. Открытый стандарт HTML5 действительно был готов к тому моменту заменить Flash в качестве универсального инструмента для создания интерактивных веб-сайтов с тяжелым контентом. Но просто так взять и избавиться от огромного наследия было невозможно. От Flash зависели рекламные сети, пользователи старых компьютеров со старыми браузерами, разработчики сайтов с огромной библиотекой контента.

Только в июле 2017 года компания Adobe объявила о прекращении активной работы над Flash, но назначила щедрые три года в качестве переходного периода. Почти сразу все популярные браузеры начали запускать Flash-контент только по просьбе пользователя. Наконец, 12 января 2021 года, через 25 лет после выпуска Macromedia Flash Player 1.0, через 13 лет после обнаружения первой сверхкритической уязвимости в этом ПО, поддержка Flash на стороне пользователей была прекращена. В современных браузерах после этой даты вы не сможете воспроизвести Flash-элементы даже при всем желании, даже если у вас установлен Flash Player — в его последней версии была запрограммирована блокировка работы.

Вот такое сообщение начал выводить проигрыватель Flash пользователям в конце 2020 года.

Вот такое сообщение начал выводить проигрыватель Flash пользователям в конце 2020 года. Источник

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

Также Flash исследуется специалистами по сохранению истории веба: с отключением технологии значительная часть творчества десятков тысяч людей стала недоступна.

Почти никто не виноват

Вполне можно понять, почему Adobe так долго медлила с объявлением о завершении жизненного цикла Adobe Flash. Поддержка технологии на подавляющем большинстве пользовательских ПК означала значительные объемы продаж инструментов для разработки контента. Уже начиная с 2013 года эту часть технологий компания смогла адаптировать для современного мира: с помощью до сих пор существующего ПО Adobe AIR можно разрабатывать приложения для Windows, Mac OS, Android и iOS. Это, по сути, прямой преемник Adobe Flash, поддерживающий и проприетарные технологии компании, и открытые, такие как HTML5.

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

Нельзя сказать, что Adobe не пыталась. После обнаружения первой «десятибалльной» уязвимости в 2008 году каждый год вплоть до 2011-го Adobe чинила десятки критических уязвимостей в Flash Player. Но, кажется, адаптировать Flash к изменившимся представлениям о безопасности в Интернете было в принципе невозможно. Современный браузер для отображения почти любого контента в Интернете не требует вообще никаких плагинов. Это значит, что ответственность за безопасность пользователя при просмотре веба несет только разработчик браузера, и никто другой.

Все, что загружается из Сети, теперь по определению считается небезопасным: создатели браузеров прилагают огромные усилия, чтобы изолировать веб-сайты и друг от друга, и от других программ на компьютере, смартфоне или планшете. У них явно получается лучше, но, увы, злоумышленники тоже совершенствуют свои инструменты. Только в 2022 году в браузере Google Chrome обнаружили шесть уязвимостей нулевого дня, которые на тот момент уже использовались в атаках. Это, конечно, не 15 уязвимостей за 2015 год в Adobe Flash Player, эксплуатируемых злоумышленниками, но разница небольшая.

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

Советы