Security Week 21: сотни уязвимостей Adobe Flash
7 июня компания Adobe закрыла критическую уязвимость в Flash Player (новость, сообщение компании). Уязвимость CVE-2018–5002 обнаружена сразу несколькими исследовательскими командами из Китая — речь идет об удаленном выполнении произвольного кода в результате ошибки переполнения буфера. Это уязвимость нулевого дня: на момент обнаружения она уже использовалась в целевых атаках на Ближнем Востоке. Эта достаточно серьезная проблема воспринимается как рутинная новость просто из-за названия пострадавшего продукта: ну кого уже может удивить RCE во флеше?
Только в нынешнем году это уже вторая критическая уязвимость нулевого дня, первую срочно закрывали в феврале. Adobe Flash вообще стал образцовым примером небезопасного софта, он стабильно находится в топе самых часто атакуемых приложений, причем не покидает этот рейтинг годами. Он по-прежнему распространен у пользователей, несмотря на многолетние попытки заменить его объективно более эффективными технологиями. Независимо от отношения к технологии, Flash стал неотъемлемой частью истории Интернета. При помощи пары ссылок и одного графика попробуем посмотреть на Flash с точки зрения безопасности и не только.
От славного прошлого к унылому настоящему
Ранняя история предка Adobe Flash, программы для рисования SmartSketch — это полезный кейс про то, как делать ставку на развитие перспективных технологий в условиях недостатка информации. Вот представьте себя году в 1992–1993-м. Веба еще как такового нет, Интернет — игрушка для ученых и закрытый клуб любителей общения в почте и ньюсах. При этом перспективные технологии все описаны: есть стандарты для мультимедийных ПК, для носимых устройств, есть первые концепты планшетов. Непонятно лишь, что из этого будет развиваться и приносить деньги, и главное — в какой последовательности все эти технологии будут выстреливать. Разработчики SmartSketch сначала сделали неправильную ставку на одну из первых ОС для носимых компьютеров с сенсорным экраном (PenPoint).
Система так и не дожила до коммерческого релиза, а SmartSketch пришлось быстро портировать на Mac OS и Windows, где программ для рисования и так было немало. И вот второе стратегическое решение — перепрофилировать проект под создание анимации, да еще и обеспечить возможность публикации в вебе — оказалось верным. В 1996-м продукт, переименованный в FutureSplash Animator, был выпущен. Примерно тогда же Microsoft осознала, что за Интернетом будущее, начала накачивать соответствующие проекты бюджетами на маркетинг и разработку и создавать то, что реально юзабельным станет только лет через 10–15 — всякое веб-телевидение и прочий интерактив. Интерактив — это в том числе анимация, и тут-то создателям софта карта и поперла.
В том же 1996 году проект был приобретен компанией Macromedia (и переименован в Flash). К началу нового тысячелетия бесплатно распространяемый клиентский плагин стал самым распространенным расширением для браузеров. В 2005-м компания Macromedia была продана Adobe, и уже тогда это был не только софт для создания сложных веб-объектов, но скорее платформа для разработки ПО, у которой Flash Player стал просто способом доставки. Где-то вдали уже тогда можно было разглядеть отблески светлого будущего, в котором производители компьютеров, разработчики операционных систем и даже браузеров играют роль операторов кабельного телевидения, отвечающих за прокладку проводов. Настоящие бабки при этом зарабатываются на контенте, который создается и доставляется через платформу Flash, а ее всецело контролирует Adobe. Здорово, правда?
Возможно, все так и было бы, если бы не развитие мобильных устройств, в которых был иной сценарий взаимодействия (перо и пальцы вместо мыши) и гораздо более слабое, чем у обычных ПК, железо. Flash присутствовал, скажем, в ОС Windows Mobile, но экспириенс был так себе. В 2007 году Apple выпустила первый iPhone, смартфон, в котором просмотр полноценного веба стал более-менее удобным. Отсутствие Flash часто преподносилось как один из серьезных недостатков устройства: без него в конце нулевых было невозможно стримить видео и аудио с множества ресурсов, использовать некоторые бизнес-приложения, и, конечно, нельзя было играть в какую-нибудь веселую ферму. В 2010-м, сразу после выпуска iPad, на котором тоже не было Flash, Стив Джобс пишет открытое письмо, где объясняет, почему Flash не появится на мобильных устройствах Apple никогда.
Перечислю основные доводы Джобса против Flash коротко. Закрытый стандарт (Джобс оговаривается, что у Apple тоже много проприетарного, но стандарты веба должны быть открыты). В качестве контрпримера приводится движок WebKit, разработанный Apple и использующийся повсеместно (в письме упоминаются смартфоны Nokia, и тогда это было еще актуально!).
Ресурсы и батарейка: приводится в пример неэффективная реализация кодека H.264 в Flash, не позволяющая полноценно задействовать аппаратные средства декодирования видео. Отсюда повышенная нагрузка на процессор и полчаса автономной работы. Заточенность на управление мышью и неспособность нормальной работы при управлении пальцами. Отсутствие мотивации у Adobe оптимизировать Flash-приложения для iPhone и iPad. Наконец, была упомянута и безопасность, и надежность («причина падения компьютеров Macintosh номер один»).
Ой, че тут началось. Директор Adobe, конечно, отреагировал: «маки», мол, падают, потому что ось кривая. Про потребление батарейки — это все вранье. И, конечно, «мы за мультиплатформенность». Кажется, мечту о том, что программа пишется один раз и потом работает на чем угодно — хоть на ПК, хоть на кофеварке, реализовать так и не удалось. Проблемы эффективного кодинга как-то решаются, просто уже без Adobe и платформы Flash.
Она относительно долго была довольно простым и удобным инструментом, с работающим механизмом доставки до огромной аудитории. А потом перестала таким инструментом быть: 25 июля 2017 года Adobe объявляет о сворачивании разработки и поддержки Flash. В качестве причины приводится универсальное применение тех самых открытых стандартов веба. С тех пор началась история Flash как зомби-платформы АКА мины замедленного действия на компьютерах миллионов пользователей.
Насколько все плохо?
Вопрос следует разделить на две части: насколько все плохо лично у вас и насколько все плохо у Adobe Flash в принципе с точки зрения безопасности? На первый вопрос легко ответить самостоятельно: зайдите на страницу сайта Adobe с виджетом проверки версии Flash Player. В моем случае браузер Chrome сначала попросил разрешения на запуск Flash, а потом показал, что версия у меня самая последняя, с запатченным зиродеем от 7 июня. Вроде все нормально: производитель браузера (Chrome) автоматически поддерживает актуальность плагина Flash. С другой стороны, вполне можно выключить данную функциональность совсем: у обычного пользователя предложение запустить Flash при загрузке страницы не вызовет особых вопросов. А ситуаций, когда даже самая последняя версия плагина критически уязвима — множество.
Насколько все плохо у Flash Player в целом? Общее представление дает база уязвимостей CVE. Там для Flash Player на момент публикации была информация о 1047 уязвимостях, начиная с 2005 года. Наибольшее количество уязвимостей было добавлено в базу в 2015 и 2016 годах, как раз когда Adobe объявила о радикальном повышении безопасности платформы. У программы Adobe Reader, которая также довольно часто используется для кибератак, в той же базе CVE записано 368 уязвимостей — почти в три раза меньше. 86% уязвимостей Flash Player в базе CVE отнесены к 9–10 уровню безопасности, то есть это критические уязвимости. 79% напрямую отмечены как приводящие к выполнению произвольного кода.
Цена небезопасного софта
Не могу сказать, что я согласен с письмом Стива Джобса о Flash. Не стоит забывать, что оно было написано в 2010 году, когда посмотреть видео на Ютюбе в HTML5 без танцев с бубном было затруднительно (Flash там вообще был выключен только в 2015-м). Проигрыш Flash — это бизнес-история про технологию, которая начала терять позиции задолго до того, как стала чуть ли не самым часто атакуемым софтом.
И вот представьте себя на месте Adobe: за 13 лет технология принесла компании немало денег. По ряду причин технологии пора на покой, но еще года три она будет приносить доход — из-за желания индустрии обеспечить совместимость. Разработка прекращена, инвестиций ноль, доход есть, красота! Но нет, какие-то (давно принятые) технические решения либо просто недосмотр по части безопасности вынуждают тратить немалые средства и ресурсы на поддержание в минимально пристойном виде продукта, который этого уже не заслуживает. Но приходится: иначе ущерб репутации, а то и юридические издержки.
Было бы интересно почитать чьи-нибудь воспоминания с анализом: как так вышло-то? Желательно еще с советами, как такого избежать в будущем. Пока лишь можно сделать вывод, что инвестировать в безопасность надо чуть ли не до начала разработки продукта. Можно, конечно, подумать о том, что разгребать заложенные изначально косяки будут уже какие-то другие люди, после того как будут получены прибыль и бонусы. Но это несерьезный подход. Насколько ответственно подходят к разработке системообразующего софта в наше время? Узнаем лет через 10–15?
Disclaimer: Мнения, изложенные в этом дайджесте, могут не всегда совпадать с официальной позицией «Лаборатории Касперского». Дорогая редакция вообще рекомендует относиться к любым мнениям со здоровым скептицизмом.