Android Runtime Resource Overlay: изменяем ресурсы приложений на лету
Доклад принят в программу конференции
Целевая аудитория
Тезисы
Android Runtime Resource Overlay -- крутая, но совсем не распиаренная тема. Технология позволяет приложению модифицировать собственные ресурсы и ресурсы других приложений прямо в рантайме, на лету. В основном RRO пользуются разработчики мобильных ОС для создания системных оверлеев для системных приложений. Однако и обычные приложения могут воспользоваться преимуществами оврлеев ресурсов, и для этого не требуются какие-либо специальные разрешения от пользователя.
Почему тема не очень популярна среди обычных приложений? Тут есть несколько мыслей, которые образуют ответ. Во-первых, self-targeting оверлеи, которые могут создать и применять обычные, не системные приложения появились относительно недавно, с Android API 34. Второй момент -- отсутствует документация, так что данное API можно вполне назвать незадокументированным. Разработчики привыкли полагаться на проверенные официальные источники и гайдлайны, а здесь буквально нужно читать код ОС, чтобы понять что к чему.
Я, как исследователь операционной системы Андроид, практически все время провожу за изучением кода ОС и проверке гипотез, которые могли бы повлиять на безопасность системы. И когда я обнаружила такой функционал, очень удивилась, что он вообще никак не задокументирован. Мне кажется, это может быть связано с тем, что тема достаточно новая, и есть еще ряд сырых моментов в ее имплементации. Уверена, Google со временем сможет опубликовать данный API и сделать его полноценным.
Что расскажу в своем докладе:
1. Android Runtime Resource Overlay: обсудим сперва в общих чертах, что это, как это работает и зачем оно нужно, где применяется.
2. Разберем виды оверлеев ресурсов. Бывают системные оверлеи и self-targeting оверлеи. Также бывают приложения-оверлеи, когда источником ресурсов выступает отдельный APK (статический оверлей), а также бывают fabricated overlays (фабрикованные оверлеи), которые создаются на лету, их можно создавать прям в рантайме (динамический оверлей ресурсов).
3. Обсудим, как вообще оверлеи накладываются на текущую таблицу ресурсов приложения -- что происходит под капотом. Что делает ОС, чтобы значения ресурсов бесшовно подменялись, какие компоненты системы за это отвечают.
4. Рассмотрим, какой функционал предлагает self-targeting overlay -- как раз тот самый кейс, когда обычное приложение может настроить, какие значения каких ресурсов будут заменены и на какие. Обсудим, какие преимущества и ограничения есть у такого подхода. Посмотрим, как такой подход может быть полезен при шифровании ресурсов приложения. Прям на примере разберем. Пример, кстати, возможно опубликую на гитхаб, поскольку в сети нет никакой внятной документации, объясняющей, как это сделать.
5. Поговорим про безопасность: когда приложение-оверлей может быть вредоносным. Какое влияние на безопасность оказывается в таком случае. На примерах посмотрим, что атакующее приложение с обявленным оверлеем может сделать с приложением-жертвой и как защититься от этого.
6. Бонус-chapter. Разберу технические детали найденных мною уязвимостей в Android Auto. Но пока жду решения Google по багам.
Исследователь безопасности операционной системы Android и мобильных приложений, реверс-инженер. Вхожу в топ-15 хакеров Android OС в рейтинге Google Bug Hunters за все время. Обнаружила несколько десятков уязвимостей безопасности в операционной системе Android, за что неоднократно получала благодарности от Google и Android Security Team.
Positive Technologies