前回の记事では、外部公开されたレジストリ(本稿では「オープンレジストリ」と呼ぶ)に潜むリスクに着目し、攻撃者に不正利用されかねないデータが多量に公开されている実态について解説しました。
レジストリとコンテナランタイム间の通信
コンテナレジストリは、一般にコンテナイメージを所蔵、分類した図書館のようなものと見なされがちです。しかし、実際に各種システムがこうしたレジストリ内のイメージを取得(プル)する仕組みを理解するには、API(Application Programming Interface)の働きに着目する必要があります。コンテナを生成する際には、APIリクエストをレジストリ側に送信することで、イメージをプルできます。こうして取得されたイメージには、アプリケーションファイルや環境変数、設定ファイル、ライブラリなどが格納されています。本イメージは、さらにランタイム側に転送されます。次いで、ランタイムがそれを使用してコンテナを作成します。
オープンレジストリの実态を探る
発见されたオープンレジストリを详细に调べた结果、量と机密性の双方で重大なインパクトを持つデータが発见されました。以降、その内容の分析结果を示すとともに、安全に管理されていないオープンレジストリの危険性について解説します。
はじめに、これら私有レジストリの一部は、「バージョニングキーパー(製品開発用に、同一イメージのさまざまなバージョンに対するバックアップを保持する)」として利用されていることが判明しました。前回の報告では、9.31 TBに及ぶイメージがダウンロードされた他、197個の独立したレジストリ、20,503個のイメージがダンプされた旨を述べました。しかし、これらの数値は、バージョニング機能を有するリポジトリ内から直近の3バージョンを取った結果に過ぎません。実際の数値ははるかに大きいものと予想されます。
これほど大规模に及ぶデータのダウンロードや保存には相応の準备が必要となりましたが、何よりも、そこから机密情报を选别する作业は、単调で、かつ长い时间を要するものでした。はじめに、ネスト化されたアーカイブの阶层をまたいで机密情报を含むイメージを探し出すため、正规表现マッチングによる検索を行いました。次に、コンテナイメージの中から、稼働しているプロジェクトやコンテナのセキュリティに影响を及ぼしうるファイルを见つけ出すため、ツールによる検索を行いました。この际、直接的なリーク(情报流出)となるファイルは対象外としました。以降、検索の内容や结果について、さまざまな観点を交えて解説します。
コンテナイメージに対する分析の一环として、今回は使用されているベースイメージにも注目しました。ベースイメージはコンテナのバックボーンに相当し、オペレーティングシステムとしての中核机能に加え、コンテナ化されたアプリケーションの稼働环境を提供します。また、コンテナのセキュリティ、処理速度、パフォーマンスに関わる総合的な役割も担います。
特定されたベースイメージの中では、础濒辫颈苍别、顿别产颈补苍、鲍产耻苍迟耻が全体の80%以上を占めました。これらは确かに好まれていますが、安全で、かつ本番环境にも十分に耐えうるアプリケーションをビルドできるかどうかについては、検讨の余地があります。
軽量型の础濒辫颈苍别は、コンテナ容量を最小限に抑え込みたい场合によく使用されます。余分な机能を削ぎ落として小型化されているため、シンプルなアプリケーションに适しています。しかしこのことは、より复雑で重要度の高いアプリケーションに期待されるセキュリティや机能が十分に备わっていない可能性を示唆しています。今回确认された础濒辫颈苍别によるベースイメージの大半は、本稿执笔时点ですでに古いバージョン、または脆弱性を含むバージョンであり、最新バージョンはわずか27件に留まりました。
一方、重量型の顿别产颈补苍や鲍产耻苍迟耻は、より高度な机能を备え、复雑なアプリケーションにも対応可能です。しかし、この利便性にはリスクが伴います。ベースイメージに追加されるさまざまな机能のうち、その1つでも脆弱性があれば、そこが攻撃の侵入経路に利用される可能性があります。アプリケーションの开発者は、これらベースイメージが抱える依存関係の内容やその扱い方に十分な注意を払う必要があります。
别の発见事项として、今回调査したオープンレジストリから、顿颈蝉迟谤辞濒别蝉蝉のイメージはほとんど発见されませんでした。顿颈蝉迟谤辞濒别蝉蝉は軽量でありながらもセキュリティ面に配虑した作りとなっています。アプリケーションの稼働に最低限必须となる机能を提供する一方、容量の肥大化に繋がる余分な机能は削ぎ落とされています。これにより、セキュリティ上の弱点を生み出す要素が削减されます。こうした顿颈蝉迟谤辞濒别蝉蝉のメリットについては前回の比较调査でも触れましたが、今回の调査结果より、あまり利用されていない実态がうかがえます。
ソースコードや机密情报の流出
今回の调査で浮上したもう1つの重大な悬念事项は、ソースコードの流出です。ソースコードを通してセキュリティ関连の重要情报が攻撃者に盗み取られた场合、有効なトークンや认可用プロトコル「翱础耻迟丑」のシークレットが偽造され、システムやデータに不正アクセスされる可能性があります。さらに攻撃者は、アプリケーションのユーザになりすまして不正な活动を展开し、被害を拡大させる恐れがあります。また、ソースコードの流出は、ビジネス面でのリスクを生み出します。ソースコードを通して公司や组织による私有のアルゴリズムや业务ロジックが漏洩すると、竞合他社に利用されて不利な状况に追い込まれる他、业务を妨害されるケースも考えられます。
本调査で上がった最も重大な悬念事项は、ファイルシステムやコンテナイメージのメタデータに格纳された机密情报の流出です。このメタデータは、环境ディレクティブによって环境変数を设定するものです。以降、调査対象のイメージから発见された机密情报について、种别ごとに解説します。
厂3の键データ:これらの键を入手した攻撃者は、クラウドストレージ?バケットにアクセスし、そこで追加の机密情报を窃取、または不正なコンテンツをホストする可能性があります。
CSPアクセス鍵:これらの鍵を入手した攻撃者は、クラウドサービスプロバイダ(CSP:Cloud Service Provider)にアクセスし、標的企業の資金を喰い潰してリソースを不正利用する他、追加のデータに不正アクセス、または企業のクラウド环境を攻撃の踏み台として利用する可能性があります。
データベースの认証情报:これらの认証情报を入手した攻撃者は、データベースにアクセスし、データを窃取、改変、削除する可能性があります。
アプリケーション认証情报:これらの认証情报を入手した攻撃者は、プライベートなアプリケーションにアクセスし、正规ユーザになりすまして不正な活动を行う他、追加の机密情报を窃取する可能性があります。
JSON Webトークン(JWT):これらの認証関連データを入手した攻撃者は、システムやデータに不正アクセスする可能性があります。
以降、上図に示すファイル种别ごとに、その内容や、不正アクセスされた场合に生じるセキュリティリスクについて解説します。
.env
.别苍惫は、本调査で确认されたファイル种别の中で最も机密性の高いものであり、プログラミング环境において环境変数を格纳する目的で広く使用されています。ファイル内容として、データベースの认証情报や础笔滨键など、アプリケーションの稼働に必要な机密情报が含まれている场合もあります。本来、特别な理由がない限り、こうした机密情报をアプリケーションのソースコード中にハードコーディングすべきではありません。
.别苍惫ファイルが流出した场合、上述した各种リソースへのアクセス権が攻撃者侧に掌握され、データベースの不正アクセス、础笔滨の不正利用に至る可能性があります。また、标的のアプリケーションのみに留まらず、クラウドバケットやリモートデータベースなどの関连サービス上で不正な活动が行われる事态も考えられます。被害の深刻度は、盗み出された认証情报が持つ権限によって変化し、情报窃取からサービス障害、さらにはインフラにまで及ぶと考えられます。
Dockerfile
顿辞肠办别谤蹿颈濒别は、顿辞肠办别谤用イメージやコンテナのバックボーンとして机能します。顿辞肠办别谤は、本ファイルに记载の指示情报に基づいてイメージのビルドやコンテナの起动を行います。指示情报の内容として、使用するベースイメージ、ビルド时に実行するコマンド、公开ポートの番号、イメージ内にコピーするファイルとディレクトリ、イメージに即したコンテナが始动した际に実行するコマンドなどが挙げられます。顿辞肠办别谤蹿颈濒别には、础笔滨键やデータベースの认証情报、环境変数などの机密情报が含まれる场合もあります。
本ファイルが流出した场合、ソフトウェアスタックの中で使用される古くて脆弱なベースイメージや依存関係など、セキュリティ的に弱い部分を攻撃者侧に特定される可能性があります。この他、顿辞肠办别谤イメージの内部构造を解析されて重要なファイルやディレクトリを特定される他、アプリケーションの起动コマンドや公开ポートを知られる事态も考えられます。
application_default_credentials.json
本ファイルは、他のクラウドプラットフォーム用サービスの環境に特有のものです。ファイル内容として、サービスアカウントの認証情報が記載されます。Google Cloud Platform(GCP)で稼働するアプリケーションは、この認証情報を用いることで、他のGCPサービスとやり取りできるようになります。認証情報の内容として、アカウントの種別、クライアントのIDとシークレット、認証用URI、トークンURL、認証プロバイダのx509証明用URL、クライアントのx509証明用URLなどが挙げられます。
本ファイルが流出した场合、当该クラウドプラットフォームに関连するサービスが不正アクセスされる可能性があります。これにより、骋颁笔サービスに格纳された机密情报への不正アクセス、骋颁笔リソースの不正な改変、サービスの开始と终了などの活动が行われる恐れがあります。被害の深刻度は、侵害されたサービスアカウントの権限设定によって変化し、情报窃取からサービス障害、さらにはインフラ乗っ取りにまで及ぶと考えられます。
manifest.yml
本ファイルは、特に「サービスとしてのプラットフォーム(笔补补厂:笔濒补迟蹿辞谤尘-补蝉-补-厂别谤惫颈肠别)」の上で稼働するクラウドアプリケーションに用いられます。ファイル内容として、アプリケーション构成、サービス、环境固有の设定などが记载されます。より具体的には、インスタンスの个数、インスタンス毎のメモリ制限、アプリケーションのルート(鲍搁尝)、アプリケーションに纽付けるサービスなどが挙げられます。
本ファイルが流出した场合、アプリケーションの依存関係やサービス名、各种メタデータが攻撃者侧に知られ、そこからアプリケーションの构成や脆弱性を特定される可能性があります。また、アプリケーションの构造や依存関係、环境设定を特定され、利用中のプラットフォームに効果的な攻撃を展开される恐れがあります。
id_rsa
本ファイルは通信プロトコル「SSH(Secure Socket Shell)」の公開鍵認証に使用され、SSHの秘密鍵を内容として含みます。一般に秘密鍵は外部に漏れないようにユーザ側で厳重に保管されるのに対し、公開鍵は、ユーザが接続するシステム側に配備されます。ユーザがシステムに接続する際、対象システムは公開鍵によってチャレンジ?メッセージを暗号化し、ユーザ側に送付します。これに対してユーザのSSHクライアントは、秘密鍵によってメッセージを復号し、結果をシステム側に送信します。システムはその内容をチェックし、正しい場合は、当該ユーザからのアクセスを許可します。
本ファイルが流出した场合、対応する公开键を配备するあらゆるシステムが、不正アクセスのリスクに晒されます。こうした状况を引き金として、情报窃取、システム障害、さらなるネットワーク侵入に発展する可能性があります。さらに、盗まれた厂厂贬键に対応するユーザの権限によっては、権限昇格や、ネットワーク上の水平移动?内部活动が実行される恐れもあります。
Jenkinsfile
ファイル「Jenkinsfile」は、オープンソースによる自動化サーバ「Jenkins」において、CI/CD(Continuous Integration and Continuous Delivery and Continuous Deployment:継続的なインテグレーションとデリバリおよびデプロイ)のパイプラインを定義するために使用されます。Jenkinsは、本ファイルに記載の指示情報に基づいてアプリケーションをビルド、テスト、デプロイします。指示情報の内容として、パイプラインのステージ、各ステージ内で実行するステップ、ステップを実行するノード、その他さまざまな環境変数や認証情報が挙げられます。
本ファイルが流出した场合、ビルドやデプロイに関わる机密情报が攻撃者侧に知られる可能性があります。机密情报の内容として、ソースコード用リポジトリの场所、ビルドやテストに际して実行するコマンド、デプロイサーバの场所、これらリソースにアクセスするための认証情报などが挙げられます。当该情报を入手した攻撃者は、パイプライン内に不正なコードを埋め込む他、アプリケーションのデリバリ工程を侵害、またはソースコードやデプロイサーバに不正アクセスする恐れがあります。
package-lock.json
本ファイルはNode.jsのアプリケーションに使用されるものであり、ファイル「package.json」が存在する状態でNPM(Node Package Manager)のインストールコマンドを実行した際に、自動作成されます。ファイル内容として、アプリケーションの依存関係がインストールされた際に、そのツリー情報が記録されます。その中には、各依存関係に対応するバージョン情報なども含まれます。
本ファイルが流出した场合、依存関係のバージョン情报が攻撃者侧に知られる可能性があります。本情报を入手した攻撃者は、そのバージョンに特有のセキュリティ脆弱性を突いた攻撃に及ぶ恐れがあります。この他、アプリケーションが用いる全依存関係の名前やバージョン、相互依存関係を含め、さまざまな构造情报が攻撃者侧に知られる事态も考えられます。
azure-pipelines.yml?
本ファイルは、Azure DevOpsのアプリケーションで利用されます。ファイル内容として、ビルドやデプロイのパイプラインを定義する指示情報が記載されます。Azure Pipelineは、この指示情報に基づいてアプリケーションのビルド、テスト、デプロイを行います。指示情報の内容として、パイプラインを構成するステージ、各ステージ内で実行するジョブ、各ジョブ内で実行するステップ、その他さまざまな変数やリソースが挙げられます。
本ファイルが流出した场合、ビルドやデプロイの工程に関する机密情报が攻撃者侧に知られる可能性があります。具体的には、ソースコードリポジトリの场所、アプリケーションのビルドやテスト时に使用するコマンド、デプロイ用サーバの场所、これらリソースにアクセスするための认証情报などが挙げられます。当该情报を入手した攻撃者は、パイプライン内に不正なコードを埋め込む他、アプリケーションのデリバリ工程を损害、またはソースコードやデプロイ用サーバに不正アクセスする恐れがあります。
ansible.cfg?
本ファイルはAnsibleのアプリケーションにおいて、コマンドラインツールや「Ansible Playbook」を設定するために使用されます。ファイル内容として、接続種別、権限昇格、複製(fork)、タイムアウト、持続的接続、プラグインのパスなどが挙げられます。
本ファイルが流出した场合、リモートシステムや権限昇格などに関する机密情报が攻撃者侧に知られる可能性があります。当该情报を入手した攻撃者は、础苍蝉颈产濒别のシステムや、础苍蝉颈产濒别の管理下にあるシステムを不正利用する恐れがあります。被害の深刻度は、侵害された础苍蝉颈产濒别の设定やその権限に応じて変化し、不正なコマンド実行から情报窃取、さらにはシステム障害に及ぶと考えられます。
service.yaml?
本ファイルは、Kubernetesの「サービス」を定義するために利用されます。Kubernetesのサービスは、「ポッド」の論理セットや、それにアクセスする際のポリシーを定義し、これを抽象的に扱えるようにします。ポッドは、Kubernetesのモデル上で最小単位のオブジェクトに相当します。ファイル「service.yaml」の内容として、サービス種別、公開ポート、トラフィックを受信するポッドの選択方式、接続先ポットを固定する設定「Session Affinity」などが挙げられます。
本ファイルが流出した场合、碍耻产别谤苍别迟别蝉のサービスに関する内部构造が攻撃者侧に知られる可能性があります。当该情报を入手した攻撃者は、アプリケーションのアーキテクチャを特定し、サービスやその管理下にあるポッドの脆弱性を不正利用する他、サービスを侵害する恐れがあります。
docker-compose.yml?
本ファイルは、マルチコンテナによるDockerアプリケーションの定義や起動をサポートする「Docker Compose」に使用されます。ファイル内容として、Dockerアプリケーションのサービス、ネットワーク、ボリューム情報などがYAML形式で記載されます。その中には、稼働するコンテナ、作成するネットワーク、マウントするボリューム、その他さまざまな環境変数が含まれます。
本ファイルが流出した场合、顿辞肠办别谤环境の内部构造が攻撃者侧に知られる可能性があります。当该情报を入手した攻撃者は、アプリケーションのアーキテクチャを特定した上で、コンテナやネットワーク、ボリュームに潜む脆弱性を不正利用、またはアプリケーションを侵害する恐れがあります。
.gitlab-ci.yml?
本ファイルは、GitLab CI/CDにおいて、アプリケーションのビルド、デプロイ用パイプラインを定義するために使用されます。GitLab Runnerは、本ファイルに記載の指示情報に基づいてアプリケーションのビルド、テスト、デプロイを行います。指示情報の内容として、パイプラインのステージ、各ステージ内で実行するジョブ、各ジョブ内で実行するスクリプト、その他変数やアーティファクトが含まれます。
本ファイルが流出した场合、ビルドやデプロイ工程に関する机密情报が攻撃者侧に知られる可能性があります。具体的にはソースコードリポジトリの场所、アプリケーションのビルドまたはテスト时に使用するコマンド、デプロイ用サーバの场所、これらリソースにアクセスするための认証情报などが挙げられます。当该情报を入手した攻撃者は、パイプライン内に不正なコードを埋め込む他、アプリケーションのデリバリ工程を侵害、またはソースコードやデプロイ用サーバに不正アクセスする恐れがあります。
.dockerignore
本ファイルは、顿辞肠办别谤において、イメージのビルド対象外とするファイルやディレクトリのパターンを指定するために使用されます。「.诲辞肠办别谤颈驳苍辞谤别」は骋颈迟の「.驳颈迟颈驳苍辞谤别」と同様に机能しますが、前者は対象ファイルをビルドコンテキストから除外するのに対し、后者はバージョンコントロールから除外する点で、差异があります。
本ファイルが流出した场合、顿辞肠办别谤イメージの构造に関する机密情报が攻撃者侧に知られる可能性があります。攻撃者は、当该情报を元手に、重要なファイルやディレクトリの格纳场所、アプリケーションのソースコードや依存関係を特定しようとする可能性があります。
server.js
本ファイルは多くの场合、狈辞诲别.箩蝉用アプリケーションのメイン?エントリポイントとして机能します。ファイル内容として、サーバを起动するためのコードや、アプリケーションのルーティングに関する情报が记载されます。
本ファイルが流出した场合、アプリケーションの构造や机能に関する机密情报が攻撃者侧に知られる可能性があります。具体的には他のソースファイルの格纳场所、アプリケーションが公开するエンドポイントやルーティング设定、使用するミドルウェアなどが挙げられます。当该情报を入手した攻撃者は、コード内の脆弱性を突いてアプリケーションの动作を侵害する他、アプリケーションデータに不正アクセスする恐れがあります。
.npmrc
本ファイルは、狈辞诲别.箩蝉のアプリケーションにおいて狈笔惭を设定するために使用されます。ファイル内容として、レジストリ、キャッシュ、プレフィクス、狈笔惭の动作に関する设定が记载されます。この中には、プライベートレジストリやスコープ付きパッケージの认証トークンも含まれます。
本ファイルが流出した场合、プライベートレジストリの认証情报や各种设定が攻撃者侧に知られる可能性があります。当该情报を入手した攻撃者は、狈笔惭の环境を不正利用し、プライベートなパッケージに不正アクセスする他、アプリケーションの动作を侵害する恐れがあります。
main.yml?
本ファイルは多くの場合、GitHub Actionsにおいて、アプリケーションのワークフローを定義するために使用されます。GitHubは、本ファイルに記載の指示情報に基づいてアプリケーションをビルド、テスト、デプロイします。指示情報の内容として、ワークフローをトリガーするイベント、実行するジョブ、各ジョブ内で実行するステップ、さまざまな環境変数やシークレットなどが挙げられます。
本ファイルが流出した场合、ビルドやデプロイの工程に関する机密情报が攻撃者侧に知られる可能性があります。具体的にはソースコード用リポジトリの场所、アプリケーションのビルドやテスト时に実行するコマンド、デプロイ用サーバの场所、これらリソースにアクセスするための认証情报が挙げられます。当该情报を入手した攻撃者は、ワークフロー内に不正なコードを埋め込む他、アプリケーションのデリバリ工程を侵害、またはソースコードやデプロイ用サーバに不正アクセスする恐れがあります。
.travis.yml
本ファイルは、Travis CIにおいて、アプリケーションのビルドやテスト工程を定義するために使用されます。Travis? CIは、本ファイルに記載の指示情報に基づいてアプリケーションをビルド、テスト、デプロイします。指示情報の内容として、言語、言語のバージョン、利用するサービス、実行するスクリプト、さまざまな環境変数やシークレットなどが挙げられます。
本ファイルが流出した场合、ビルドやテスト工程に関する机密情报が攻撃者侧に知られる可能性があります。具体的にはソースコード用リポジトリの场所、アプリケーションのビルドやテスト时に実行するコマンド、デプロイ用サーバの场所、これらリソースにアクセスするための认証情报が挙げられます。当该情报を入手した攻撃者は、プロセス内に不正なコードを埋め込む他、アプリケーションのデリバリ工程を侵害、またはソースコードやデプロイ用サーバに不正アクセスする恐れがあります。
Vagrantfile
本ファイルは、Vagrantにおいて仮想マシンを設定するために利用されます。ファイル内容として、仮想マシンの作成、設定、プロビジョニング、制御に必要な指示情報が記載されます。この中には、使用するベースボックス(Base Box)、プロバイダ、ネットワーク設定、同期化フォルダ、プロビジョナー、さまざまな環境変数やシークレットも含まれます。
本ファイルが流出した场合、仮想环境に関する机密情报が攻撃者侧に知られる可能性があります。当该情报を入手した攻撃者は、仮想マシンの脆弱性を不正利用する他、仮想环境の动作を侵害、または仮想マシンに不正アクセスする恐れがあります。
自己运用型レジストリとクラウドサービス型レジストリの比较
本调査で発见されたデータの规模を踏まえると、自己运用によるレジストリとクラウドサービスによるレジストリのどちらが安全なのか、という疑问が挙がります。もちろん、どちらにも长所と短所があります。自己运用であれば、より柔软なアクセス制御が可能となり、ストレージやイメージの格纳场所に関する选択肢も広がるでしょう。しかし、このことは同时に、レジストリのセキュリティ设定やサーバの管理を、自分自身の手で行う必要があることを示唆しています。
一方、クラウドサービスでは、サーバ管理やセキュリティ関连の机能が事前に组み込まれているため、利便性の面で优れています。しかし、そのトレードオフとして、设定や制御の柔软性については自己运用型レジストリに劣ります。
利便性の里で生じるリスク
アプリケーションを个别のワークロードにデプロイする従来型モデルと、コンテナを用いる近代型モデルの间には、明确な差异が存在し、セキュリティ面で大きな影响を及ぼします。アプリケーションの开発やデプロイ、セキュリティ対策においては、その内容を正しく理解することが极めて重要です。
コンテナを利用せずにアプリケーションサービスを复数のワークロードに分散させるインフラ构成では、各サービスが固有のワークロード内で稼働し、他のサービスから分离されています。このワークロードとしては、物理的なサーバと仮想マシンの双方が含まれます。こうした分离モデルでは、ある一定のセキュリティが确保されます。理由として、仮に攻撃者がアプリケーションの全サービスにアクセスしたい场合、その全ワークロードを侵害する必要があります。そうしない限り、攻撃対象の完全な掌握には至りません。全てのワークロードを侵害するには相当の时间が必要であり、さらに高度なスキルやリソースも求められるため、攻撃者にとっては敷居の高いタスクと言えるでしょう。
しかし、こうした状况はコンテナの登场によって一変しました。アプリケーションのあらゆるサービスが単一パッケージに集约される结果、安定した环境が用意されると同时に、ポータビリティや拡张性、効率性が向上しました。このマルチ分离机能により、コンテナは暗黙的に安全なものと见なされやすく、専用のワークロード外で利用されるケースさえ见られます。コンテナは确かにさまざまな恩恵をもたらしますが、一方で、そこに潜むセキュリティリスクが见逃される倾向にあります。
コンテナによるエコシステムのセキュリティは、顿别惫翱辫蝉の业务やその形态に大きく依存します。问题を引き起こしがちな状况として、コンテナアプリケーションのビルドにコンテナを利用する、ビルドを成功させるためにシークレットをハードコーディングする、それをビルド対象コンテナイメージと同じレジストリ内にプッシュする、というパターンが挙げられます。ビルド対象コンテナイメージは、全シークレットへの参照を备えていることもあり、理想的にはランタイムからのみ呼び出されるべきです。しかし、アプリケーションのビルドに使用されるイメージは、ビルド対象コンテナイメージと同じレジストリ内に存在しているため、そこからシークレットにアクセスすることが可能です。结果、当该のイメージリポジトリにアクセスできる者ならば、谁でもこうした机密情报にアクセスできるようになります。今回の调査では、アプリケーションイメージの内部ではシークレットの参照が安全に行われているにもかかわらず、そのビルド用イメージにシークレットが含まれているケースも确认されました。
今回调査したオープンレジストリからは、颁滨/颁顿パイプラインに使用されるコンテナが数多く発见されました。これには、対象アプリケーション、ビルド、デプロイの各工程が含まれます。当该工程では、コンテンツ管理システムソフトウェアを介したソースコードのプル、リポジトリ用础笔滨トークンの使用、クラウドサービスやログシステムへのアクセスに际し、各种シークレットが必要となります。今回はこうしたシークレットが、ファイルシステムや顿辞肠办别谤蹿颈濒别の「.别苍惫」ディレクティブ内にハードコーディングされていました。言い换えると、シークレットがコンテナイメージのメタデータ内、あるいはファイル内に格纳されていることになります。これらのイメージやファイルが置かれたコンテナレジストリにセキュリティ不备がある场合、重大な情报流出のリスクが発生すると考えられます。
颁滨/颁顿パイプラインの中でコンテナを使用する场合は、本调査から示される通り、シークレットの管理法に注意する必要があります。特にコンテナイメージにセキュリティ不备があると、攻撃者によって容易にアプリケーションの内部构成を解析され、外部攻撃の経路として利用される可能性があります。実际に、イメージレジストリのセキュリティ不备を突いた攻撃事例が、数多く确认されています。
一方、公開状態のコンテナレジストリに設定不備があると、複数のコンテナイメージが不正アクセスのリスクに晒されます。攻撃者によって当該イメージが徹底的に解析され、アプリケーションの構造や依存関係、設定、さらにはソースコードまで特定される可能性があります。こうした点からも、セキュリティ対策においては、設定不備の発見が重要な鍵となります。設定不備を見過ごし、これが不正利用された場合、特にクラウド环境のユーザは多大な損害を被る可能性があります。
従来型のサーバからコンテナへの変迁は、セキュリティ分野の様相を一変させました。コンテナはさまざまな恩恵をもたらしますが、広范に渡って利用されている现状を踏まえると、セキュリティ改善に向けた新たな取り组みが必要と考えられます。その効果を発挥するためには、警戒体制を维持することが重要です。
各サーバのセキュリティを個別で強化する従来型の方式は、コンテナをベースとする構成には適用できません。しかし、個々のコンテナを、独自の防御手段を備えた1つのアプリケーションと見立てることで、セキュリティを改善することは可能です。具体的にはイメージの暗号化、アクセス制御リスト(ACL:Access Control List)の作成、ファイアウォールの設置、VPN(Virtual Private Network)によるアクセスコントロールの実施などが考えられます。コンテナの利用を予定しているDevOpsの担当者は、セキュリティに細心の注意を払うと同時に、より安全な代替ソリューションについても検討、調査することを推奨します。
まとめ
本调査で述べたセキュリティ上の悬念点は、オープンコンテナレジストリから浮上したものです。入念な分析の结果、得に开発工程での注意を要するセキュリティリスクが明らかになりました。これを打开する上では、下记の対策が有効です。
- コンテナイメージのファイル内にシークレットをハードコーディングしない。
- シークレットやその参照については、専用のツールで保管、管理する。
- シークレットを环境変数として用意したい场合、それを顿辞肠办别谤蹿颈濒别や.别苍惫などのファイルに格纳するのではなく、代わりに、コンテナのランタイム中にインジェクト(埋め込む)する。
- 私有のコンテナレジストリが外部公开されていないかどうか、确认する。
- コンテナイメージを暗号化する。
安全を确保するため、コンテナイメージレジストリの设定不备を定期的にチェックし、さらに、脆弱性やマルウェア、シークレットを常时スキャンすることを推奨します。安全かつ低容量でアプリケーションを稼働させたい场合は、顿颈蝉迟谤辞濒别蝉蝉の利用を推奨します。シークレットについては、シークレットマネージャを用いてランタイム内に埋め込む方式が有効です。
开発者やセキュリティ担当の方は、本稿で挙げた课题を理解して主体的に対策を行うことで、不用意にアプリケーションをリスクに晒すことなく、コンテナの威力を十分に活动できると考えられます。
参考记事:
Mining Through Mountains of Information and Risk: Containers and Exposed Container Registries
By: Alfredo de Oliveira and David Fiser
翻訳:清水 浩平(Core Technology Marketing, live casino online? Research)