O LibsCout é uma ferramenta de análise estática leve e eficaz para detectar bibliotecas de terceiros nos aplicativos Android/Java. A detecção é resiliente contra técnicas de ofuscação de bytecode comuns, como renomeação de identificador ou ofuscações baseadas em código, como ocultação de API baseada em reflexão ou randomização do fluxo de controle. Além disso, o LobsCout é capaz de identificar versões exatas da biblioteca, incluindo versões que contêm bugs graves ou problemas de segurança.
O LibsCout requer os SDKs da biblioteca original (arquivos compilados .jar/.aar) para extrair perfis de biblioteca que podem ser usados para detecção em aplicativos Android. Os perfis de biblioteca pré-gerados estão hospedados nos perfis do repositório LibScout.
Recursos de detecção exclusivos:
Com o tempo, o LibsCout foi estendido para realizar análises adicionais no SDKs da biblioteca e nas bibliotecas detectadas em aplicativos:
Além disso, existe uma extensão do Android Studio UP2DEP que integra as informações de compatibilidade da API no IDE para ajudar os desenvolvedores a manter suas dependências atualizadas (e muito mais).
O diretório scripts contém um script python-raspador de bibliotecas para baixar automaticamente os SDKs da biblioteca original, incluindo histórias de versão completas dos repositórios Maven Central , JCenter e MVN personalizados. Os SDKs originais da biblioteca podem ser usados para gerar perfis e realizar análises de compatibilidade da API da biblioteca (consulte os módulos abaixo). Use o script da biblioteca-perfil-gerador para gerar convenientemente perfis em escala.
Os raspadores precisam ser configurados com uma configuração JSON que inclua metadados das bibliotecas a serem buscadas (nome, repo, groupid, artefato). O diretório Scripts/Library-Specs contém arquivos de configuração para recuperar mais de 100 bibliotecas da Maven Central e uma configuração para baixar bibliotecas da Amazon e bibliotecas Android do repositório Maven do Google (350 bibliotecas, incluindo suporte, GMS, KTX, Jetpack, ..).
Novo (30/07/19): Lista adicionada de 45 bibliotecas de anúncios/rastreamento com 1182 versões (rastreador.json) atualmente.
Os perfis de biblioteca prontos para uso e metadados da biblioteca podem ser encontrados nos perfis do repositório LibScout.
O LibsCout possui funcionalidade incorporada para relatar versões da biblioteca com as seguintes vulnerabilidades de segurança.
Os perfis pré-gerados para versões vulneráveis são marcadas com [segurança] , patches com [Security-Fix] .
Essas informações são codificadas nos arquivos bibliotecas.xml que foram usados para gerar os perfis. Tentamos atualizar a lista/perfis sempre que encontramos novos problemas de segurança. Se você pode compartilhar informações, informe -nos.
| Biblioteca | Versão (s) | Versão Fix | Vulnerabilidade | Link |
|---|---|---|---|---|
| Airpush | <8.1 | > 8.1 | Configurações de WebView padrão não senitadas | Link |
| Apache cc | 3.2.1 / 4.0 | 3.2.2 / 4.1 | Vulnerabilidade de deserialização | Link |
| Dropbox | 1.5.4 - 1.6.1 | 1.6.2 | Droppedin Vulnerabilidade | Link |
| 3.15 | 3.16 | Vulnerabilidade de seqüestro de contas | Link | |
| MOPUB | <4.4.0 | 4.4.0 | Configurações de WebView padrão não senitadas | Link |
| OKHTTP | 2.1 - 2.7.4 3.0.0- 3.1.2 | 2.7.5 3.2.0 | Bypass de fixação de certificado | Link |
| Arquiver do Plexus | <3.6.0 | 3.6.0 | Vulnerabilidade de deslizamento ZIP | Link |
| Supersônico | <6.3.5 | 6.3.5 | Exposição de funcionalidade insegura via JS | Link |
| Vungle | <3.3.0 | 3.3.0 | Vulnerabilidade do ataque do MITM | Link |
| Zerotrurnaround | <1,13 | 1.13 | Vulnerabilidade de deslizamento ZIP | Link |
Em nossa última varredura de aplicativos gratuitos no Google Play (25/05/2017), os aplicativos LibsCout detectados> 20k ainda contendo uma dessas versões vulneráveis da lib. As descobertas foram relatadas ao programa ASI do Google. Infelizmente, o relatório parecia ser ignorado. Em conseqüência, notificamos manualmente muitos desenvolvedores de aplicativos.
Entre outros, a McAfee publicou um aviso de segurança para um de seus aplicativos.
|_ 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 gera impressões digitais de biblioteca exclusivas dos SDKs Lib original (arquivos .Jar e .AAR suportados). Esses perfis podem posteriormente ser usados para testar se as respectivas versões da biblioteca estão incluídas nos aplicativos. Cada arquivo da biblioteca requer adicionalmente uma biblioteca.xml que contém meta dados (por exemplo, nome, versão, ..). Um modelo pode ser encontrado no diretório de ativos. Para sua conveniência, você pode usar o raspador da biblioteca (./scripts) para baixar histórias de bibliotecas completas dos repositórios Maven. Por padrão, o LibScout gera perfis baseados em hashtree com informações de embalagem e classe (métodos de omitindo).
java -jar libscout.jar -o perfil [-a android_sdk_jar ] -x path_to_library_xml path_to_library_file
Detecta bibliotecas em aplicativos usando perfis pré-gerados. Opcionalmente, o LibsCout também realiza uma análise de uso da API para bibliotecas detectadas, ou seja, quais APIs da biblioteca são usadas pelo aplicativo ou por outras bibliotecas (-u Switch).
Os resultados da análise podem ser escritos em 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)
Analisa as alterações nos conjuntos de API (públicos) documentados das versões da biblioteca.
Os resultados da análise atualmente incluem as seguintes informações:
A conformidade com a versão semântica (semver), ou seja, se a alteração na string de versão entre versões consecutivas (semver esperada) corresponde às alterações nos respectivos conjuntos de API pública (semver real). Os resultados incluem ainda estatísticas sobre alterações nos conjuntos de API (adições/remoções/modifcations). Para APIs removidas, o LibScout tenta também inferir APIs alternativas (com base em diferentes recursos).
Para a análise, você deve fornecer um caminho para os SDKs da biblioteca original. O LibsCout procura recursivamente por frascos de biblioteca | AARS (os diretórios da folha devem ter no máximo um arquivo de jar | AAR e um arquivo Library.xml). Para sua conveniência, use o raspador da biblioteca. Os resultados da análise são gravados no disco no formato JSON (-j switch).
java -jar libscout.jar -o lib_api_analysis [-a android_sdk_jar ] [-j json_dir ] path_to_lib_sdks
Este modo é uma extensão para o modo de correspondência. Primeiro, detecta versões da biblioteca nos aplicativos fornecidos e conduz uma análise de uso da biblioteca (-u está implícito). Além disso, requer dados de compacto da API da biblioteca (através do comutador -l), conforme gerado no modo LIB_API_ANALYSE . Com base no uso da API da LIB no aplicativo e nas informações do Compat, o LibScout determina a versão mais alta que ainda é compatível com o conjunto de APIs LIB usadas.
Nota: A nova implementação ainda não possui alguns recursos, por exemplo, os resultados estão atualmente registrados, mas ainda não são gravados no JSON. Veja os comentários do código para obter mais informações.
java -jar libscout.jar -o atualização [-a android_sdk_jar ] [-j json_dir ] -l lib_api_data_dir path_to_app (s)
Para detalhes técnicos e resultados de avaliação em larga escala, consulte nossas publicações:
Detecção de biblioteca de terceiros confiável no Android e seus aplicativos de segurança (CCS'16)
Mantenha-me atualizado: um estudo empírico da atualização da biblioteca de terceiros no Android (CCS'17)
Se você usar o LibsCout em uma publicação científica, gostaríamos de citações usando essas entradas Bibtex: [BIB-CCS16] [BIB-CCS17]