
Фреймворк инструментирования с открытым исходным кодом для Android-приложений и Java-промежуточного ПО, изменяющий код во время компиляции на устройстве с помощью компилятора ART. Сохраняет подписи приложений и позволяет проводить модульный анализ безопасности.
ARTist — это гибкий фреймворк с открытым исходным кодом для инструментирования приложений Android и Java-промежуточного ПО. Он основан на компиляторе Android Runtime (ART) и изменяет код во время компиляции на устройстве. В отличие от существующих фреймворков инструментирования, он сохраняет оригинальную подпись приложения и работает на уровне инструкций.
Этот репозиторий представляет собой ядро экосистемы ARTist, фактическую реализацию фреймворка инструментирования. Он интегрирован в проект AOSP Android Runtime (ART) для создания специализированной версии компилятора dex2oat на устройстве и предоставляет разработчикам Module API, дающий полный контроль над полным исходным кодом Java целевого приложения, представленным в промежуточном представлении компилятора. ARTist позволяет конечным пользователям использовать уже доступные модули, разработчикам — создавать собственные инструментирования для приложений и системы Android, а исследователям — анализировать и расширять поведение приложений и системы.
ARTist может быть развернут двумя способами: во-первых, как обычное приложение с использованием нашего проекта ArtistGui, который позволяет выполнять неинвазивное инструментирование приложений на рутированных устройствах; во-вторых, как системный компилятор для кастомных прошивок, где он может дополнительно инструментировать системный сервер (Package Manager Service, Activity Manager Service, ...) и классы фреймворка Android (boot.oat). Он поддерживает версии Android, начиная с Marshmallow 6.0 (включительно).
Подробные руководства и более глубокую информацию об экосистеме ARTist можно найти в нашей официальной документации. Присоединяйтесь к нашему чату Gitter.
В коде могут встречаться проверки на конкретные версии Android, поскольку некоторые используемые нами внутренние API могут меняться от версии к версии. Проект ART постоянно развивается, поэтому мы стараемся изолировать весь зависящий от версий код либо в нашем форке ART, либо скрывать его за более удобными, не зависящими от версий API. Общая цель — скрыть зависимость от версий от разработчиков модулей, чтобы полученные модули были совместимы со всеми выпусками Android, поддерживаемыми ARTist.
В текущей предбета-версии модули создаются в папке modules и компилируются с помощью ARTist. Однако наш предстоящий бета-релиз (см. ниже) будет включать специальный SDK, который позволит разрабатывать модули независимо от исходного кода ARTist, так что AOSP больше не потребуется, и вам не нужно жёстко прописывать модули — вы сможете динамически выбирать, какие модули использовать для конкретной цели.
Если вы просто хотите создавать собственные инструментирования, вам не нужно беспокоиться о сборке ARTist. Следуйте пояснениям выше. Однако если вы хотите работать над самим фреймворком инструментирования, следующая информация поможет вам начать:
ARTist является расширением компилятора ART dex2oat, поэтому он встроен как подмодуль в наш кастомизированный форк ART. Для сборки ARTist необходимо собрать форк ART как часть AOSP. Под версией ARTist dex2oat мы подразумеваем бинарный файл dex2oat плюс несколько библиотек (например, libart-compiler), которые вместе образуют наш инструментирующий компилятор. Проект ArtistGui содержит готовые скрипты для сборки ART и ARTist, а также копирования полученных бинарных файлов и библиотек в правильные папки ArtistGui для загрузки на устройство для тестирования.
Мы скоро входим в бета-фазу, которая принесёт множество изменений во всю экосистему ARTist, включая специальный ARTist SDK для упрощённой разработки модулей, схему релизов и версионирования, вдохновлённую семантическим версионированием, улучшенную и обновлённую онлайн-документацию, отличные новые модули и множество других улучшений. Однако, особенно в переходный период, некоторая информация, например в файлах README.md репозиториев и документации на https://artist.cispa.saarland, может быть слегка устаревшей. Приносим извинения за неудобства и с радостью принимаем отзывы на Gitter. Чтобы быть в курсе текущего прогресса, следите за бета-вехами репозиториев Project: ARTist и проверяйте новые сообщения в блоге на https://artist.cispa.saarland.
Мы надеемся создать активное сообщество разработчиков, исследователей и пользователей вокруг проекта ARTist и поэтому рады любым вкладам и отзывам. Есть много способов участвовать и помогать проекту: тестирование и написание модулей, предоставление отзывов о том, какие функции являются ключевыми или отсутствуют, сообщение об ошибках и других проблемах, или просто обсуждение вашего опыта. Команда активно следит за Gitter и, конечно, за репозиториями, и мы рады общаться и обсуждать. У нас пока нет полноценного руководства по внесению вклада, но оно появится в ближайшее время (см. объявление о бета-версии выше).
ARTist основан на статье под названием ARTist - The Android Runtime Instrumentation and Security Toolkit, опубликованной на 2-м Европейском симпозиуме IEEE по безопасности и конфиденциальности (EuroS&P'17). Полный текст статьи доступен здесь. Если вы цитируете ARTist в своих исследованиях, пожалуйста, используйте следующую запись в библиографии:
@inproceedings{artist,
title={ARTist: The Android runtime instrumentation and security toolkit},
author={Backes, Michael and Bugiel, Sven and Schranz, Oliver and von Styp-Rekowsky, Philipp and Weisgerber, Sebastian},
booktitle={2017 IEEE European Symposium on Security and Privacy (EuroS\&P)},
pages={481--495},
year={2017},
organization={IEEE}
}
Существует последующая статья, в которой мы использовали ARTist для удаления библиотек рекламы из сторонних приложений, перемещения библиотеки в отдельное приложение (собственный субъект безопасности) и повторного соединения обоих с помощью пользовательского протокола Binder IPC, сохраняя при этом визуальную точность путём отображения удалённой рекламы в виде плавающих видов поверх теперь очищенного от рекламы приложения. Полный текст статьи The ART of App Compartmentalization: Compiler-based Library Privilege Separation on Stock Android, опубликованной на конференции ACM SIGSAC по компьютерной и коммуникационной безопасности (CCS'17), доступен здесь.