Libscoutは、Android/Javaアプリのサードパーティライブラリを検出するための軽量で効果的な静的分析ツールです。この検出は、識別子の名前変更や反射ベースのAPIの非表示やコントロールフローランダム化などのコードベースの難読化などの一般的なバイテコード難読化技術に対して回復力があります。さらに、Libscoutは、深刻なバグやセキュリティの問題を含むバージョンを含む正確なライブラリバージョンを特定できます。
Libscoutでは、Androidアプリでの検出に使用できるライブラリプロファイルを抽出するために、元のライブラリSDK(.jar/.AARファイルをコンパイル)を必要とします。事前に生成されたライブラリプロファイルは、リポジットLibscoutプロファイルでホストされています。
ユニークな検出機能:
時間の経過とともに、Libscoutは、アプリでライブラリSDKと検出されたライブラリの両方で追加の分析を実行するために拡張されました。
さらに、API互換性情報をIDEに統合して、開発者が依存関係を最新の状態に保つのに役立つAndroid Studio Extension Up2Depがあります。
スクリプトディレクトリには、Maven Central 、 JCenter 、 Custom MVNリポジトリの完全なバージョン履歴を含むオリジナルのライブラリSDKを自動的にダウンロードするライブラリスレッパーPythonスクリプトが含まれています。元のライブラリSDKを使用して、プロファイルを生成し、ライブラリAPI互換性分析を実施できます(以下のモジュールを参照)。 Library-Profile-Generatorスクリプトを使用して、大規模にプロファイルを便利に生成します。
スクレーパーは、フェッチするライブラリのメタデータを含むJSON構成で構成する必要があります(名前、Repo、GroupID、ArteFactid)。スクリプト/ライブラリスペックディレクトリには、Maven Centralから100を超えるライブラリを取得する構成ファイルと、GoogleのMavenリポジトリからAmazonライブラリとAndroidライブラリ(サポート、GMS、KTX、JetPackなどを含む350ライブラリとAndroidライブラリをダウンロードする構成が含まれています。
New(07/30/19):現在1182バージョン(Trackers.json)を備えた45のAD/追跡ライブラリのリストを追加しました。
すぐに使用できるライブラリプロファイルとライブラリメタデータは、リポジットLibscout-Profilesにあります。
Libscoutには、以下のセキュリティの脆弱性を備えたライブラリバージョンを報告する機能性が構築されています。
脆弱なバージョンの事前に生成されたプロファイルには、 [セキュリティ] 、 [セキュリティフィックス]のパッチがタグ付けされています。
この情報は、プロファイルを生成するために使用されているLibrary.xmlファイルにエンコードされています。新しいセキュリティの問題に遭遇するたびに、リスト/プロファイルを更新しようとします。情報を共有できれば、お知らせください。
| 図書館 | バージョン | 修正バージョン | 脆弱性 | リンク |
|---|---|---|---|---|
| AirPush | <8.1 | > 8.1 | 非サニタリングされていないデフォルトのWebView設定 | リンク |
| Apache CC | 3.2.1 / 4.0 | 3.2.2 / 4.1 | 敏lialialialiationの脆弱性 | リンク |
| ドロップボックス | 1.5.4-1.6.1 | 1.6.2 | Droppedinの脆弱性 | リンク |
| 3.15 | 3.16 | アカウントハイジャックの脆弱性 | リンク | |
| モーパブ | <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 Archiver | <3.6.0 | 3.6.0 | ジップスリップの脆弱性 | リンク |
| 超音速 | <6.3.5 | 6.3.5 | JS経由の安全でない機能曝露 | リンク |
| 虫 | <3.3.0 | 3.3.0 | MITM攻撃の脆弱性 | リンク |
| Zeroturnaround | <1.13 | 1.13 | ジップスリップの脆弱性 | リンク |
Google Play(2017年5月25日)の無料アプリの最後のスキャンでは、Libscoutは、これらの脆弱なLIBバージョンのいずれかを含む20K> 20Kアプリを検出しました。調査結果はGoogleのASIプログラムに報告されています。残念ながら、報告書は無視されているように見えました。その結果、多くのアプリ開発者に手動で通知しました。
とりわけ、McAfeeはアプリの1つのセキュリティアドバイザリーを公開しました。
|_ 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および.ARファイルがサポートされている)から一意のライブラリフィンガープリントを生成します。これらのプロファイルは、それぞれのライブラリバージョンがアプリに含まれているかどうかをテストするために使用できます。各ライブラリファイルには、メタデータ(名前、バージョンなど)を含むLibrary.xmlが必要です。テンプレートは、Assets Directoryにあります。便利なため、ライブラリスクレーパー(./Scripts)を使用して、Mavenリポジトリからライブラリ履歴を完全にダウンロードできます。デフォルトでは、LibScoutは、ハッシュツリーベースのプロファイルをパッケージとクラスの情報(メソッドを省略)して生成します。
Java -jar libscout.jar -oプロファイル[-a android_sdk_jar ] -x path_to_library_xml path_to_library_file
事前に生成されたプロファイルを使用してアプリのライブラリを検出します。オプションで、LibScoutは、検出されたライブラリ、つまりどのライブラリAPIがアプリまたは他のライブラリ(-Uスイッチ)で使用されるかについて、API使用分析も実施します。
分析結果は、さまざまな形式で記述できます。
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)
ライブラリバージョンの文書化された(public)APIセットの変更を分析します。
現在、分析の結果には次の情報が含まれています。
セマンティックバージョン(SEMVER)へのコンプライアンス、つまり、連続バージョン間のバージョン文字列の変更が、それぞれのパブリックAPIセット(実際のSEMVER)の変更と一致するかどうか。結果には、APIセットの変更に関する統計(追加/削除/修正)が含まれます。削除されたAPIの場合、Libscoutはさらに、代替APIを推測しようとします(さまざまな機能に基づいています)。
分析のために、元のライブラリSDKへのパスを提供する必要があります。 Libscoutはライブラリジャーを再帰的に検索します| AAR(Leaf Directoriesには、最大1つのjar | aarファイルと1つのライブラリファイルがあると予想されます)。便利なためには、ライブラリスクレーパーを使用してください。分析結果は、JSON形式(-Jスイッチ)のディスクに書き込まれます。
java -jar libscout.jar -o lib_api_analysis [-a android_sdk_jar ] [-j json_dir ] path_to_lib_sdks
このモードは、マッチモードへの拡張機能です。最初に提供されたアプリのライブラリバージョンを検出し、ライブラリ使用分析を実施します(-Uは暗示されています)。さらに、 lib_api_analysisモードで生成されたライブラリAPIコンパットデータ(-lスイッチを介して)が必要です。アプリのlib API使用量と互換情報に基づいて、libscoutは、使用済みのLIB APIのセットにまだ互換性がある最高版を決定します。
注:新しい実装にはまだいくつかの機能がありません。たとえば、結果は現在ログに記録されていますが、JSONにはまだ書かれていません。詳細については、コードコメントを参照してください。
Java -jar libscout.jar -o updatability [-a android_sdk_jar ] [-j json_dir ] -l lib_api_data_dir path_to_app(s)
技術的な詳細と大規模な評価結果については、出版物を参照してください。
Androidおよびそのセキュリティアプリケーションでの信頼できるサードパーティライブラリ検出(CCS'16)
私を最新の状態にしてください:Androidのサードパーティライブラリの更新能力の実証的研究(CCS'17)
科学出版物でLibscoutを使用する場合、これらのBibtexエントリを使用した引用に感謝します:[bib-ccs16] [bib-ccs17]