ネイティブ・イメージ検査ツール

ネイティブ・イメージEnterprise Editionには、GraalVMネイティブ・イメージによって作成された実行可能ファイルまたは共有ライブラリに含まれるメソッドをリストするツールが含まれています。このツールは、コマンド$JAVA_HOME/bin/native-image-inspect <path_to_binary>で使用できます。メソッドを次の形式のJSON配列としてリストします:

$JAVA_HOME/bin/native-image-inspect helloworld
{
  "methods": [
    {
      "declaringClass": "java.lang.Object",
      "name": "equals",
      "paramTypes": [
        "java.lang.Object"
      ]
    },
    {
      "declaringClass": "java.lang.Object",
      "name": "toString",
      "paramTypes": []
    },
    ...
  ]
}

ネイティブ・イメージ・ツールでは、デフォルトでネイティブ実行可能ファイルにメタデータが含まれており、検査ツールでは含まれるメソッドをリストできるようになります。

含まれるデータの量はイメージ全体のサイズと比較してかなり小さくなりますが、-H:-IncludeMethodsDataオプションを設定して、メタデータの発行を無効にできます。このオプションでコンパイルされたイメージは、ツールで検査できません。

ソフトウェア部品表(SBOM)

GraalVM Enterpriseネイティブ・イメージは、ビルド時にソフトウェア部品表(SBOM)を埋め込んで、既知のセキュリティの脆弱性の影響を受ける可能性のあるライブラリを検出できます。ネイティブ・イメージには、SBOMをネイティブ実行可能ファイルに埋め込むための--enable-sbomオプションが用意されています。

ノート: ソフトウェア部品表(SBOM)の埋込みは、GraalVM Enterpriseネイティブ・イメージで使用できます。現在、この機能は試験段階です。

CycloneDX形式がサポートされており、デフォルトです。CycloneDX SBOMをネイティブ実行可能ファイルに埋め込むには、--enable-sbomオプションをnative-imageコマンドに渡します。

この実装では、ネイティブ実行可能ファイルに含まれるクラスについて、外部ライブラリ・マニフェストで監視可能なすべてのバージョン情報をリカバリすることによってSBOMが構築されます。また、SBOMは、ネイティブ実行可能ファイル・サイズへの影響を抑えるために圧縮されます。このツールはWindowsではまだサポートされていませんが、Windowsユーザーは、この試験段階のオプションを使用してSBOMを埋め込むことができます。SBOMはgzip形式で格納され、エクスポートされたsbomシンボルはその開始アドレスを参照し、sbom_lengthシンボルはそのサイズを参照します。

圧縮されたSBOMを実行可能ファイルに埋め込んだツールでは、$JAVA_HOME/bin/native-image-inspect --sbom <path_to_binary>からアクセス可能なオプションの--sbomパラメータを使用して圧縮されたSBOMを抽出でき、SBOMを次の形式で出力します:

{
  "bomFormat": "CycloneDX",
  "specVersion": "1.4",
  "version": 1,
  "components": [
    {
      "type": "library",
      "group": "io.netty",
      "name": "netty-codec-http2",
      "version": "4.1.76.Final",
      "properties": [
        {
          "name": "syft:cpe23",
          "value": "cpe:2.3:a:codec:codec:4.1.76.Final:*:*:*:*:*:*:*"
        },
        {
          "name": "syft:cpe23",
          "value": "cpe:2.3:a:codec:netty-codec-http2:4.1.76.Final:*:*:*:*:*:*:*"
        },
        {
          "name": "syft:cpe23",
          "value": "cpe:2.3:a:codec:netty_codec_http2:4.1.76.Final:*:*:*:*:*:*:*"
        },
        ...
      ]
    },
    ...
  ],
  "serialNumber": "urn:uuid:51ec305f-616e-4139-a033-a094bb94a17c"
}

このツールは、実行可能ファイルと共有ライブラリの両方からSBOMを抽出できます。脆弱なライブラリをスキャンするには、脆弱性スキャナにSBOMを送信します。たとえば、一般的なAnchoreソフトウェア・サプライ・チェーン管理プラットフォームでは、grypeスキャナを無料で入手できます。SBOMで指定されたライブラリに、Anchoreのデータベースに記載されている既知の脆弱性があるかどうかを確認できます。この目的のために、コマンド$JAVA_HOME/bin/native-image-inspect --sbom <path_to_binary> | grypeを使用してツールの出力をgrypeスキャナに直接送り、脆弱なライブラリを確認できます。次のような出力が生成されます:

NAME                 INSTALLED      VULNERABILITY   SEVERITY
netty-codec-http2    4.1.76.Final   CVE-2022-24823  Medium

このレポートを使用して、実行可能ファイルで見つかった脆弱性依存関係を更新できます。

その他の情報