午後問題 問3
問題文
N社は、Nサービスという継続的インテグレーションサービスを提供している従業員400名の事業者である。Nサービスの利用者(以下、Nサービス利用者という)は、バージョン管理システム(以下、VCSという)にコミットしたソースコードを自動的にコンパイルするなどの目的で、Nサービスを利用する。Nサービスでは、リポジトリという単位でソースコードを管理する。Nサービスの機能の概要を表1に示す。
表1 Nサービスの機能の概要(抜粋)
機能名
概要
ソースコード取得機能
リポジトリから最新のソースコードを取得する機能である。Nサービス利用者は、新たなリポジトリに対してNサービスの利用を開始するときに、そのリポジトリを管理するVCSのホスト名及びリポジトリ固有の認証用SSH鍵を登録する。ソースコードの取得は、VCSから新たなソースコードのコミットの通知をHTTPSで受け取ると開始される。
コマンド実行機能
ソースコード取得機能がリポジトリからソースコードを取得した後に、リポジトリのルートディレクトリにあるci.shという名称のシェルスクリプト(以下、ビルドスクリプトという)を実行する機能である。Nサービス利用者は、例えば、コンパイラのコマンドや、指定されたWebサーバにコンパイル済みのバイナリコードをアップロードするコマンドを、ビルドスクリプトに記述する。
シークレット機能
ビルドスクリプトを実行するシェルに設定される環境変数を、Nサービス利用者が登録する機能である。登録された情報はシークレットと呼ばれる。Nサービス利用者は、例えば、指定されたWebサーバに接続するために必要なAPIキーを登録することによって、ビルドスクリプト中にAPIキーを直接記載しないようにすることができる。
NサービスはC社のクラウド基盤で稼働している。Nサービスの構成要素の概要を表2に示す。
表2 Nサービスの構成要素の概要(抜粋)
Nサービスの構成要素
概要
フロントエンド
VCSから新たなソースコードのコミットの通知を受け取るためのAPIを備えたWebサイトである。
ユーザーデータベース
各Nサービス利用者が登録したVCSのホスト名、各リポジトリ固有の認証用SSH鍵、及びシークレットを保存する。読み書きはフロントエンドからだけに許可されている。
バックエンド
Linuxをインストールしており、ソースコード取得機能及びコマンド実行機能を 提供する常駐プログラム(以下、CIデーモンという)が稼働する。インターネットへの通信が可能である。バックエンドは50台ある。
仮想ネットワーク
フロントエンド、ユーザーデータベース及びバックエンド1〜50を互いに接続する。
フロントエンドは、ソースコードのコミットの通知を受け取ると図1の処理を行う。
- 通知を基にNサービス利用者とリポジトリを特定し、そのNサービス利用者が登録したVCSのホスト名、各リポジトリ固有の認証用SSH鍵、及びシークレットをユーザーデータベースから取得する。
- バックエンドを一つ選択する。
- 2.で選択したバックエンドのCIデーモンに1.で取得した情報を送信し、処理命令を出す。
図1 フロントエンドが行う処理
CIデーモンは、処理命令を受け取ると、特権を付与せずに新しいコンテナを起動し、当該コンテナ内でソースコード取得機能とコマンド実行機能を順に実行する。ビルドスクリプトには、利用者が任意のコマンドを記述できるので、不正なコマンドを記述してしまうおそれがある。さらに、不正なコマンドの処理の中には、①コンテナによる仮想化の脆弱性を悪用しなくても成功してしまうものがある。そこで、バックエンドには管理者権限で稼働する監視ソフトウェア製品Xを導入している。製品Xは、バックエンド上のプロセスを監視し、プロセスが不正な処理を実行していると判断した場合は、当該プロセスを停止させる。
C社は、C社のクラウド基盤を管理するためのWebサイト(以下、クラウド管理サイトという)も提供している。N社では、クラウド管理サイト上で、クラウド管理サイトのアカウントの管理、Nサービスの構成要素の設定変更、バックエンドへの管理者権限でのアクセス、並びにクラウド管理サイトの認証ログの監視をしている。
〔N社のインシデントの発生と対応〕
1月4日11時、クラウド管理サイトの認証ログを監視していたセキュリティ部のHさんは、同日10時にオペレーション部のUさんのアカウントで国外のIPアドレスからクラウド管理サイトにログインがあったことに気付いた。 Uさんは、同日10時に電子メールでクラウド管理サイトからの通知だと書かれたURLを開き、ログインを試みたが一度失敗したと話している。Hさんがそのメールを確認したところ、URL中のドメイン名はクラウド管理サイトのドメイン名とは異なっており、Uさんがログインを試みたのは偽サイトだった。Hさんは、同日10時の国外IPアドレスからのログインは②攻撃者による不正ログインだったと判断した。
Hさんは、初動対応としてUさんのアカウントを一時停止した後、調査を開始した。調査の結果、③RFC 9162に規定された証明書発行ログ中のNサービスのドメインのサーバ証明書を検索したところ、正規のもののほかに、N社では利用実績のない認証局Rが発行したものを発見した。 バックエンドのうち1台では、管理者権限をもつ不審なプロセスYが稼働していた。プロセスYは特定のCDN事業者のIPアドレスに、HTTPSで多量のデータを送信していた。TLSのServer Name Indication (SNI) には著名なOSS配布サイトのドメイン名が指定されており、製品Xでは安全な通信だと判断されていた。しかし、HTTP Hostヘッダーでは別のドメイン名が指定されていた。このドメイン名は製品Xの脅威データベースに登録された要注意ドメインであった。プロセスYは、④監視ソフトウェアに検知されないようにSNIを偽装していたと考えられた。Hさんは、⑤プロセスYがシークレットを取得したおそれがあると考えた。
Hさんは調査結果を受けて、N社は同日、次の決定をした。
• 不正アクセスの概要とNサービスの一時停止をN社のWebサイトで公表する。
• 被害バックエンドでソースコード取得機能又はコマンド実行機能を利用した顧客に対して、ソースコード及びシークレットが第三者に漏えいしたおそれがあると通知する。
Hさんは図2に示す事後処理と対策を行うことにした。 - フロントエンド及び全てのバックエンドを再構築する。
- 認証局Rに対し、Nサービスのドメインのサーバ証明書が勝手に発行されていることを伝え、その失効を申請する。
- 偽サイトでログインを試みてしまっても、クラウド管理サイトに不正ログインされることのないよう、クラウド管理サイトにログインする際の認証を⑥WebAuthn (Web Authentication) を用いた認証に切り替える。
- Nサービスのドメインのサーバ証明書を発行できる認証局を限定するために、Nサービスのドメインの権威DNSサーバに、Nサービスのドメイン名に対応する a レコードを設定する。
〔N社の顧客での対応〕
Nサービスの顧客企業の一つに、従業員1,000名の資金決済事業者であるP社がある。P社は、決済用のアプリ(以下、Pアプリという)を提供しており、スマートフォンOS開発元のJ社が運営するアプリ配信サイトであるJストアを通じて、Pアプリの利用者に配布している。
Jストアへのアプリのアップデートには、J社の契約者を特定するための認証用APIキーと、Jストアにアップロードされる全てのアプリについてJ社が運営する認証局からのコードサイニング証明書の取得と、対応する著名鍵によるコード署名の付与を求めている。P社は、Nサービスのソースコード取得機能にPアプリのソースコードを保存しているVCSのホスト名とリポジトリの認証用SSH鍵を登録している。Nサービスのシークレット機能には、表3に示す情報を登録している。
表3 P社がNサービスのシークレット機能に登録している情報
シークレット名
値の説明
APP_SIGN_KEY
コード署名の付与に利用する著名鍵とコードサイニング証明書
STORE_API_KEY
Jストアにアプリをアップロードするための認証用APIキー
1月4日、P社運用部のKさんがN社からの通知を受信した。これにより、⑦ソースコード及びシークレットが漏えいしたおそれがあるとのことだった。Kさんは、Pアプリ利用者に被害が及ぶ攻撃が行われることを予想し、すぐに二つの対応を開始した。 Kさんは、一つ目の対応として、⑧漏えいしたおそれがあるので、STORE_API_KEYとして登録されていた認証用APIキーに必要な対応を行った。また、二つ目の対応として、APP_SIGN_KEYとして登録されていたコードサイニング証明書について認証局に失効を申請するとともに、新たな鍵ペアを生成し、コードサイニング証明書の発行申請及び受領を行った。鍵ペア生成時、⑨コード署名を付与する際にセキュリティ上の利点があるので、FIPS 140-2 Security Level 3の認証を受けたハードウェアセキュリティモジュール(HSM)を利用することにした。 その後、⑩Kさんの二つの対応によってPアプリ利用者に生じているかもしれない影響、及びそれを解消するためにPアプリ利用者がとるべき対応について告知した。
設問
設問1 本文中の下線①について、該当するのはどれか。解答群の中から全て選び、記号で答えよ。 解答群 ア CIデーモンのプロセスを中断させる。 イ いずれかのバックエンド上の全プロセスを列挙して攻撃者に送信する。 ウ インターネット上のWebサーバに不正アクセスを試みる。 エ 攻撃者サイトから命令を取得し、得られた命令を実行する。 オ ほかのNサービス利用者のビルドスクリプトの出力を取得する。
設問2 〔N社のインシデントの発生と対応〕について答えよ。 (1) 本文中の下線②について、攻撃者による不正ログインの方法を、50字以内で具体的に答えよ。 (2) 本文中の下線③について、RFC 9162で規定されている技術を、解答群の中から選び、記号で答えよ。 解答群 ア Certificate Transparency イ HTTP Public Key Pinning ウ HTTP Strict Transport Security エ Registration Authority (3) 本文中の下線④について、このような手法の名称を、解答群の中から選び、記号で答えよ。 解答群 ア DNSスプーフィング イ ドメインフロンティング ウ ドメイン名ハイジャック エ ランダムサブドメイン攻撃 (4) 本文中の下線⑤について、プロセスYがシークレットを取得するのに使った方法として考えられるものを、30字以内で答えよ。 (5) 図2中の下線⑥について、仮に、利用者が偽サイトでログインを試みてしまっても、攻撃者は不正ログインできない。不正ログインを防ぐWebAuthnの仕組みを、40字以内で答えよ。 (6) 図2中の a に入れる適切な字句を、解答群の中から選び、記号で答えよ。 解答群 ア CAA イ CNAME ウ DNSKEY エ NS オ SOA カ TXT
設問3 〔N社の顧客での対応〕について答えよ。 (1) 本文中の下線⑦について、Kさんが開始した対応を踏まえ、予想される攻撃を、40字以内で答えよ。 (2) 本文中の下線⑧について、必要な対応を、20字以内で答えよ。 (3) 本文中の下線⑨について、コード署名を付与する際にHSMを使うことによって得られるセキュリティ上の利点を、20字以内で答えよ。 (4) 本文中の下線⑩について、影響と対応を、それぞれ20字以内で答えよ。
解説
設問1 [試験センターによる解答例] ウ、エ <解説> 問題文にあるように、CIデーモンは特権を付与せずに新しいコンテナを起動し、そのコンテナ内でソースコード取得機能とコマンド実行機能を実行します。選択肢のうち、「ウ」と「エ」は、コンテナによる仮想化の脆弱性を悪用することなく、インターネットにアクセスできれば成功すると考えられます。一方、ア、イ、オの攻撃は特権を悪用するなど、コンテナの脆弱性を悪用する必要があります。
設問2 (1) [試験センターによる解答例] 偽サイトに入力されたTOTPを入手し、そのTOTPが有効な間にログインした。(38字) <解説> Uさんは偽サイトでログインを試み、一度失敗しています。このとき、攻撃者はUさんが偽サイトに入力したTOTP(ワンタイムパスワード)を入手し、そのTOTPが有効な期間内に正規のクラウド管理サイトへ不正ログインを成功させたと推測されます。
(2) [試験センターによる解答例] ア <解説> RFC 9162は、Certificate Transparency(証明書の透明性)に関する文書です。これは、認証局が発行したデジタル証明書のログを公開し、それを監視・検証することで、不正な証明書の発行や使用を防ぐことを目的としています。
(3) [試験センターによる解答例] イ <解説> これはドメインフロンティングと呼ばれる攻撃手法です。CDNを介して正規サイトとのTLS接続を確立した後、HTTPリクエストのHostヘッダに異なるFQDN(この場合はC&Cサーバなど)を指定することで、不正な通信を行います。TLSで通信が暗号化されているため、検知や遮断が困難です。
(4) [試験センターによる解答例] /procファイルシステムから環境変数を読み取った。(26字) <解説> シークレットは環境変数として登録されています。動作中のシステムの環境変数などの情報は、メモリ上に作成される仮想的なファイルシステムである/procディレクトリから参照可能です。プロセスYはここからシークレットを不正に取得したと考えられます。
(5) [試験センターによる解答例] 認証に用いる情報に含まれるオリジン及び署名をサーバが確認する仕組み(33字) <解説> WebAuthnでは、認証時にアクセス先のサーバの**オリジン(プロトコル、ドメイン名、ポート番号)**や署名の正当性が確認されます。そのため、利用者が偽サイトに誘導されたとしても、オリジンが異なるため認証は成立せず、攻撃者は認証情報を盗んで悪用することができません。
(6) [試験センターによる解答例] a:ア <解説> 不正なサーバ証明書の発行を防ぐために権威DNSサーバに設定するのは、CAA(Certification Authority Authorization)レコードです。CAAレコードには、デジタル証明書の発行を許可する認証局のコモンネーム(FQDN)を指定します。
設問3 (1) [試験センターによる解答例] 有効なコード署名が付与された偽のPアプリをJストアにアップロードする攻撃(36字) <解説> Jストアへのアプリのアップデートには、シークレットであるSTORE_API_KEYとAPP_SIGN_KEYが必要です。これらの情報が漏えいした場合、攻撃者がこれらを悪用して、偽のPアプリに有効なコード署名を付与し、正規のアプリとしてJストアにアップロードする攻撃が考えられます。
(2) [試験センターによる解答例] J社のWebサイトから削除する。(16字) <解説> 認証用APIキーであるSTORE_API_KEYは、J社が発行し、契約者のみがJ社のWebサイトから取得および削除できます。漏えいの恐れがあるため、Kさんが取るべき対応は、このキーをJ社のWebサイトから削除することです。
(3) [試験センターによる解答例] 秘密鍵が漏れないという利点(13字) <解説> HSM(ハードウェアセキュリティモジュール)は、暗号化やデジタル署名に用いる秘密鍵を安全に管理するためのハードウェアデバイスです。HSMを使用することで、コード署名に用いる秘密鍵の漏えいを防ぐことができます。
(4) [試験センターによる解答例] 影響:Pアプリを起動できない。(12字) 対応:Pアプリをアップデートする。(14字) <解説> Kさんが漏えいした可能性のあるコードサイニング証明書の失効を申請したため、Jストアのアプリは起動前の有効性検証に失敗し、利用者はPアプリを起動できなくなります。この問題を解消するため、利用者は新たに生成された秘密鍵で署名されたPアプリにアップデートする必要があります。