
Framework de instrumentación de código abierto para aplicaciones Android y middleware Java, que modifica el código durante la compilación en el dispositivo mediante el compilador ART. Conserva las firmas de las aplicaciones y permite el análisis de seguridad basado en módulos.
ARTist es un marco de instrumentación flexible de código abierto para aplicaciones Android y middleware Java. Está basado en el compilador del Android Runtime (ART) y modifica el código durante la compilación en el dispositivo. A diferencia de los marcos de instrumentación existentes, preserva la firma original de la aplicación y opera a nivel de instrucciones.
Este repositorio representa el núcleo del ecosistema ARTist, la implementación real del marco de instrumentación. Está integrado en el proyecto Android Runtime (ART) de AOSP para crear una versión especializada del compilador dex2oat en el dispositivo y proporciona a los desarrolladores una API de Módulos que otorga control total sobre el código fuente Java completo del objetivo, proporcionado en la representación intermedia del compilador. ARTist permite a los usuarios finales utilizar Módulos ya disponibles, a los desarrolladores crear sus propias instrumentaciones para aplicaciones y el sistema Android, y a los investigadores analizar y extender el comportamiento de aplicaciones y sistemas.
ARTist se puede implementar de dos maneras diferentes: Primero, como una aplicación normal utilizando nuestro proyecto ArtistGui que permite la instrumentación no invasiva de aplicaciones en dispositivos rooteados, o segundo, como un compilador de sistema para ROMs personalizadas donde puede además instrumentar el servidor del sistema (Package Manager Service, Activity Manager Service, ...) y las clases del framework de Android (boot.oat). Soporta versiones de Android posteriores (e incluyendo) Marshmallow 6.0.
Para tutoriales detallados e información más profunda sobre el ecosistema ARTist, eche un vistazo a nuestra documentación oficial y únase a nuestro chat de Gitter.
Es posible que encuentre guardas en el código que verifican versiones particulares de Android, ya que algunas API que usamos internamente pueden haber cambiado entre versiones. El proyecto ART cambia constantemente, por lo que tratamos de compartmentalizar todo el código dependiente de la versión, ya sea en nuestro fork de ART o esconderlo detrás de API más convenientes e independientes de la versión. El objetivo general es ocultar la dependencia de versión a los desarrolladores de módulos para que los módulos resultantes sean compatibles con todas las versiones de Android soportadas por ARTist.
En la versión pre-beta actual, los módulos se crean en la carpeta modules y se compilan con ARTist. Sin embargo, nuestra próxima versión beta (ver más abajo) incluirá un SDK dedicado que permite desarrollar módulos independientemente del código fuente de ARTist, por lo que ya no se necesita AOSP y no es necesario codificar módulos de forma fija, sino que puede elegir dinámicamente cuáles usar para un objetivo en particular.
Si solo desea crear sus propias instrumentaciones, no necesita preocuparse por construir ARTist. Simplemente siga la explicación anterior. Sin embargo, si desea trabajar en el marco de instrumentación en sí, lo siguiente le ayudará a comenzar:
ARTist es una extensión del compilador ART dex2oat, por lo tanto, está incrustado como un submódulo en nuestro fork de ART personalizado. Para construir ARTist, necesita construir el fork de ART como parte de AOSP. A lo que nos referimos como la versión ARTist de dex2oat es en realidad el binario dex2oat más varias bibliotecas (por ejemplo, libart-compiler) que juntos forman nuestro compilador instrumentador. El proyecto ArtistGui tiene scripts listos para construir ART y ARTist, y copiar los binarios y bibliotecas resultantes en las carpetas correctas de ArtistGui para enviarlos a un dispositivo para pruebas.
Estamos a punto de entrar pronto en la fase beta, lo que traerá muchos cambios a todo el ecosistema ARTist, incluyendo un SDK dedicado de ARTist para el desarrollo simplificado de Módulos, un esquema de versionado y lanzamiento inspirado en versionado semántico, una versión mejorada y actualizada de nuestra documentación en línea, nuevos Módulos geniales, y muchas más mejoras. Sin embargo, especialmente durante la fase de transición, alguna información como la de los archivos README.md de los repositorios y la documentación en https://artist.cispa.saarland puede estar ligeramente desactualizada. Nos disculpamos por las molestias y aceptamos encantados comentarios en Gitter. Para mantenerse al día con el progreso actual, esté atento a los hitos beta de los repositorios de Project: ARTist y revise las nuevas publicaciones del blog en https://artist.cispa.saarland.
Esperamos crear una comunidad activa de desarrolladores, investigadores y usuarios en torno al Proyecto ARTist, por lo que agradecemos contribuciones y comentarios de cualquier tipo. Hay muchas formas de involucrarse y ayudar al proyecto, como probar y escribir Módulos, proporcionar comentarios sobre qué funcionalidad es clave o falta, reportar errores y otros problemas, o en general hablar sobre sus experiencias. El equipo monitorea activamente Gitter y por supuesto los repositorios, y estamos encantados de ponernos en contacto y discutir. Todavía no tenemos una guía de contribución completa, pero llegará pronto (ver el anuncio beta anterior).
ARTist se basa en un artículo llamado ARTist - The Android Runtime Instrumentation and Security Toolkit, publicado en el 2nd IEEE European Symposium on Security and Privacy (EuroS&P'17). El artículo completo está disponible aquí. Si está citando ARTist en su investigación, utilice la siguiente entrada bibliográfica:
@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}
}
Hay un artículo de seguimiento en el que utilizamos ARTist para eliminar las bibliotecas de publicidad de aplicaciones de terceros, mover la biblioteca a una aplicación dedicada (propio principal de seguridad) y reconectar ambas usando un protocolo Binder IPC personalizado, todo mientras se preserva la fidelidad visual mostrando los anuncios remotos como vistas flotantes sobre la aplicación ahora limpia de anuncios. El artículo completo The ART of App Compartmentalization: Compiler-based Library Privilege Separation on Stock Android, tal como fue publicado en la 2017 ACM SIGSAC Conference on Computer and Communications Security (CCS'17), está disponible aquí.