コードの安全性・安定性を高める開発サイクル ~テスト管理の効率を上げ、脆弱性診断を自動で行う~

第3回WhiteSource+Jiraの連携でDevSecOpsをやってみよう(前編)

はじめに

過去の連載業務を改善する情報共有の仕掛け第1回第2回では、DevOps実現のための基盤作りについてお話をしました。今年はDevOpsにセキュリティの観点を加えたDevSecOpsにフォーカスし、前回のDevOpsからDevSecOpsへの近道で、Sec領域を担うソフトウェアコンポジション解析[1]ツールWhiteSourceについて紹介しました。今回は、WhiteSourceのコンポジション解析の流れを確認したあと、DevOpsを支援するツールとWhiteSourceの統合について紹介します。

WhiteSourceの解析のしくみ

WhiteSourceはバージョン管理システムやCIツールと連携し、さまざまなタイミングでコンポジション解析を実行できます。ここでは一番ベーシックな方法として、WhiteSourceが提供するUnified Agentと呼ばれるツールを使った解析の流れについて紹介します。

Unified AgentはJavaで実装されており、実行環境にはJRE 1.8系がインストールされている必要があります。アプリケーションと設定ファイルはGitHubで配布されており、curlをインストールしておけば次のコマンドで最新版を取得できます。

$ curl -LJO https://github.com/WhiteSource/unified-agent-distribution/releases/latest/download/wss-unified-agent.jar
$ curl -LJO https://github.com/WhiteSource/unified-agent-distribution/raw/master/standAlone/wss-unified-agent.config

取得したリソースを開発環境の任意のディレクトリに配置し、wss-unified-agent.configにWhiteSourceサーバのURL、APIKey、解析対象のリソースの拡張子などのパラメータを設定します。アプリケーションはJavaコマンドで実行でき、次のように-dオプションでスキャン対象のディレクトリパスを指定します。

$ java -jar wss-unified-agent.jar -c wss-unified-agent.config -d source/sample-software

Unified Agentは、指定されたディレクトリを再帰的にスキャンし、検出したコンポーネントのハッシュ値を算出します。開発環境のスキャンが完了すると、取得したハッシュ値をWhiteSourceサーバに送信します。WhiteSourceの特長は、ソースコードを外部に送信せずにハッシュ値だけを送信することにあります。

WhiteSourceのサーバでは、受け取ったハッシュ値を元にデータベース[2]とマッチングし、オープンソースコンポーネントの情報をインベントリに登録します。WhiteSourceの利用者は、図1のようにインベントリに登録されたオープンソースコンポーネントのライセンス、脆弱性、バグなどに関するアラートや統計情報を確認できます。

図1 WhiteSourceのダッシュボード
図1 WhiteSourceのダッシュボード

WhiteSourceのサーバはSaaSとオンプレミスで提供されていますが、ソースコードなどの重要性が高い情報をWhiteSourceサーバに送信しない作りとなっているため、手軽に導入できるSaaS版が人気を集めています。

Prioritizeを使った脆弱性解析

Prioritizeは、WhiteSourceの脆弱性解析に関するオプション機能です。

従来の解析手法では、脆弱性が報告されているオープンソースコンポーネントを特定することはできますが、報告された脆弱性が内在するエンティティが、開発対象のソースコードからどのように参照されているかについては識別できませんでした。

Prioritizeでは、開発対象のソースコードをスキャンして、コードがオープンソースコンポーネントとどのように相互作用するかを分析し、オープンソースコンポーネントの脆弱性を含むソースコードが開発対象のソースコードからコールされているか明確にできます。これにより、報告された脆弱性が本当のリスクになるかどうかの確認が容易になり、脆弱性への対応に関する工数を大幅に削減し、開発プロセスを効率化できます。

現在は、次に示す環境における分析をサポートしており、今後のリリースでサポート環境の追加が検討されています。

  • Maven、Gradleを利用したJava、およびScala、Kotlin
  • JavaScript(npm)

Unified Agentの設定ファイルで、Prioritize解析の実行フラグ、Maven/Gradleなどの利用環境に応じたオプションを追加で設定します。ツールを実行する際、スキャン対象のディレクトリパスに加えて、次のように-appPathオプションでbuild後のアプリケーションを指定します。

$ java -jar agent/bin/wss-unified-agent.jar -c wss-unified-agent.config -d source/sample-software -appPath source/sample-software/target/SampleSoftware.jar

処理が完了すると、指定したWhiteSourceのサイトに解析の結果が表示されます。Prioritizeオプションが有効になっている環境では、図2のように脆弱性の影響を確認するうえでの指標となるシールドマークが表示されます。

図2 脆弱性の指標となるシールドマーク
図2 脆弱性の指標となるシールドマーク

また、図3のように脆弱性の詳細情報として、CVE(脆弱性情報⁠⁠、脆弱性を含むソースコードのコールトレースなどが確認できます。

図3 脆弱性の詳細情報
図3 脆弱性の詳細情報

以上がWhiteSourceが行うソフトウェアコンポジション解析の大まかな流れです。後編では、診断結果に対するアクションを指定できるポリシー設定についてと、DevOpsを支援するツールとWhiteSourceとの統合について紹介します。

米国Atlassianから、2年連続で
「Top new business APAC」を受賞。
Atlassianセールスパートナーとして
アジアパシフィックで1位の証
米国Atlassianから、2年連続で「Top new business APAC」を受賞。Atlassianセールスパートナーとしてアジアパシフィックで1位の証

日本だけでなく、アジア圏でもアトラシアン製品販売のトップエキスパートであるリックソフトのWebサイトでは、各アトラシアン製品の体験版を提供しているほか、アトラシアン製品専用のコミュニティも運営しています。まずはアクセスしてみては!

Software Design

本誌最新号をチェック!
Software Design 2022年9月号

2022年8月18日発売
B5判/192ページ
定価1,342円
(本体1,220円+税10%)

  • 第1特集
    MySQL アプリ開発者の必修5科目
    不意なトラブルに困らないためのRDB基礎知識
  • 第2特集
    「知りたい」「使いたい」「発信したい」をかなえる
    OSSソースコードリーディングのススメ
  • 特別企画
    企業のシステムを支えるOSとエコシステムの全貌
    [特別企画]Red Hat Enterprise Linux 9最新ガイド
  • 短期連載
    今さら聞けないSSH
    [前編]リモートログインとコマンドの実行
  • 短期連載
    MySQLで学ぶ文字コード
    [最終回]文字コードのハマりどころTips集
  • 短期連載
    新生「Ansible」徹底解説
    [4]Playbookの実行環境(基礎編)

おすすめ記事

記事・ニュース一覧