ソフトウェアのリリース サイクルを高速化するために、ソフトウェア開発における成果物のセキュリティと整合性の確保は、これまで以上に重要になっています。アプリケーションのビルド、テスト、デプロイは継続的に行われるため、ソース コードからコンテナー イメージまで、ソフトウェア パイプラインのすべての要素が信頼でき、検証可能である必要があります。
それら要素の信頼を維持するための重要な側面として、イメージの整合性の保護と検証があります。この重要なプロセスにより、承認済みで改ざんされていないイメージのみをデプロイし、悪意のある変更から本番環境を守ります。
JFrog Runtime は、強力なイメージ整合性保護メカニズムを備え、エンドツーエンドのリリース プロセスを保護しながら、自信を持ってソフトウェア開発における成果物を管理できるようにします。このブログ記事では、イメージ整合性検証が SDLC にとって重要である理由と、JFrog Runtime がどのようにリリース プロセスのセキュリティを強化するかについて説明します。
イメージの完全性検証が重要な理由
現代のソフトウェア開発では、コンテナー化したアプリケーションの継続的な統合とデプロイによって、新たな複雑さとセキュリティ上の課題が生じています。アプリケーション コードとその依存関係をパッケージ化したコンテナー イメージは、パイプラインの複数の段階を通過します。これらは複数のチームによるビルドやさまざまなレジストリへの保存、最終的な運用環境全体へのデプロイを含みます。適切な検証が行われないと、これらのイメージは改ざんや偶発的な破損、または悪意のある変更の影響を受けやすくなります。そして、重大なセキュリティ インシデント (不正アクセスやデータ侵害、インフラストラクチャ障害など) につながる可能性のある、侵害されたソフトウェアをデプロイするリスクが高まります。
イメージの整合性検証により本番環境で使用されるイメージが、承認されたイメージとまったく同じであることを保証します。変更されたイメージや古いイメージのデプロイの防止で、不正な変更や脆弱性の導入を防ぎます。SDLC に明確なデータ リネージ(データ履歴の可視化)を取り入れると、コンテナー イメージのバージョン管理や更新プロセスが一層強化されます。開発からデプロイまでのコンテナー イメージの履歴を追跡することで、すべての変更、バージョン、更新を完全に把握し、整合性の問題が発生した場合には、その原因を正確に突き止めるための明確な監査証跡を提供します。
JFrog Runtime は、データ リネージ (データ履歴の可視化) とイメージの整合性を継続的に検証し、無承認の変更が本番環境に反映されないようにします。実行中のコンテナーをリアルタイムで監視し、デプロイされたインスタンスとリポジトリにあるイメージ間の不一致を検出します。この機能により、問題を即座に特定して対処できるようになり、ソフトウェア環境のセキュリティと回復力を維持できます。
コンテナー イメージの整合性に影響を与えるセキュリティ環境
コンテナー化した環境、特に Kubernetes デプロイメントにおいては、いくつかのセキュリティ上の問題によりコンテナー イメージの整合性を損なう可能性があります。脅威の状況は複雑で、外部からの攻撃者だけでなく、内部での不注意な行動もリスクとなります。攻撃者は、サプライ チェーンの脆弱性や侵害されたレジストリ、ローカル キャッシュを悪用して、本番環境に悪意のあるコードや無承認の変更を反映することができます。
主な潜在的なセキュリティ上の脅威には次のようなものがあります。
- 中間者 (MITM) 攻撃 – 特に危険な攻撃ベクトルは、攻撃者がレジストリと環境間のイメージ転送を傍受し、正当なイメージの代わりに悪意のあるイメージを挿入する攻撃手法です。
- レジストリのなりすまし – 攻撃者がプライベート レジストリにアクセスしたり、パブリック レジストリを偽装したりして、Kubernetes を騙し侵害されたイメージを取得しようする攻撃手法です。
- キャッシュ ポイズニング – 悪意のあるイメージをローカル キャッシュに挿入すると、Kubernetes が正しいレジストリのイメージではなく、欠陥のあるイメージをデプロイする可能性があります。この場合、タグやメタデータが正しいのイメージと一致しているため、通常の検知システムでは見破れず、システム管理者が問題に気づかないまま実行されてしまいます。
- 内部エラーまたは誤った構成 – 多くの場合、内部エラーや誤った構成は、信頼できないレジストリや古いソースのイメージのデプロイにつながり、意図したものとは異なるイメージでデプロイするリスクが高まります。これらの問題は頻繁に発生し、ほとんどの場合レジストリ構成の誤り、手動介入、または更新の見落としが原因になっています。実際、最近の調査によると、セキュリティ専門家の 28% が、誤った構成はコンテナー環境における最大のセキュリティ リスクと見なしています。
- タグの移動 – :latest、:stable、:prod などのタグは、整合性の問題に対して特に脆弱です。これらのタグは、基盤となるイメージが新しいバージョンに更新されても変更されません。これにより、さまざまな問題が発生する可能性があります。Kubernetes 環境では、システムが明示的な承認なしに最新のイメージをプルすると、承認していない自動更新を行ってしまうことがあります。逆に、自動更新を回避するようにシステムが構成されている場合は、実際に使用されているイメージが明確に把握できないため、整合性違反が発生する可能性があります。
これらのリスクを軽減するには、信頼できる検証済みのイメージのみを本番環境に導入し、実行するよう、継続的な検証と監視が不可欠です。
コンテナー イメージの整合性の確保
コンテナー イメージの整合性は、イメージ ソースの信頼性確認とイメージ バイナリの整合性検証の 2 つの重要な要素に依存します。
JFrog Runtime は、信頼できないレジストリからデプロイされたイメージに関するリアルタイムの分析情報を提供します。イメージが信頼できないソースからデプロイされた場合、JFrog プラットフォーム内の対応するインジケーターでフラグを立てられます。これにより、イメージが信頼できるレジストリからデプロイされていることを確認する、などの修正措置を講じることができます。
JFrog Artifactory イメージ レジストリからすべての本番イメージをデプロイすると、すべてのイメージが組織のセキュリティ チェックとポリシーに従っているのを確認できます。ソース レジストリが信頼できることを確認した後、JFrog Runtime は実行中のコンテナー イメージと元のイメージのバイナリの違いをチェックします。整合性の問題を示すイメージにはフラグが立つため、これらの問題を迅速に検出、対処し、正しいイメージが実行されていることを確認できます。
JFrog Runtime のリアルタイム監視は、セキュリティを強化するだけでなく、整合性違反の平均修復時間 (MTTR) を大幅に短縮します。実行中のコンテナーと承認済みイメージの不一致を迅速に特定して即時に修正措置を行い、不正な変更に迅速に対処できます。実行時に提供されるこれらのリアルタイム インジケーターにより、修復時間を大幅に短縮し、セキュリティや構成に関する問題への対応が迅速化されます。
JFrog Runtime と JFrog Artifactory を備える JFrog Platform は、ランタイム環境をイメージ レジストリに直接リンクすることで、リスクの特定と修復作業を効率化します。この統合により、イメージの整合性の問題をリアルタイムで検出できるため、システムを切り替える必要がなくなります。Artifactory で問題のあるイメージのソースと所有者を簡単に追跡できるため、特定と修復のプロセスが迅速化されます。
このシームレスな統合により、セキュリティの強化や運用効率が向上し、イメージ管理とリスク修復に対するエンドツーエンドの可視性と制御を実現します。
イメージ整合性違反の軽減 ~ 実際の例
JFrog Runtime でイメージの整合性を保護する方法を、実際の例で見ていきましょう。
Runtime のライブ評価画面を調べると、Runtime で実行されているイメージのリストが表示されます。リストはリスクの重大度順に並べられ、最もリスクの高いイメージが一番上に表示されます。
このシナリオでは、green-burrito イメージに整合性違反リスクのフラグが立っており、環境で実行されているイメージが JFrog Artifactory レジストリに保存されているイメージと異なることを示しています。
整合性違反は、悪意のある攻撃によって発生する場合もありますが、開発者の見落としや誤った構成、開発プロセス中のミスなど、内部要因によって発生する場合がほとんどです。
この場合の整合性違反は、:latest タグの使用が原因で発生しました。このタグは一貫性を保証しないため信頼性が低く、実行中のイメージとレジストリ内の期待されるバージョンとの間に矛盾が生じることがよくあります。この例では、新しいバージョンが :latest タグで Artifactory にプッシュされましたが、実行中のワークロードは更新できず、古いイメージを引き続き使用しています。
ワークロード構成を調べたところ、imagePullPolicy が IfNotPresent に設定されていることがわかりました。この設定は、ワークロードがイメージをローカルにまだ存在しない場合のみ、レジストリからプルすることを意味します。その結果、ワークロードは :latest タグで更新されたイメージを取得せず、古いバージョンを実行し続けたため、整合性違反が発生しました。
この整合性の問題を解決するために、ワークロード構成で imagePullPolicy を Always に更新し、デプロイを再起動しました。
imagePullPolicy: Always を設定すると、ワークロードが起動するたびに、レジストリから常に最新バージョンのイメージがプルされるようになり、古いイメージの実行が防止され、期待されるバージョンとの整合性が確保されます。ただし、この設定は必ずしも最適なアプローチとは限らず、承認されていない自動更新を許可するため、実際のシナリオでは慎重に評価する必要があります。
下記の更新されたライブ評価画面では、整合性違反が解決されたことが確認できます。green-burrito イメージは現在期待されたバージョンを実行しており、修復の有効性が実証されています。これは、ランタイム環境でイメージの一貫性を維持するために、固定タグと適切な imagePullPolicy 設定を使用する重要性を強調しています。
この例は、安全なランタイム環境を維持する上でイメージ整合性検証が果たす重要な役割を示しています。堅牢な検証プラクティスを実装し、一貫した構成の適用で、古いイメージや未承認のイメージをデプロイするリスクを最小限に抑え、信頼性が高く検証済みの成果物だけを本番環境で実行できます。
効率性を向上しつつ開発セキュリティを強化したい場合は、JFrog Platform の利用をおすすめします!本記事でご紹介した Runtime 機能は、JFrog Platform Enterprise X または Enterprise + のプランにカスタマイズで追加いただくことで、利用できます。Runtime 機能を含む JFrog Platform 体験版をご希望の場合は、エクセルソフトまでお問い合わせください。また、製品に関するご質問、デモのご要望を承っています。
記事参照: Mitigating Image Integrity Violations: A Real-World Example in Runtime Environments
世界の人気ソフトウェアを提供するエクセルソフトのメールニュース登録はこちらから。