OWASP Dependency-Check plugin でAndroidアプリのライブラリ脆弱性をチェックする

2021/12/11

お仕事でLog4jの脆弱性(CVE-2021-44228)が直撃しまして、脆弱性のヤバさと対応の面倒くささを改めて痛感しました。

で、いい機会なのでAndroidアプリにも脆弱性をチェックする仕組みを入れよう、ということで OWASP Dependency-Check plugin を試してみました。

とりあえず使い方

app\build.gradle にdependencyを追加。

buildscript {
    repositories {
        mavenCentral()
    }

    dependencies {
        classpath 'org.owasp:dependency-check-gradle:6.5.0.1'
    }
}

apply plugin: 'org.owasp.dependencycheck'

これだけでOK、と書かれている記事もあるんですが、自分の環境では上手くいきませんでした。以下の設定を追加する必要があるみたい。

dependencyCheck {
    failBuildOnCVSS = 0
    scanConfigurations = configurations.findAll {
        !it.name.startsWithAny('androidTest', 'test', 'debug') &&
                it.name.contains("DependenciesMetadata") && (
                it.name.startsWithAny("api", "implementation", "runtimeOnly") ||
                          it.name.contains("Api") ||
                        it.name.contains("Implementation") ||
                        it.name.contains("RuntimeOnly")
        )
    }.collect {
        it.name
    }
}

dependencyCheckAnalyze を実行します。

E:\app>gradlew dependencyCheckAnalyze

> Task :app:dependencyCheckAnalyze
Verifying dependencies for project app
Checking for updates and analyzing dependencies for vulnerabilities
Generating report for project app
Found 3 vulnerabilities in project app


One or more dependencies were identified with known vulnerabilities in app:

jsoup-1.13.1.jar (pkg:maven/org.jsoup/jsoup@1.13.1, cpe:2.3:a:jsoup:jsoup:1.13.1:*:*:*:*:*:*:*) : CVE-2021-37714
kotlin-android-extensions-runtime-1.3.72.jar (pkg:maven/org.jetbrains.kotlin/kotlin-android-extensions-runtime@1.3.72, cpe:2.3:a:jetbrains:kotlin:1.3.72:*:*:*:*:*:*:*) : CVE-2020-29582
storage-0.8.0.aar (pkg:maven/com.anggrayudi/storage@0.8.0, cpe:2.3:a:storage_project:storage:0.8.0:*:*:*:*:*:*:*) : CVE-2021-20291


See the dependency-check report for more details.



> Task :app:dependencyCheckAnalyze FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:dependencyCheckAnalyze'.
>

  Dependency-Analyze Failure:
  One or more dependencies were identified with vulnerabilities that have a CVSS score greater than '0.0': CVE-2021-37714, CVE-2020-29582, CVE-2021-20291
  See the dependency-check report for more details.



* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 2m 29s
1 actionable task: 1 executed

3件の脆弱性が検知できました。例えば、 CVE-2021-37714 は jsoup の 1.14.1 以下で発生する脆弱性。 1.14.2 で対策されているのでバージョンアップしなきゃですね。

この出力結果だけでも脆弱性は特定できますが、詳細なレポートが app\build\reports\dependency-check-report.html に出力されるので、そちらで詳細を確認してから対策しましょう。

定期的に実行してこそ、という感じはするので、CI/CDに組み込むのがいいんでしょうね。個人開発アプリだとそこまでするのはシンドいんで、暇なときに手動実行だな……

そもそもこれは何?

OWASP dependency-check は脆弱性を抱えたコンポーネントを利用していないかチェックしてくれるオープンソースのツール。

NVD (National Vulnerability Database) という脆弱性情報データベースと照合して脆弱性を見つけ出してくれます。NVDはNIST(アメリカ国立標準技術研究所)が管理している脆弱性情報データベース。

Javaと.NET向けに作られていて、それ以外にもいくつかの言語が実験的に(Experimental)サポートされています。

コマンドラインツールのほかに、Ant、Gradle、Jenkins、Maven、SBT向けのプラグインが提供されています。

今回は Gradle Plugin をAndroid向けに設定して使ってみた、という感じですね。なので、Android用というわけではなくてJavaのアプリだったら広く使うことができます。Log4j問題とかを踏まえると、むしろサーバーサイドで導入すべきツールですかねー。

参考URL




関連(するかもしれない)記事


おススメ