
Open-Source-Instrumentierungsframework für Android-Apps und Java-Middleware, das den Code während der geräteinternen Kompilierung über den ART-Compiler modifiziert. Es bewahrt App-Signaturen und ermöglicht modulbasierte Sicherheitsanalysen.
ARTist ist ein flexibles Open-Source-Instrumentierungs-Framework für Android-Apps und die Java-Middleware. Es basiert auf dem Compiler der Android-Laufzeit (ART) und ändert Code während der On-Device-Kompilierung. Im Gegensatz zu bestehenden Instrumentierungs-Frameworks bewahrt es die ursprüngliche Signatur der Anwendung und arbeitet auf Befehlsebene.
Dieses Repository stellt den Kern des ARTist-Ökosystems dar, die eigentliche Implementierung des Instrumentierungs-Frameworks. Es ist in das AOSP-Projekt Android Runtime (ART) integriert, um eine spezialisierte Version des On-Device-Compilers dex2oat zu erstellen, und bietet Entwicklern eine Modul-API, die die vollständige Kontrolle über den gesamten Java-Quellcode des Ziels in der Zwischendarstellung des Compilers ermöglicht. ARTist ermöglicht es Endbenutzern, bereits verfügbare Module zu nutzen, Entwicklern, eigene Instrumentierungen für Apps und das Android-System zu erstellen, und Forschern, das Verhalten von Apps und Systemen zu analysieren und zu erweitern.
ARTist kann auf zwei verschiedene Arten eingesetzt werden: Erstens als normale Anwendung mit unserem ArtistGui-Projekt, das eine nicht-invasive App-Instrumentierung auf gerooteten Geräten ermöglicht, oder zweitens als System-Compiler für benutzerdefinierte ROMs, bei dem es zusätzlich den Systemserver (Package Manager Service, Activity Manager Service, ...) und die Android-Framework-Klassen (boot.oat) instrumentieren kann. Es unterstützt Android-Versionen ab (und einschließlich) Marshmallow 6.0.
Ausführliche Tutorials und tiefergehende Informationen zum ARTist-Ökosystem finden Sie in unserer offiziellen Dokumentation und in unserem Gitter-Chat.
Möglicherweise finden Sie im Code Guards, die auf bestimmte Android-Versionen prüfen, da sich einige der intern verwendeten APIs im Laufe der Versionen geändert haben. Das ART-Projekt ändert sich stetig, daher versuchen wir, den gesamten versionsabhängigen Code entweder in unserem ART-Fork zu kapseln oder hinter bequemeren, versionsunabhängigen APIs zu verstecken. Das übergeordnete Ziel ist es, die Versionsabhängigkeit von Modulentwicklern fernzuhalten, sodass die resultierenden Module mit allen von ARTist unterstützten Android-Versionen kompatibel sind.
In der aktuellen Vor-Beta-Version werden Module im Ordner modules erstellt und mit ARTist kompiliert. Unser kommender Beta-Release (siehe unten) wird jedoch ein dediziertes SDK enthalten, das die Entwicklung von Modulen unabhängig vom ARTist-Quellcode ermöglicht, sodass kein AOSP mehr benötigt wird und Sie Module nicht fest codieren müssen, sondern dynamisch auswählen können, welche für ein bestimmtes Ziel verwendet werden sollen.
Wenn Sie nur eigene Instrumentierungen erstellen möchten, müssen Sie sich nicht mit dem Erstellen von ARTist befassen. Halten Sie sich einfach an die obige Erklärung. Wenn Sie jedoch am Instrumentierungs-Framework selbst arbeiten möchten, hilft Ihnen Folgendes beim Einstieg:
ARTist ist eine Erweiterung des ART-Compilers dex2oat und daher als Submodul in unserem angepassten ART-Fork eingebettet. Um ARTist zu erstellen, müssen Sie den ART-Fork als Teil von AOSP erstellen. Das, was wir als ARTist-Version von dex2oat bezeichnen, ist tatsächlich das dex2oat-Binary plus mehrere Bibliotheken (z. B. libart-compiler), die zusammen unseren instrumentierenden Compiler bilden. Das ArtistGui-Projekt enthält vorgefertigte Skripte, um ART und ARTist zu erstellen und die resultierenden Binärdateien und Bibliotheken in die richtigen Ordner von ArtistGui zu kopieren, um sie zu Testzwecken auf ein Gerät zu bringen.
Wir werden bald in die Beta-Phase eintreten, die viele Änderungen für das gesamte ARTist-Ökosystem mit sich bringen wird, darunter ein dediziertes ARTist SDK für die vereinfachte Modulentwicklung, ein an semantischer Versionierung orientiertes Release- und Versionierungsschema, eine verbesserte und aktualisierte Version unserer Online-Dokumentation, großartige neue Module und viele weitere Verbesserungen. Allerdings könnten insbesondere während der Übergangsphase einige Informationen, wie die in den README.md-Dateien der Repositories und die Dokumentation unter https://artist.cispa.saarland, leicht veraltet sein. Wir entschuldigen uns für die Unannehmlichkeiten und nehmen gerne Feedback über Gitter entgegen. Um über den aktuellen Fortschritt auf dem Laufenden zu bleiben, behalten Sie die Beta-Meilensteine der Project: ARTist-Repositories im Auge und achten Sie auf neue Blogbeiträge unter https://artist.cispa.saarland .
Wir hoffen, eine aktive Community aus Entwicklern, Forschern und Anwendern rund um Project ARTist aufzubauen und freuen uns daher über Beiträge und Feedback jeder Art. Es gibt viele Möglichkeiten, sich zu beteiligen und dem Projekt zu helfen, wie z. B. das Testen und Schreiben von Modulen, Feedback zu geben, welche Funktionalität entscheidend ist oder fehlt, Fehler und andere Probleme zu melden oder allgemein über Ihre Erfahrungen zu berichten. Das Team überwacht aktiv Gitter und natürlich die Repositories, und wir freuen uns, mit Ihnen in Kontakt zu treten und zu diskutieren. Wir haben noch keine vollständige Anleitung für Beiträge, aber diese wird bald folgen (siehe Beta-Ankündigung oben).
ARTist basiert auf einem Paper mit dem Titel ARTist - The Android Runtime Instrumentation and Security Toolkit, veröffentlicht auf dem 2nd IEEE European Symposium on Security and Privacy (EuroS&P'17). Das vollständige Paper ist hier verfügbar. Wenn Sie ARTist in Ihrer Forschung zitieren, verwenden Sie bitte den folgenden Bibliographieeintrag:
@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}
}
Es gibt ein Folge-Paper, in dem wir ARTist verwendet haben, um Werbebibliotheken aus Drittanbieter-Anwendungen herauszuschneiden, die Bibliothek in eine dedizierte App (eigenes Sicherheitsprinzip) zu verschieben und beide über ein benutzerdefiniertes Binder-IPC-Protokoll wieder zu verbinden, während die visuelle Wiedergabetreue durch die Anzeige der entfernten Werbung als schwebende Ansichten über der nun werbefreien Anwendung erhalten blieb. Das vollständige Paper The ART of App Compartmentalization: Compiler-based Library Privilege Separation on Stock Android, wie es auf der 2017 ACM SIGSAC Conference on Computer and Communications Security (CCS'17) veröffentlicht wurde, ist hier verfügbar.