ガイド

OSCARの導入後に開発チームとセキュリティチームが行う作業を、順を追って説明します。以下のアドレス https://oscar.example とキー <API key> は、お使いの環境の値に置き換えてください。

全体の流れ

3種類のビルドはいずれも同じ3つのステップでSBOMをアップロードするため、どのビルドから来たものでもOSCAR上では同じように見えます。

  1. アップロード — POST /api/v1/bom(プロジェクトがなければ作成:autoCreate=true)
  2. 照会 — GET /api/v1/project/lookup?name=…&version=… でプロジェクト識別子を取得
  3. タグ付け — PATCH /api/v1/project/{uuid} で分類・説明・タグを設定

アップロードされるのはコンポーネント一覧だけです。SBOMに含まれるのはライブラリの名前・バージョン・ハッシュで、ソースコードは一切含まれません。

APIキーの発行

セキュリティ管理者がOSCARの Administration → Access Management → Teams を開き、チームを選んでAPIキーを発行します。用途ごとにキーを分けると、権限を最小限に保てます。

用途権限
ビルドからのSBOMアップロードBOM_UPLOAD · PROJECT_CREATION_UPLOAD · タグ付けには VIEW_PORTFOLIO · PORTFOLIO_MANAGEMENT も必要
AI問い合わせ(MCP)VIEW_PORTFOLIO · VIEW_VULNERABILITY · VULNERABILITY_ANALYSIS · POLICY_VIOLATION_ANALYSIS(アップロードする場合は BOM_UPLOAD を追加)

ビルドサーバーや開発者のPCでは、キーをファイルではなく環境変数に保管してください。

export SSEM_OSCAR_DTRACK_URL=https://oscar.example
export SSEM_OSCAR_DTRACK_API_KEY_TEAM_OSCAR=<API key>   # ビルド用
export SSEM_OSCAR_DTRACK_API_KEY_MCP=<API key>          # AI問い合わせ用

Mavenプロジェクト

pom.xml に2つのプラグインを追加します。cyclonedx-maven-plugin がパッケージング前にSBOMを生成し、exec-maven-plugin が install フェーズでアップロードします。

<plugin>
  <groupId>org.cyclonedx</groupId>
  <artifactId>cyclonedx-maven-plugin</artifactId>
  <version>2.9.1</version>
  <configuration>
    <schemaVersion>1.5</schemaVersion>
    <outputFormat>json</outputFormat>
    <outputName>${project.artifactId}-${project.version}.sbom</outputName>
  </configuration>
  <executions>
    <execution>
      <phase>prepare-package</phase>
      <goals><goal>makeBom</goal></goals>
    </execution>
  </executions>
</plugin>

アップロードは curl 1回で済みます(exec-maven-plugin が実行するのと同じコマンドです)。

curl -X POST "$SSEM_OSCAR_DTRACK_URL/api/v1/bom" \
  -H "X-Api-Key: $SSEM_OSCAR_DTRACK_API_KEY_TEAM_OSCAR" \
  -F autoCreate=true \
  -F projectName=my-service -F projectVersion=1.0.0 \
  -F bom=@target/my-service-1.0.0.sbom.json

デプロイも install フェーズに紐付いている場合、ローカルで何気なく mvn install を実行するとサーバーにアップロードされます。ローカルでの確認は mvn package までにしてください。

npmプロジェクト

プロジェクトのルートに sbom-config.json を置き、アップロードスクリプト upload_sbom.py を実行します。SBOMファイル(bom.json)がない場合は、設定したビルドコマンドを先に実行します。

{
  "project_name": "mobile-web",
  "project_version": "5.0.2",
  "project_classifier": "APPLICATION",
  "bom_files": ["./bom.json"],
  "build_command": "npm run build",
  "tags": { "team": "front", "service-type": "frontend", "technology": "javascript",
            "build": "npm-webpack", "npm-managed": "" }
}
python3 upload_sbom.py

Ant · 手動ビルド(ssemsbom)

pom.xml がなく lib/ にJARだけがあるプロジェクトでは、ssemsbom CLIがJARをスキャンしてCycloneDX 1.5のSBOMを生成し、アップロードします。

./install.sh                                   # ~/.ssemsbom にインストールしてPATHに追加
ssemsbom --config sbom-config.json             # 生成・アップロード・タグ付け
ssemsbom --config sbom-config.json --no-upload # ファイル生成のみ
{
  "project_name": "loan-batch",
  "project_version": "2.4.1",
  "lib_dirs": ["./lib", "./ext-lib"],
  "output_file": "./build/sbom.json",
  "tags": { "team": "core", "build": "ant", "target-was": "tomcat", "ant-managed": "" }
}

