高度な使用状況トラッキング

高度な使用状況トラッキングを使用すると、検出されたライブラリに既知の脆弱性が含まれているかどうかを示すことで、管理対象インスタンスで実行されているJavaサーバー、およびJavaアプリケーションによって使用されるライブラリに関するインサイトをセキュリティに重点を置くことができます。

高度な使用状況トラッキングには次のものが含まれます。

  • Javaサーバーのスキャン
  • Javaライブラリのスキャン

Javaサーバーのスキャン

この機能を使用すると、フリートで実行されているJavaサーバーを検出できます。JMSは現在、WebLogic、JBossおよびTomcatサーバーを検出できます。検出に成功すると、検出されたすべてのJavaサーバーは、JMSフリートのJavaサーバーのセクションにあります。

OCIクラウド・コンソール

  1. OCIコンソールに管理者としてサインインします。
  2. ナビゲーション・メニューを開き、「監視および管理」をクリックし、「Java管理」の下の「フリート」をクリックします。
  3. フリートを選択します。
  4. 「アクション」をクリックし、メニューから「Javaサーバーのスキャン」を選択します。
  5. スキャンをクリックします。
  6. 作業リクエストが終了したら、フリートのJavaサーバー・セクションをクリックします。検出されたすべてのJavaサーバーをリストする必要があります

OCI CLI

  1. 次のコマンドを実行します:
    oci jms java-server-usage scan --fleet-id $FLEET_OCID

    ノート:

    追加パラメータ--managed-instance-idsを使用してスキャンを実行する管理対象インスタンスのJSONリストを指定できます。指定しない場合、フリート内のすべての管理対象インスタンスが選択されます。

Javaサーバー・スキャン中にJMSプラグインによってOCIインベントリ・ログ・オブジェクトに送信されるサンプルJSONペイロード:

{
  "datetime": 1749559306604,
  "logContent": {
    "id": "ac26cc41-de6d-4f8a-994b-909a3705d0db",
    "time": "2025-06-10T12:41:46.604Z",
    "oracle": {
      "compartmentid": "ocid1.compartment.oc1..compartment-id",
      "ingestedtime": "2025-06-10T12:42:08.158306651Z",
      "instanceid": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
      "loggroupid": "ocid1.loggroup.oc1.eu-frankfurt-1.log-group-id",
      "logid": "ocid1.log.oc1.eu-frankfurt-1.log-id",
      "tenantid": "ocid1.tenancy.oc1..tenant-id"
    },
    "source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
    "specversion": "1.0",
    "subject": "Oracle JMS Plugin",
    "type": "jms.javaserver.metadata.log",
    "data": {
      "data": {
        "clusterName": "",
        "committedHeap": 16252928,
        "deployments": [],
        "fleetId": "ocid1.jmsfleet.oc1.eu-frankfurt-1.fleet-id",
        "initHeap": 16777216,
        "javaDistribution": "Java(TM) SE Runtime Environment",
        "javaHome": "/usr/lib/jvm/jdk-17.0.15-oracle-x64",
        "javaMajorVersion": "17",
        "javaVendor": "Oracle Corporation",
        "javaVersion": "17.0.15",
        "managedInstanceId": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
        "maxHeap": 241303552,
        "osArch": "amd64",
        "osName": "Linux",
        "osVersion": "5.15.0-306.177.4.el9uek.x86_64",
        "productName": "Apache Tomcat",
        "productVersion": "11.0.8.0",
        "serverHome": "/home/opc/apache-tomcat-11.0.8",
        "serverName": "N/A",
        "serverPort": "8088",
        "usedHeap": 13224344
      },
      "datacontenttype": "application/json",
      "dataschema": "1.0",
      "id": "5d1178ee-f8e9-4cd4-a463-5bb309c02b99",
      "source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
      "specversion": "1.0",
      "time": "2025-06-10T12:41:46.601Z",
      "type": "jms.javaserver.metadata.log"
    }
  },
  "regionId": "eu-frankfurt-1"
}

Javaライブラリのスキャン

この機能を使用すると、Javaアプリケーションで使用されるすべてのライブラリのレポートを、Javaライブラリと呼ばれるフリートの単一のセクションに作成できます。

これを使用して、Javaサード・パーティ・ライブラリの既知の脆弱性をスキャンし、Javaアプリケーションで不要なライブラリが使用されていないことを確認できます。JMSで検出可能または検出できないものの詳細は、「Javaライブラリのスキャン」の公式ドキュメントを参照してください。

