LIBSCOUT是一种轻巧有效的静态分析工具,可检测Android/Java应用中的第三方库。该检测是针对常见的字体模糊混淆技术的弹性,例如名义命名者重命名或基于代码的混淆,例如基于反射的API隐藏或控制流动的随机化。此外,LIBSCOUT能够查明精确的库版本,包括包含严重错误或安全问题的版本。
libscout需要原始库SDK(编译.jar/.aar文件)来提取可用于在Android应用程序上检测的库配置文件。预先生成的库配置文件托管在存储库LIBSCOUT-PROFILE。
独特的检测功能:
随着时间的流逝,LIBSCOUT已被扩展,以在库SDK和应用中检测到的库进行其他分析:
此外,还有一个Android Studio Extension UP2DEP,将API兼容性信息集成到IDE中,以帮助开发人员保持其依赖关系的最新(以及更多)。
脚本目录包含一个图书馆craper python脚本,以自动下载原始库SDK,包括来自Maven Central , Jcenter和自定义MVN存储库的完整版本历史记录。原始库SDK可用于生成配置文件并进行库API兼容性分析(请参见下面的模块)。使用图书馆 - 备件生成器脚本以方便地生成轮廓。
刮板需要配置一个JSON配置,其中包括要获取的库的元数据(名称,repo,groupId,Artefactid)。脚本/图书馆规格目录包含配置文件,可从Maven Central和配置中检索100多个库中,以从Google的Maven存储库中下载Amazon Libraries和Android库(包括350个库,包括支持,GMS,KTX,JetPack,..)。
新(07/30/19):添加了45个广告/跟踪库的列表,当前有1182个版本(Trackers.json)。
可用的库配置文件和库元数据可以在存储库libscout-profiles中找到。
LIBSCOUT具有内置功能,可以报告具有以下安全漏洞的库版本。
弱势版本的预先生成的配置文件用[安全]标记为[Security-Fix] 。
此信息在库中编码已用于生成配置文件的库。每当遇到新的安全问题时,我们都会尝试更新列表/个人资料。如果您可以共享信息,请告诉我们。
| 图书馆 | 版本 | 修复版本 | 脆弱性 | 关联 |
|---|---|---|---|---|
| Airpush | <8.1 | > 8.1 | 默认WebView设置不动动 | 关联 |
| Apache CC | 3.2.1 / 4.0 | 3.2.2 / 4.1 | 挑剔的脆弱性 | 关联 |
| Dropbox | 1.5.4-1.6.1 | 1.6.2 | 掉落的漏洞 | 关联 |
| 3.15 | 3.16 | 帐户劫持漏洞 | 关联 | |
| mopub | <4.4.0 | 4.4.0 | 默认WebView设置不动动 | 关联 |
| OKHTTP | 2.1-2.7.4 3.0.0-3.1.2 | 2.7.5 3.2.0 | 证书固定旁路 | 关联 |
| plexus档案馆 | <3.6.0 | 3.6.0 | 拉链滑移脆弱性 | 关联 |
| 超音速 | <6.3.5 | 6.3.5 | 通过JS暴露不安全的功能 | 关联 |
| vungle | <3.3.0 | 3.3.0 | MITM攻击漏洞 | 关联 |
| Zeroturnound | <1.13 | 1.13 | 拉链滑移脆弱性 | 关联 |
在我们在Google Play上进行免费应用程序的最后一次扫描(2017年5月25日),LIBSCOUT检测到的> 20K应用程序仍包含这些脆弱的LIB版本之一。这些发现已报告给Google的ASI计划。不幸的是,该报告似乎被忽略了。因此,我们手动通知了许多应用程序开发人员。
除其他外,McAfee为其中一个应用程序发布了安全咨询。
|_ 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.
该模块从原始的Lib SDK(.jar和.aar文件支持)生成唯一的库指纹。这些配置文件随后可以用于测试应用程序是否包含在应用中。每个库文件还需要一个包含元数据(例如名称,版本,..)的library.xml 。可以在资产目录中找到模板。为了方便起见,您可以使用库刮板(./script)从Maven存储库中下载完整的库历史记录。默认情况下,LIBSCOUT使用包和类信息(省略方法)生成了基于Hashtree的配置文件。
java -jar libscout.jar -o profile [-a android_sdk_jar ] -x path_to_to_library_xml path_to_to_to_library_file
使用预生成的配置文件检测应用程序中的库。可选的是,LIBSCOUT还为检测到的库进行了API使用分析,即应用程序或其他库(-u Switch)使用哪个库API。
分析结果可以以不同的格式编写。
java -jar libscout.jar -o match -p path_to_profiles [-a android_sdk_jar ]
分析已记录的(公共)API库版本的变化。
当前分析结果包括以下信息:
遵守语义版本控制(SEMVER),即连续版本(预期SEMVER)之间版本字符串的更改是否匹配相应的公共API集(实际SEMVER)的更改。结果进一步包括有关API集的变化(增加/删除/修改)的统计信息。对于删除的API,LIBSCOUT还尝试推断替代API(基于不同的功能)。
为了进行分析,您必须提供原始库SDK的途径。 libscout递归搜索库Jars | AARS(叶目录最多有一个jar | aar文件和一个library.xml文件)。为了方便起见,请使用图书馆刮板。分析结果以JSON格式(-j开关)写入磁盘。
java -jar libscout.jar -o lib_api_analysis [-a android_sdk_jar ] [-j json_dir ] path_to_to_to_lib_sdks
此模式是匹配模式的扩展。它首先检测到提供的应用程序中的库版本并进行库用法分析(暗示-U)。此外,它需要在lib_api_analysis模式下生成的库API兼容数据(通过-L开关)。基于应用程序中的LIB API使用和兼容信息,LIBSCOUT确定了仍然与使用过的LIB API兼容的最高版本。
注意:新实现仍然缺乏某些功能,例如,结果目前已记录但尚未写给JSON。有关更多信息,请参见代码注释。
java -jar libscout.jar -o更新性[ -a android_sdk_jar ] [-j json_dir ]
有关技术细节和大规模评估结果,请参阅我们的出版物:
可靠的第三方库在Android及其安全应用程序中检测(CCS'16)
让我更新:关于Android的第三方图书馆可更新性的实证研究(CCS'17)
如果您在科学出版物中使用libscout,我们将感谢使用这些bibtex条目的引用:[bib-ccs16] [bib-ccs17]