Libscout est un outil d'analyse statique de poids léger et efficace pour détecter les bibliothèques tierces dans les applications Android / Java. La détection est résiliente contre les techniques d'obscuscations de code de code communes communes telles que le renommage d'identifiant ou les obscurcissements basés sur le code tels que la cachette d'API basée sur la réflexion ou la randomisation de flux de contrôle. En outre, LibsCout est capable d'identifier les versions exactes de la bibliothèque, y compris des versions qui contiennent des bogues graves ou des problèmes de sécurité.
Libscout nécessite que les SDK de bibliothèque d'origine (fichiers .jar / .aar compilés) pour extraire des profils de bibliothèque qui peuvent être utilisés pour la détection sur les applications Android. Les profils de bibliothèque pré-générés sont hébergés sur le référentiel LibsCout-Profiles.
Caractéristiques de détection uniques:
Au fil du temps, Libscout a été étendu pour effectuer des analyses supplémentaires à la fois sur les SDK de la bibliothèque et les bibliothèques détectées dans les applications:
De plus, il existe une extension Android Studio UP2DEP qui intègre les informations de compatibilité API dans l'IDE pour aider les développeurs à garder leurs dépendances à jour (et plus).
Le répertoire des scripts contient un script Python de bibliothèque-scraper pour télécharger automatiquement les sdks de bibliothèque originaux, y compris des histoires de version complète de Maven Central , JCenter et des référentiels MVN personnalisés . Les SDK de bibliothèque d'origine peuvent être utilisés pour générer des profils et pour effectuer des analyses de compatibilité API de la bibliothèque (voir les modules ci-dessous). Utilisez le script de bibliothèque-profil-bénéfice pour générer des profils de manière pratique à grande échelle.
Les grabyers doivent être configurés avec une configuration JSON qui inclut les métadonnées des bibliothèques à récupérer (nom, repo, groupId, artefactid). Le répertoire Scripts / Library-Secs contient des fichiers de configuration pour récupérer plus de 100 bibliothèques de Maven Central et une configuration pour télécharger les bibliothèques Amazon et les bibliothèques Android du référentiel Maven de Google (350 bibliothèques, y compris Support, GMS, KTX, Jetpack, ..).
Nouveau (30/03/19): Ajout de la liste de 45 bibliothèques de suivi AD / Suivi avec des versions actuellement 1182 (trackers.json).
Les profils de bibliothèque prête à l'emploi et les méta-données de la bibliothèque se trouvent dans le référentiel libscot-profils.
Libscout a une fonctionnalité intégrée pour signaler les versions de la bibliothèque avec les vulnérabilités de sécurité suivantes.
Les profils pré-générés pour les versions vulnérables sont tagués avec [la sécurité] , les correctifs avec [Security-Fix] .
Ces informations sont codées dans les fichiers Library.xml qui ont été utilisés pour générer les profils. Nous essayons de mettre à jour la liste / les profils chaque fois que nous rencontrons de nouveaux problèmes de sécurité. Si vous pouvez partager des informations, veuillez nous le faire savoir.
| Bibliothèque | Version (s) | Correction de la version | Vulnérabilité | Lien |
|---|---|---|---|---|
| Push | <8.1 | > 8.1 | Paramètres par défaut non animés par défaut | Lien |
| Apache cc | 3.2.1 / 4.0 | 3.2.2 / 4.1 | Vulnérabilité de désérialisation | Lien |
| Dropbox | 1.5.4 - 1.6.1 | 1.6.2 | Vulnérabilité Droppedin | Lien |
| 3.15 | 3.16 | Vulnérabilité de détournement de compte | Lien | |
| Volet | <4.4.0 | 4.4.0 | Paramètres par défaut non animés par défaut | Lien |
| Okhttp | 2.1 - 2.7.4 3.0.0- 3.1.2 | 2.7.5 3.2.0 | Certificat Pinage de contournement | Lien |
| Plexus archiver | <3,6.0 | 3.6.0 | Vulnérabilité à glissement zip | Lien |
| Supersonique | <6.3.5 | 6.3.5 | Exposition aux fonctionnalités dangereuses via JS | Lien |
| Vanner | <3.3.0 | 3.3.0 | Vulnérabilité d'attaque MITM | Lien |
| Zeroturnaround | <1,13 | 1.13 | Vulnérabilité à glissement zip | Lien |
Lors de notre dernière analyse d'applications gratuites sur Google Play (25/05/2017), LibsCout a détecté> 20k applications contenant toujours l'une de ces versions Lib vulnérables. Les résultats ont été signalés au programme ASI de Google. Malheureusement, le rapport semblait être ignoré. En conséquence, nous avons informé manuellement de nombreux développeurs d'applications.
Entre autres, McAfee a publié un avis de sécurité pour l'une de leurs applications.
|_ 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.
Ce module génère des empreintes digitales de bibliothèque unique à partir de SDK LIB originaux (fichiers .jar et .aar pris en charge). Ces profils peuvent par la suite être utilisés pour tester si les versions de bibliothèque respectives sont incluses dans les applications. Chaque fichier de bibliothèque nécessite en outre une bibliothèque.xml qui contient des méta-données (par exemple, nom, version, ..). Un modèle se trouve dans le répertoire des actifs. Pour votre commodité, vous pouvez utiliser le grattoir de la bibliothèque (./scripts) pour télécharger des histoires complètes de la bibliothèque à partir de référentiels Maven. Par défaut, LibsCout génère des profils basés sur HashTree avec des informations de package et de classe (omet des méthodes).
java -jar libscout.jar -o profil [-a android_sdk_jar ] -x path_to_library_xml path_to_library_file
Détecte les bibliothèques dans les applications à l'aide de profils pré-générés. Facultativement, LibsCout effectue également une analyse d'utilisation de l'API pour les bibliothèques détectées, c'est-à-dire quelles API de bibliothèque sont utilisées par l'application ou par d'autres bibliothèques (Switch -U).
Les résultats de l'analyse peuvent être écrits dans différents formats.
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)
Analyse les modifications dans les ensembles d'API documentés (publics) des versions de bibliothèque.
Les résultats de l'analyse incluent actuellement les informations suivantes:
La conformité au versioning sémantique (SEMVER), c'est-à-dire si le changement dans la chaîne de version entre les versions consécutives (Semver attendu) correspond aux modifications des ensembles API publics respectifs (SEMVER réel). Les résultats incluent en outre des statistiques sur les modifications des ensembles d'API (ajouts / suppressions / modifications). Pour les API supprimées, LibsCout essaie également de déduire des API alternatives (basées sur différentes fonctionnalités).
Pour l'analyse, vous devez fournir un chemin vers les SDK de la bibliothèque d'origine. Libscout recherche récursivement les pots de bibliothèque | AARS (les répertoires de feuilles devraient avoir au plus un fichier jar | aar et un fichier biblirary.xml). Pour votre commodité, utilisez le grattoir de la bibliothèque. Les résultats de l'analyse sont écrits sur le disque au format JSON (Switch -J).
java -jar libscout.jar -o lib_api_analysis [-a android_sdk_jar ] [-j json_dir ] path_to_lib_sdks
Ce mode est une extension du mode de correspondance. Il détecte d'abord les versions de bibliothèque dans les applications fournies et effectue une analyse d'utilisation de la bibliothèque (-U est implicite). De plus, il nécessite des données de compat API de bibliothèque (via le commutateur -l) comme généré dans le mode lib_api_analysis . Sur la base de l'utilisation de l'API LIB dans l'application et des informations de compat, LibsCout détermine la version la plus élevée qui est toujours compatible avec l'ensemble des API LIB usagées.
Remarque: La nouvelle implémentation n'a toujours pas certaines fonctionnalités, par exemple, les résultats sont actuellement enregistrés mais pas encore écrits sur JSON. Voir les commentaires du code pour plus d'informations.
java -jar libscout.jar -o updatability [-a android_sdk_jar ] [-j json_dir ] -l lib_api_data_dir path_to_app (s)
Pour les détails techniques et les résultats d'évaluation à grande échelle, veuillez vous référer à nos publications:
Détection de bibliothèque tierce fiable dans Android et ses applications de sécurité (CCS'16)
Tenez-moi au courant: une étude empirique de la mise à jour de la bibliothèque tierce sur Android (CCS'17)
Si vous utilisez Libscout dans une publication scientifique, nous apprécierions des citations en utilisant ces entrées Bibtex: [BIB-CCS16] [BIB-CCS17]