OCIクラウド・コンソール

  1. OCIコンソールに管理者としてサインインします。
  2. ナビゲーション・メニューを開き、「監視および管理」をクリックし、「Java管理」の下の「フリート」をクリックします。
  3. フリートを選択します。
  4. 「アクション」をクリックし、メニューから「Javaライブラリのスキャン」を選択します。
  5. スキャンをクリックします。
  6. 作業リクエストが終了したら、フリートのJavaライブラリ・セクションをクリックします。検出されたすべてのJavaライブラリをリストする必要があります

OCI CLI

  1. 次のコマンドを実行します:
    oci jms library-usage scan --fleet-id $FLEET_OCID

    ノート:

    追加パラメータ--managed-instance-idsを使用してスキャンを実行する管理対象インスタンスのJSONリストを指定できます。指定しない場合、フリート内のすべての管理対象インスタンスが選択されます。

Javaライブラリ・スキャン中にJMSプラグインによってOCIインベントリ・ログ・オブジェクトに送信されるサンプルJSONペイロード:

{
  "datetime": 1749633185521,
  "logContent": {
    "id": "e7915f73-ac67-4ec7-9d4d-7798cb9e0ce0",
    "time": "2025-06-11T09:13:05.521Z",
    "oracle": {
      "compartmentid": "ocid1.compartment.oc1..compartment-id",
      "ingestedtime": "2025-06-11T09:14:53.129341509Z",
      "instanceid": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
      "loggroupid": "ocid1.loggroup.oc1.eu-frankfurt-1.log-group-id",
      "logid": "ocid1.log.oc1.eu-frankfurt-1.log-id",
      "tenantid": "ocid1.tenancy.oc1..tenant-id"
    },
    "source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
    "specversion": "1.0",
    "subject": "Oracle JMS Plugin",
    "type": "jms.javaserver.libraries.log",
    "data": {
      "data": {
        "applicationSourcePath": "/var/lib/tomcat/webapps/java-webapp-demo-0.0.1-SNAPSHOT.war",
        "clusterName": "",
        "committedHeap": 25296896,
        "deploymentName": "java-webapp-demo-0.0.1-SNAPSHOT",
        "deploymentType": "war",
        "fleetId": "ocid1.jmsfleet.oc1.eu-frankfurt-1.fleet-id",
        "initHeap": 16777216,
        "javaDistribution": "Java(TM) SE Runtime Environment",
        "javaHome": "/opt/java/jdk-24.0.1",
        "javaMajorVersion": "24",
        "javaVendor": "Oracle Corporation",
        "javaVersion": "24.0.1",
        "libraries": [
          "google llc:error_prone_annotations:2.30.0:com.google.errorprone",
          "fasterxml:jackson-datatype-jsr310:2.19.0:com.fasterxml.jackson.datatype",
          "fasterxml:jackson-core:2.19.0:com.fasterxml.jackson.core",
          "the apache software foundation:log4j-to-slf4j:2.24.3:org.apache.logging.log4j",      
          "google gson project:gson:2.13.1:com.google.code.gson",
          "slf4j.org:slf4j-api:2.0.17:org.slf4j",
          "google llc:proto-google-common-protos:2.54.1:com.google.api.grpc",
          "the apache software foundation:log4j-api:2.24.3:org.apache.logging.log4j",
          "h2 group:h2:2.3.232:n/a",
          "slf4j.org:jul-to-slf4j:2.0.17:org.slf4j",
          "qos.ch:logback-classic:1.5.18:ch.qos.logback",
          "fasterxml:jackson-annotations:2.19.0:com.fasterxml.jackson.core",    
          "fasterxml:jackson-module-parameter-names:2.19.0:com.fasterxml.jackson.module",
          "fasterxml:jackson-databind:2.19.0:com.fasterxml.jackson.core",
          "eclipse foundation:jakarta.annotation-api:2.1.1:jakarta.annotation",
          "qos.ch:logback-core:1.5.18:ch.qos.logback"
        ],
        "managedInstanceId": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
        "maxHeap": 241303552,
        "osArch": "amd64",
        "osName": "Linux",
        "osVersion": "5.15.0-306.177.4.el9uek.x86_64",
        "productName": "Apache Tomcat",
        "productVersion": "9.0.87.0",
        "serverHome": "/usr/share/tomcat",
        "serverName": "N/A",
        "serverPort": "8080",
        "usedHeap": 23623336
      },
      "datacontenttype": "application/json",
      "dataschema": "1.0",
      "id": "f725e769-aea1-4c46-9125-9bec280b75c6",
      "source": "ocid1.instance.oc1.eu-frankfurt-1.instance-id",
      "specversion": "1.0",
      "time": "2025-06-11T09:13:05.518Z",
      "type": "jms.javaserver.libraries.log"
    }
  },
  "regionId": "eu-frankfurt-1"
}

