ネイティブ・イメージ検査ツール
ネイティブ・イメージ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
このレポートを使用して、実行可能ファイルで見つかった脆弱性依存関係を更新できます。