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]