Libscout es una herramienta de análisis estático ligero y efectivo para detectar bibliotecas de terceros en aplicaciones Android/Java. La detección es resistente a las técnicas comunes de ofuscación de bytecode, como el cambio de nombre de identificadores o ofuscaciones basadas en el código, como la ocultación de API basada en reflexión o la aleatorización de flujo de control. Además, Libscout es capaz de identificar versiones exactas de la biblioteca, incluidas versiones que contienen errores o problemas de seguridad severos.
Libscout requiere que los SDK de la biblioteca originales (compilados .JAR/.AAR ARCHIVES) extraen perfiles de biblioteca que se pueden usar para detectar en las aplicaciones de Android. Los perfiles de biblioteca pregenerados están alojados en el repositorio libscout-perfiles.
Características de detección únicas:
Con el tiempo, libscout se ha extendido para realizar análisis adicionales tanto en los SDK de la biblioteca como en las bibliotecas detectadas en las aplicaciones:
Además, hay una extensión de Android Studio UP2DEP que integra la información de compatibilidad de API en el IDE para ayudar a los desarrolladores a mantener sus dependencias actualizadas (y más).
El directorio de scripts contiene un script de python de censura de biblioteca para descargar automáticamente los SDK de la biblioteca originales, incluidos los historiales de versión completos de los repositorios Maven Central , JCenter y MVN personalizados . Los SDK de la biblioteca originales se pueden usar para generar perfiles y realizar análisis de compatibilidad de API de la biblioteca (ver módulos a continuación). Use el script de generador de perfil de biblioteca para generar convenientemente perfiles a escala.
Los raspadores deben configurarse con una configuración JSON que incluya metadatos de las bibliotecas para obtener (nombre, repositorio, groupid, artefactid). El directorio de scripts/bibliotecas contiene archivos de configuración para recuperar más de 100 bibliotecas de Maven Central y una configuración para descargar bibliotecas de Amazon y bibliotecas de Android del repositorio Maven de Google (350 bibliotecas, incluyendo soporte, GMS, KTX, Jetpack, ..).
Nuevo (30/07/19): Lista agregada de 45 bibliotecas AD/Tracking con versiones actualmente 1182 (Trackers.json).
Los perfiles de la biblioteca listos para usar y los metadatos de la biblioteca se pueden encontrar en el repositorio libscout-perfiles.
Libscout ha creado una funcionalidad para informar versiones de la biblioteca con las siguientes vulnerabilidades de seguridad.
Los perfiles previamente generados para versiones vulnerables están etiquetados con [seguridad] , parches con [Security-fix] .
Esta información está codificada en los archivos bibliotecas.xml que se han utilizado para generar los perfiles. Intentamos actualizar la lista/perfiles cada vez que encontramos nuevos problemas de seguridad. Si puede compartir información, háganoslo saber.
| Biblioteca | Versión (s) | Versión de fijación | Vulnerabilidad | Enlace |
|---|---|---|---|---|
| Avión aéreo | <8.1 | > 8.1 | Configuración de webview predeterminada no unitizada | Enlace |
| Apache CC | 3.2.1 / 4.0 | 3.2.2 / 4.1 | Vulnerabilidad de deserialización | Enlace |
| Dropbox | 1.5.4 - 1.6.1 | 1.6.2 | Vulnerabilidad de caída | Enlace |
| 3.15 | 3.16 | Vulnerabilidad de secuestro de cuentas | Enlace | |
| Mopub | <4.4.0 | 4.4.0 | Configuración de webview predeterminada no unitizada | Enlace |
| Okhttp | 2.1 - 2.7.4 3.0.0- 3.1.2 | 2.7.5 3.2.0 | Bypass de fijación de certificado | Enlace |
| Archiver del Plexo | <3.6.0 | 3.6.0 | Vulnerabilidad de deslizamiento con cremallera | Enlace |
| Supersónico | <6.3.5 | 6.3.5 | Exposición de funcionalidad insegura a través de JS | Enlace |
| Vungle | <3.3.0 | 3.3.0 | Vulnerabilidad de ataque MITM | Enlace |
| Zeroturnaround | <1.13 | 1.13 | Vulnerabilidad de deslizamiento con cremallera | Enlace |
En nuestro último escaneo de aplicaciones gratuitas en Google Play (25/05/2017), Libscout detectó> 20k aplicaciones que aún contienen una de estas versiones de LIB vulnerables. Los hallazgos se han informado al programa ASI de Google. Desafortunadamente, el informe parecía ser ignorado. En consecuencia, notificamos manualmente a muchos desarrolladores de aplicaciones.
Entre otros, McAfee publicó un aviso de seguridad para una de sus aplicaciones.
|_ gradlew / gradlew.bat (gradle wrappers to generate runnable LibScout.jar)
|_ assets
| |_ library.xml (Library meta-data template)
|_ config
| |_ LibScout.toml (LibScout's config file)
| |_ logback.xml (log4j configuration file)
|_ data
| |_ app-version-codes.csv (Google Play app packages with valid version codes)
|_ lib
| Android axml
|_ scripts
| |_ library-specs (pre-defined library specs)
| |_ library-scraper.py (scraper for mvn-central, jcenter, custom mvn)
| |_ library-profile-generator.sh (convenience profile generator)
|_ src
source directory of LibScout (de/infsec/tpl). Includes some open-source,
third-party code to parse AXML resources / app manifests etc.
Este módulo genera huellas dactilares de biblioteca únicas de los SDK de Lib originales (los archivos .JAR y .AAR admitidos). Posteriormente, estos perfiles se pueden utilizar para probar si las versiones de la biblioteca respectivas están incluidas en las aplicaciones. Cada archivo de biblioteca también requiere una biblioteca.xml que contenga meta datos (por ejemplo, nombre, versión, ..). Se puede encontrar una plantilla en el directorio de activos. Para su conveniencia, puede usar el raspador de la biblioteca (./scripts) para descargar historias de biblioteca completas de repositorios de Maven. De forma predeterminada, Libscout genera perfiles basados en Hashtree con información de paquete y clase (métodos de omisión).
java -jar libscout.jar -o perfil [-a android_sdk_jar ] -x path_to_library_xml path_to_library_file
Detecta bibliotecas en aplicaciones que utilizan perfiles precenerados. Opcionalmente, Libscout también realiza un análisis de uso de API para bibliotecas detectadas, es decir, qué API de biblioteca son utilizadas por la aplicación o por otras bibliotecas (-U Switch).
Los resultados del análisis se pueden escribir en diferentes formatos.
java -jar libscout.jar -o match -p path_to_profiles [-a android_sdk_jar ] [-u] [-j json_dir ] [-m] [-d log_dir ] path_to_app (s)
Analiza los cambios en los conjuntos de API documentados (públicos) de versiones de la biblioteca.
Los resultados del análisis actualmente incluyen la siguiente información:
El cumplimiento del versiones semánticas (SEMVER), es decir, si el cambio en la cadena de la versión entre versiones consecutivas (Semver esperadas) coincide con los cambios en los conjuntos de API públicas respectivas (SEMVER real). Los resultados incluyen además estadísticas sobre los cambios en los conjuntos de API (adiciones/remociones/modificaciones). Para las API eliminadas, Libscout también intenta inferir API alternativas (basadas en diferentes características).
Para el análisis, debe proporcionar una ruta a los SDK de la biblioteca original. Libscout busca recursivamente los frascos de la biblioteca | AARS (se espera que los directorios de hoja tengan como máximo un archivo jar | aar y un archivo bibliotecas.xml). Para su conveniencia, use el raspador de la biblioteca. Los resultados del análisis se escriben en el disco en formato JSON (conmutador -j).
java -jar libscout.jar -o lib_api_analysis [-a android_sdk_jar ] [-j json_dir ] path_to_lib_sdks
Este modo es una extensión del modo de coincidencia. Primero detecta las versiones de la biblioteca en las aplicaciones proporcionadas y realiza un análisis de uso de la biblioteca (-u está implícito). Además, requiere datos de compat de la API de la biblioteca (a través del interruptor -l) como se genera en el modo Lib_API_ANALISEDIS . Basado en el uso de la API LIB en la aplicación y la información de compat, Libscout determina la versión más alta que todavía es compatible con el conjunto de API LIB utilizadas.
Nota: La nueva implementación todavía carece de algunas características, por ejemplo, los resultados están registrados actualmente pero aún no se escriben a JSON. Consulte los comentarios del código para obtener más información.
java -jar libscout.jar -o updactability [-a android_sdk_jar ] [-j json_dir ] -l lib_api_data_dir path_to_app (s)
Para obtener detalles técnicos y resultados de evaluación a gran escala, consulte nuestras publicaciones:
Detección confiable de la biblioteca de terceros en Android y sus aplicaciones de seguridad (CCS'16)
Mantenme actualizado: un estudio empírico de la actualización de la biblioteca de terceros en Android (CCS'17)
Si usa libscout en una publicación científica, apreciaríamos las citas que usan estas entradas de bibtex: [bib-ccs16] [bib-ccs17]