
公開OCIイメージ(Dockerイメージ)セキュリティチェッカー
PISC(Public OCI-Image または Docker-Image Security Checker)は、OCIコンテナイメージのセキュリティを評価するコマンドラインツールです。
以下の条件のいずれかに該当する場合、終了コード 1 で終了します。
プライベート環境で実行する前や CI/CD パイプラインでベースイメージとして使用する前に、公開 OCI イメージのセキュリティを自動チェックするために使用できます。
virustotal 用のAPIキーを取得します。標準の無料エンドユーザーアカウントには制限があります。
docker run kapistka/pisc:latest /bin/bash ./scan.sh -delm --virustotal-key <virustotal-api-key> -i r0binak/mtkpi:v1.5
docker run kapistka/pisc:latest-feeds /bin/bash ./scan.sh -delm --offline-feeds --virustotal-key <virustotal-api-key> -i r0binak/mtkpi:v1.5
依存関係の一覧については Dockerfile を参照してください。使用するディストリビューションに応じて、trivy、grype、skopeo、jq、およびその他のパッケージをインストールする必要があります。
Usage:
scan.sh [flags] [-i IMAGE | -f FILE | --tar TARFILE]
Flags:
-d, --date イメージの経過日数をチェック(デフォルト: 365日)。
--d-days <int> ビルド日チェックのカスタム閾値(日数)。例: '--d-days 180'
-e, --exploits 既知のエクスプロイトがある脆弱性をチェック(Trivy + Grype + inthewild.io + empiricalsecurity.com を使用)。
--epss-and エクスプロイトの有無と EPSS スコアの組み合わせに AND ロジックを使用。無効の場合は OR ロジック(デフォルト: OR)。
--epss-min <float> 脆弱性フィルタリングに使用する EPSS スコアの最小閾値(デフォルト: 0.5)。
-f, --file <string> ファイルからイメージを一括スキャン。例: '-f images.txt'
-h, --help このヘルプメッセージを表示。
--ignore-errors 外部ツールのエラーを無視して実行を継続。
-i, --image <string> スキャンする単一のイメージ。例: '-i r0binak/mtkpi:v1.4'
-l, --latest バージョン指定なしタグ(例: ':latest')を検出。
-m, --misconfig 危険なビルド設定ミスをスキャン。
--offline-feeds 事前ダウンロードした脆弱性フィードを含む自己完結型オフラインイメージを使用(例: :latest-feeds)。
--scanner [trivy|grype|all] 使用するスキャナーを選択: Trivy、Grype、または両方(デフォルト: all)
--severity-min <string> 脆弱性の最小重要度 [UNKNOWN|LOW|MEDIUM|HIGH|CRITICAL] デフォルト [HIGH]
--show-exploits エクスプロイトの詳細を表示
--tar <string> イメージレイヤーのローカル TAR アーカイブをスキャン。例: '--tar /path/to/private-image.tar'
--trivy-server <string> Trivy サーバーのエンドポイント URL。例: '--trivy-server http://trivy.something.io:8080'
--trivy-token <string> Trivy サーバー認証トークン。例: '--trivy-token 0123456789abZ'
-v, --version バージョンを表示。
--virustotal-key <string> VirusTotal のマルウェアスキャン用 API キー。例: '--virustotal-key 0123456789abcdef'
--vulners-key <string> Vulners.com の API キー(inthewild.io の代替)。例: '--vulners-key 0123456789ABCDXYZ'
追加メモ:
- レジストリ認証については 'scan-download-unpack.sh#L14' を参照。
- 特定の CVE などの除外設定については 'check-exclusion.sh#L5' を参照。
このユーティリティは CI パイプラインに統合して、コンテナイメージをプライベートレジストリにプッシュする前にセキュリティスキャンを実行できます。このステップをイメージ署名と自動レジストリプッシュと組み合わせることで、セキュアな DevSecOps ワークフローを実現できます。以下は設定例です:
security_scan:
stage: security
image: $SECURITY_IMAGE_FEEDS
script:
- |
/bin/bash /home/nonroot/scan.sh -delm --offline-feeds --virustotal-key $VIRUSTOTAL_API_KEY -f ${NEW_IMAGES_FILE}
# 自動承認: スキャンが失敗した場合(終了コード > 0)、このポイントに到達する前にパイプラインは停止します。
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
# CVE-2024-3094 (XZ Utils) エクスプロイト
./scan.sh --virustotal-key <virustotal-api-key> -i r0binak/xzk8s:v1.1
════════════════════════════════════════
🍄 r0binak/xzk8s:v1.1 >>> virustotal が悪意のあるファイルを検出
layer:0f28dfeb
https://www.virustotal.com/gui/file/0f28dfebbf3451ccfe3d5b11d17bc38cc8d1c4e721b842969466dc7989d835e3
https://www.virustotal.com/gui/file/dc24581c3500b9640e03c7a4c14cd7c22f88c533b831a7f6a49aaf3ba39fcde4
layer:230cc513
https://www.virustotal.com/gui/file/230cc513debf36c5294ba6dd2babd27934bb231362cd8d916ea1c58e9495d38f
https://www.virustotal.com/gui/file/935cfccfa8d31d0e03f2162e9b46b7f9df77db64efa2e4cfb4dbaebdf94be6d3
root/liblzma.so.5.6.0.patch 37/64 🐴 trojan.xzbackdoor/cve20243094
# 脆弱性: trivy + grype + epss + exploits (IngressNightmare)
./scan.sh -e -i registry.k8s.io/ingress-nginx/controller:v1.11.2
════════════════════════════════════════════════
🐞 registry.k8s.io/ingress-nginx/controller:v1.11.2 >>> 悪用可能な脆弱性を検出
CVE SEVERITY SCORE EPSS EXPL FIX PACKAGE
CVE-2025-1974 CRITICAL 9.8 0.87 0 + k8s.io/ingress-nginx
📆 registry.k8s.io/ingress-nginx/controller:v1.11.2 >>> 作成日: 2024-08-15. 最終更新: 2025-06-04
💡 registry.k8s.io/ingress-nginx/controller:v1.11.2 >>> より新しいタグを使用:
v1.11.3 v1.11.4 v1.11.5 v1.11.6 v1.11.7
v1.12.0 v1.12.0-beta.0 v1.12.1 v1.12.2 v1.12.3
# 危険なイメージビルド設定ミス cve-2024-21626
./scan.sh -m -i r0binak/cve-2024-21626:v4
════════════════════════════════════════
🐳 r0binak/cve-2024-21626:v4 >>> 危険な設定ミスを検出
CVE-2024-21626 runC Escape
https://nitroc.org/en/posts/cve-2024-21626-illustrated/