LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

ラックピープル | 

Struts2だけではない、OSSコンポーネントの更新漏れに注意

エンタープライズ・セキュリティサービス事業部の倉持です。

JSOCアナリストグループより、Apache Struts 2における脆弱性 (S2-045、CVE-2017-5638)の被害拡大についてのレポートが投稿されています。重要インシデントは減少傾向にあるものの、Apache Struts2を狙った攻撃は継続して多数の攻撃が行われているようです。また、3月20日には、同様の脆弱性が別の箇所にも存在していることが判明しています(S2-046)。今回問題になった対象バージョンのApache Struts2をお使いのユーザは早期にバージョンアップする事を改めて推奨いたします。

OSSコンポーネントの既知の脆弱性

WebアプリケーションはStruts以外にも、様々なOSSコンポーネントを組み合わせて構築されています。Strutsに限らず、こうしたOSSコンポーネントの脆弱性を放置しておくことはセキュリティリスクにつながります。OWASPが発行しているOWASP Top10でも、コンポーネントの既知の脆弱性について「A9 既知の脆弱性を持つコンポーネントの利用」として指摘しています。

「既知の脆弱性を持つコンポーネントの利用」に起因する対策としては、

  1. 利用しているコンポーネントとバージョンを把握する
  2. 1で把握したコンポーネントのセキュリティ情報を収集する
  3. コンポーネントに脆弱性が発見された場合には、バージョンアップなどの対応を行う

というプロセスを構築・運用・維持していく必要があります。とはいえ、何も準備ができていないところからスタートするのは大変です。日々のセキュリティ情報の収集も、それが本業でなければ言うは易し、行うは難しでしょう。

OWASP Dependency Check

そこで今回は、OWASPが提供するDependency Checkというツールを使って、「Webアプリケーションが利用しているコンポーネントとバージョンの把握」「利用しているコンポーネントに既知の脆弱性があるかどうか」を簡易的に実現する方法についてご紹介します。

Dependency Checkは、アプリケーションをスキャンし利用しているコンポーネントを調査します。そして、NVD(National Vulnerability Database)の脆弱性データベースを参照して利用しているコンポーネントに既知の脆弱性があるかどうかをレポートします。現時点ではJavaと.NETをサポートしています。レポートはデフォルトではHTMLで出力されます。

では早速、Dependency Checkを使った調査について解説します。なお、今回はWindowsのコマンドラインからDependency Checkを実行する方法について解説しますが、AntやJenkins、MavenなどのCIツールとの連携も可能です。作業の流れは以下のようになりますが、Java実行環境のインストールについては割愛します。

  • Java実行環境をインストールする(なければ)
  • Dependency Checkをダウンロードする
  • 対象アプリケーションに対して、スキャンを実行する

OWASP Dependency Checkを実行する

OWASP Dependency Checkのサイトからコマンドラインツールをダウンロードし、zipファイルを展開します。binフォルダにあるdependency-check.batをコマンドラインから実行します。コマンドラインから次のように実行します。

dependency-check.bat --project "My App Name" --scan "c:¥java¥application¥lib"

「My App Name」はレポートに出力する際のアプリケーション名ですのでお好みに合わせて変更します。「c:¥java¥application¥lib」にスキャン対象のアプリケーションのパスを指定します。

コマンドプロンプト

コマンドプロンプト

初回起動時には、NVDから脆弱性情報をダウンロードしてきますので、少し時間がかかります。スキャンが完了すると、スキャン結果がHTMLとしてDependency Checkを実行したフォルダに「dependency-check-report.html」として出力されます。

"Dependency Check"スキャン結果のサマリ

"Dependency Check"スキャン結果のサマリ

上部にはスキャン結果のサマリが表示されます。検出されたコンポーネント、バージョンがリストアップされています。「Highest Severity」の欄に脆弱性の深刻度が記載されています。脆弱性の詳細については、コンポーネントのリンクをクリックすることで確認することができます。

今回はインターネットからStrutsによるWebアプリケーション開発のサンプルプロジェクトをダウンロードしたものをスキャンしてみました。結果としてメンテナンスが終了しているStruts1.1や、それ以外にも多数のコンポーネントが既知の脆弱性があるとしてレポートされました。

今回はDependency Checkをコマンドラインから簡単に実行する方法をご紹介しました。とりあえず自社のWebシステムの状況をザックリと把握することが出来ますので、Strutsだけではない、WebシステムのOSSコンポーネントの脆弱性への対応を進める一助としてください。

また、Dependency Checkには多数のオプションがあります。先述したとおりCIツールと連携も可能ですので、日々の開発運用プロセスの中に組み込んでレポートを自働化することもできます。DevSecOpsの実現に向けて取り組んでみてはいかがでしょうか。

この記事は役に立ちましたか?

はい いいえ