お気に入りのソフトウェア・プロバイダによって開発されたJavaアプリケーションがあり、アプリケーションがインフラストラクチャ内に存在するサーバーにデプロイされているとします。セキュリティの問題の可能性を回避するために、アプリケーションに既知のセキュリティ脆弱性が含まれていないかどうかを確認する必要があります。次の例では、Apache TomcatサーバーにJava Webアプリケーションをデプロイし、次のスクリプトを使用してJavaライブラリ・スキャンを実行します。
#!/usr/bin/env bash
 
# configuration variables
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
 
# execute library scan on specific managed instance within your fleet where example application is running
WORK_REQUEST_OCID=$(oci jms library-usage scan \
        --fleet-id "$FLEET_OCID" \
        --managed-instance-ids "[\"$MANAGED_INSTANCE_OCID\"]" | jq -r '."opc-work-request-id"')
 
echo $WORK_REQUEST_OCID
 
# additionally you can add your own logic to check if work request is finished
# sleep 600
# oci jms work-request get --work-request-id "$WORK_REQUEST_OCID" | jq .data.status

作業リクエストが終了し、データがJMSに存在したら、次のコマンドを使用して、アプリケーションにいくつかの脆弱性が含まれているかどうかを確認できます:

#!/usr/bin/env bash
 
# configuration variables
FLEET_OCID=ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta
MANAGED_INSTANCE_OCID=ocid1.instance.oc1.eu-frankfurt-1.antheljtptiaquqcrjmnu7mxbjthm2jm5qzryu7xy4w27rfo56nxf4uwv6pq
 
# show first 1000 libraries and print those where JMS is aware of some CVE
oci jms library-usage summarize \
        --fleet-id $FLEET_OCID \
        --managed-instance-id $MANAGED_INSTANCE_OCID \
        --limit 1000 \
        --sort-by timeFirstSeen \
        --sort-order desc | jq '.data.items|map(select(."cve-id" != null))'
 
[
  {
    "approximate-application-count": 0,
    "approximate-deployed-application-count": 1,
    "approximate-java-server-instance-count": 1,
    "approximate-managed-instance-count": 1,
    "cve-id": "CVE-2021-20190",
    "cvss-score": 8.3,
    "fleet-id": "ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta",
    "library-key": "425505b8076ceac87cc479168829bd75d6a9b2a9e9a1546989b87622da59af39",
    "library-name": "jackson-databind",
    "library-version": "2.8.11.6",
    "time-end": "2025-06-16T16:14:44.233000+00:00",
    "time-first-seen": "2025-06-16T13:09:00+00:00",
    "time-last-cve-refreshed": "2025-06-15T00:00:00+00:00",
    "time-last-seen": "2025-06-16T13:09:00+00:00",
    "time-start": "2025-06-09T00:00:00+00:00"
  },
  {
    "approximate-application-count": 0,
    "approximate-deployed-application-count": 1,
    "approximate-java-server-instance-count": 1,
    "approximate-managed-instance-count": 1,
    "cve-id": "CVE-2021-36090",
    "cvss-score": 5.0,
    "fleet-id": "ocid1.jmsfleet.oc1.eu-frankfurt-1.amaaaaaaptiaquqa2qxxkco6hrguz7nyug2hcpgikhe5gz4d7uy6j6ilbtta",
    "library-key": "6cdd56d2278eec9e4c31a9c50567821a06695341957496956d5a9defcfd3dd10",
    "library-name": "commons-compress",
    "library-version": "1.20",
    "time-end": "2025-06-16T16:14:44.233000+00:00",
    "time-first-seen": "2025-06-16T13:09:00+00:00",
    "time-last-cve-refreshed": "2025-06-15T00:00:00+00:00",
    "time-last-seen": "2025-06-16T13:09:00+00:00",
    "time-start": "2025-06-09T00:00:00+00:00"
  }
]

前述の例では、アプリケーションがバージョン2.8.11.6のjackson-databindライブラリに依存していることがわかります。このライブラリは、CVE-2021-20190のために更新する必要があります。同様の結果は、脆弱性CVE-2021-36090が報告されたバージョン1.20の依存性commons-compressに関するものです。