名前の識別方法

レガシーJARのメタデータはまちまちなため、信頼度の高い情報源から順に試します。前のステップで設定された値が、後のステップで上書きされることはありません。

  1. ファイル名 — commons-lang3-3.12.0.jar → 名前とバージョンの初期値
  2. pom.properties — あればグループ・名前・バージョンをすべてここから取得(最も信頼度が高い)
  3. MANIFEST.MF — pomがない場合にのみバージョンを補完
  4. グループ推定テーブル — 広く使われるライブラリの名前からグループを補完
  5. Implementation-Vendor-Id — まだ空で、ドメイン形式に見える場合のみ
  6. Maven Centralのハッシュ照会 — --resolve-central 指定時のみ(ネットワークが必要)

どれでも特定できない場合、グループは unknown のままです。名前が誤っているとエラーにはならず「脆弱性0件」として表示されるため、OSCARは推測しません。

標準タグ

画面やAIの回答でまとめて扱えるよう、3種類のビルドはすべて同じキーを使う必要があります。値のないタグ(ant-managed など)は名前だけで付与します。

キー意味例
team担当チームcore
categoryカテゴリsecurity
service-typeサービス種別backend · frontend · utility
technology主要技術java · javascript
buildビルドツールmaven · npm-webpack · ant
target-host · target-serverデプロイ先ホスト · サーバーapp-01
target-was · target-vendor · target-javaアプリケーションサーバー · ベンダー · Javatomcat · apache · openjdk
maven-managed · npm-managed · ant-managedビルド管理の目印(値なし)—

タグの値は実際のデプロイ環境どおりに保ってください。「どのアプリケーションサーバーで何が動いているか」といった質問には、これらのタグをもとに回答します。

AIの接続(MCP)

OSCAR MCPサーバーはJava 21で動く単一のjarです。AIクライアントがこれを起動し、STDIOで通信します。Claude Desktopは設定ファイル(claude_desktop_config.json)を、Claude Codeはプロジェクトの .mcp.json を同じ形式で使います。

{
  "mcpServers": {
    "oscar": {
      "command": "java",
      "args": ["-jar", "/path/to/dtrack-mcp-server.jar"],
      "env": {
        "SSEM_OSCAR_DTRACK_URL": "https://oscar.example",
        "SSEM_OSCAR_DTRACK_API_KEY_MCP": "<API key>"
      }
    }
  }
}

接続できたら、次のように質問してみてください。

ツールが47個あるため、社内モデルはツール呼び出し(Tool Calling)に対応したものを選んでください。非対応のモデルはツールを呼ばずに推測で回答してしまいます。

ライセンス翻訳エンジン

ライセンス全文は3つのエンジンのいずれかで翻訳します。導入時に、社内ポリシーに合わせて選択します。

エンジン実行場所適したケース
Ollama自社サーバー翻訳対象のテキストさえ社外に出せない
LM Studio自社サーバー(Apple Siliconで高速)同上
Gemini外部API社内にGPUがなく、外部呼び出しが許可されている

翻訳は 【日本語訳】 + 【原文】 の形で付け加えられます。エンジンに接続できない場合は原文のみを表示します。

よくある質問

ソースコードはOSCARにアップロードされますか?

いいえ。SBOMに含まれるのはライブラリの名前・バージョン・ハッシュだけです。

閉域網でも使えますか?

はい。OSCARは社内ネットワークで動作し、ネットワーク連携を通じて脆弱性データのみを取り込みます。社内のデータが外に出る経路はありません。

AIが誤った回答をしたら?

AIはツールを呼び出してエンジンのデータを取得するだけで、独自に判断しません。使ったツール名が回答と一緒に表示されるので、同じデータを画面で確認できます。

分析エンジン(Dependency-Track)はアップグレードできますか?

はい。OSCARはエンジンを改変せずにその前段で動作するため、公式リリースをそのままインストールできます。アップロード履歴はエンジンのデータベースの一部を参照するので、アップグレード後は履歴が引き続き蓄積されているか一度確認してください。

商用・自社製のJARはどうなりますか?

公開リポジトリにもJAR内部にも情報がないコンポーネントは識別できず、unknown のままになります。脆弱性照合から漏れる可能性があるため、別途管理してください。

その他のご質問は halo@levelupsoft.com までお寄せください。