情報処理安全確保支援士 2023年 秋期 午後 問03
継続的インテグレーションサービスのセキュリティに関する次の記述を読んで、設問に答えよ。
N社は、Nサービスという継続的インテグレーションサービスを提供している従業員400名の事業者である。Nサービスの利用者(以下、Nサービス利用者という)は、バージョン管理システム(以下、VCSという)にコミットしたソースコードを自動的にコンパイルするなどの目的で、Nサービスを利用する。VCSでは、リポジトリという単位でソースコードを管理する。Nサービスの機能の概要を表1に示す

NサービスはC社のクラウド基盤で稼働している。Nサービスの構成要素の概要を表2に示す。

フロントエンドは、ソースコードのコミットの通知を受け取ると図1の処理を行う。

CI デーモンは、処理命令を受け取ると、特権を付与せずに新しいコンテナを起動し、当該コンテナ内でソースコード取得機能とコマンド実行機能を順に実行する。
ビルドスクリプトには、利用者が任意のコマンドを記述できるので、不正なコマンドを記述されてしまうおそれがある。さらに、不正なコマンドの処理の中には、①コンテナによる仮想化の脆弱性を悪用しなくても成功してしまうものがある。そこで、バックエンドには管理者権限で稼働する監視ソフトウェア製品Xを導入している。製品Xは、バックエンド上のプロセスを監視し、プロセスが不正な処理を実行していると判断した場合は、当該プロセスを停止させる。
C社は、C社のクラウド基盤を管理するための Webサイト(以下、クラウド管理サイトという)も提供している。N 社では、クラウド管理サイト上で、クラウド管理サイトのアカウントの管理、N サービスの構成要素の設定変更、バックエンドへの管理者権限でのアクセス、並びにクラウド管理サイトの認証ログの監視をしている。N 社では、C社が提供するスマートフォン用アプリケーションソフトウェア(以下、スマートフォン用アプリケーションソフトウェアをアプリという)に表示される、時刻を用いたワンタイムパスワード(TOTP)を、クラウド管理サイトへのログイン時に入力するように設定している。
N社では、オペレーション部がクラウド管理サイト上でNサービスの構成要素の設定及び管理を担当し、セキュリティ部がクラウド管理サイトの認証ログの監視を担当している。
〔N社のインシデントの発生と対応〕
1月4日11時、クラウド管理サイトの認証ログを監視していたセキュリティ部のHさんは、同日10時にオペレーション部のUさんのアカウントで国外のIPアドレスからクラウド管理サイトにログインがあったことに気付いた。
HさんがUさんにヒアリングしたところ、Uさんは社内で同日10時にログインを試み、一度失敗したとのことであった。Uさんは、同日10時前に電子メール(以下、メールという)を受け取っていた。メールにはクラウド管理サイトからの通知だと書かれていた。Uさんはメール中のURLを開き、クラウド管理サイトだと思ってログインを試みていた。Hさんがそのメールを確認したところ、URL中のドメイン名はクラウド管理サイトのドメイン名とは異なっており、Uさんがログインを試みたのは偽サイトだった。Hさんは、同日10時の国外IPアドレスからのログインは②攻撃者による不正ログインだったと判断した。
Hさんは、初動対応としてクラウド管理サイトのUさんのアカウントを一時停止した後、調査を開始した。Uさんのアカウントの権限を確認したところ、フロントエンド及びバックエンドの管理者権限があったが、それ以外の権限はなかった。
まずフロントエンドを確認すると、Webサイトのドキュメントルートに“/.well-known/pki-validation/”ディレクトリが作成され、英数字が羅列された内容のファイルが作成されていた。そこで、③RFC9162に規定された証明書発行ログ中のNサービスのドメインのサーバ証明書を検索したところ、正規のもののほかに、N社では利用実績のない認証局Rが発行したものを発見した。
バックエンドのうち1台では、管理者権限をもつ不審なプロセス(以下、プロセスYという)が稼働していた(以下、プロセスYが稼働していたバックエンドを被害バックエンドという)。被害バックエンドのその時点のネットワーク通信状況を確認すると、プロセスYは特定のCDN事業者のIPアドレスに、HTTPSで多量のデータを送信していた。TLSのServer Name Indication(SNI)には、著名なOSS配布サイトのドメイン名が指定されており、製品Xでは、安全な通信だと判断されていた。
詳しく調査するために、TLS通信ライブラリの機能を用いて、それ以降に発生するプロセスYのTLS通信を復号したところ、HTTP Hostヘッダーでは別のドメイン名が指定されていた。このドメイン名は、製品Xの脅威データベースに登録された要注意ドメインであった。プロセスYは、④監視ソフトウェアに検知されないようにSNIを偽装していたと考えられた。TLS通信の内容には被害バックエンド上のソースコードが含まれていた。Hさんはクラウド管理サイトを操作して被害バックエンドを一時停止した。Hさんは、⑤プロセスYがシークレットを取得したおそれがあると考えた。
Hさんの調査結果を受けて、N社は同日、次を決定した。
・不正アクセスの概要とNサービスの一時停止をN社のWebサイトで公表する。
・被害バックエンドでソースコード取得機能又はコマンド実行機能を利用した顧客に対して、ソースコード及びシークレットが第三者に漏えいしたおそれがあると通知する。
Hさんは図2に示す事後処理と対策を行うことにした。

〔N社の顧客での対応〕
Nサービスの顧客企業の一つに、従業員1,000名の資金決済事業者であるP社がある。P社は、決済用のアプリ(以下、Pアプリという)を提供しており、スマートフォンOS開発元のJ社が運営するアプリ配信サイトであるJストアを通じて、Pアプリの利用者(以下、Pアプリ利用者という)に配布している。P社はNサービスを、最新バージョンのコンパイル及びJストアへのコンパイル済みアプリのアップロードのために利用している。P社には開発部及び運用部がある。
Jストアへのアプリのアップロードは、J社の契約者を特定するための認証用APIキーをHTTPヘッダーに付加し、JストアのREST APIを呼び出して行う。認証用APIキーはJ社が発行し、契約者だけがJ社のWebサイトから取得及び削除できる。また、Jストアは、アップロードされる全てのアプリについて、J社が運営する認証局からのコードサイニング証明書の取得と、対応する署名鍵によるコード署名の付与を求めている。Jストアのアプリを実行するスマートフォンOSは、各アプリを起動する前にコード署名の有効性を検証しており、検証に失敗したらアプリを起動しないようにしている。
P社は、Nサービスのソースコード取得機能に、Pアプリのソースコードを保存しているVCSのホスト名とリポジトリの認証用SSH鍵を登録している。Nサービスのシークレット機能には、表3に示す情報を登録している。

Pアプリのビルドスクリプトには、図3に示すコマンドが記述されている。

1月4日、P社運用部のKさんがN社からの通知を受した。それによると、ソースコード及びシークレットが漏えいしたおそれがあるとのことだった。Kさんは、⑦Pアプリ利用者に被害が及ぶ攻撃が行われることを予想し、すぐに二つの対応を開始した。
Kさんは、一つ目の対応として、⑧漏えいしたおそれがあるので、STORE_API_KEYとして登録されていた認証用APIキーに必要な対応を行った。また、二つ目の対応として、APP_SIGNKEYとして登録されていたコードサイニング証明について認証局に失効を申請するとともに、新たな鍵ペアを生成し、コードサイニング証明書の発行申請及び受領を行った。鍵ペア生成時、Nサービスが一時停止しており、鍵ペアの保存に代替手段が必要になった。FIPS 140-2 Security Level 3の認証を受けたハードウェアセキュリティモジュール(HSM)は、⑨コード署名を付与する際にセキュリティ上の利点があるので、それを利用することにした。さらに、二つの対応とは別に、リポジトリの認証用SSH鍵を無効化した。
その後、開発部と協力しながら、P社内のPCでソースコードをコンパイルし、生成されたバイナリコードに新たなコード署名を付与した。JストアへのPアプリのアップロード履歴を確認したが、異常はなかった。新規の認証用APIキーを取得し、暑名済みのバイナリコードをJストアにアップロードするとともに、⑩Kさんの二つの対応によってPアプリ利用者に生じているかもしれない影響、及びそれを解消するためにPアプリ利用者がとるべき対応について告知した。さらに、外部委託先であるN社に起因するインシデントとして関係当局に報告した。
設問1:
本文中の下線①について、該当するものはどれか。解答群の中から全て選び記号で答えよ。
解答群
ア:CIデーモンのプロセスを中断させる。
イ:いずれかのバックエンド上の全プロセスを列挙して攻撃者に送信する。
ウ:インターネット上のWebサーバに不正アクセスを試みる。
エ:攻撃者サイトから命令を取得し、得られた命令を実行する。
オ:ほかのNサービス利用者のビルドスクリプトの出力を取得する。
模範解答
ウ、エ
解説
解答の論理構成
- 問題文は、ビルドスクリプトに「利用者が任意のコマンドを記述できるので、不正なコマンドを記述されてしまうおそれがある。さらに、不正なコマンドの処理の中には、『①コンテナによる仮想化の脆弱性を悪用しなくても成功してしまうもの』がある」と述べています。
- バックエンドについて「インターネットへの通信が可能である」と明記されています。したがって、ビルドスクリプト内の単純なネットワーク系コマンドは、コンテナを脱出しなくても実行可能です。
- 解答群を検討すると
- ア「CIデーモンのプロセスを中断させる。」は、ホスト側プロセスを操作する必要があり、コンテナ境界を越える攻撃が前提なので該当しません。
- イ「いずれかのバックエンド上の全プロセスを列挙して攻撃者に送信する。」は、ホスト名前空間の全プロセス取得が必要であり、同様にコンテナ越えを要します。
- ウ「インターネット上のWebサーバに不正アクセスを試みる。」は、単に外部へ TCP/HTTP リクエストを送るだけでよく、コンテナ内でも容易に成立します。
- エ「攻撃者サイトから命令を取得し、得られた命令を実行する。」は、curl などで C&C(コマンド&コントロール)サーバと通信し、シェルで実行するだけで成立します。
- オ「ほかのNサービス利用者のビルドスクリプトの出力を取得する。」は、他コンテナや別のストレージ領域へのアクセスが必要で、通常はコンテナ隔離を突破しなければ不可能です。
- 以上より、コンテナの脆弱性を突かずとも成功するのは「ウ」「エ」となります。
誤りやすいポイント
- 「コンテナ内=完全隔離」と思い込み、ネットワーク経由の攻撃(外部Webへの不正アクセスやC&C通信)も不可能と誤判断しやすい。
- プロセス列挙や他ユーザのデータ取得は、同じホストに存在するため簡単だと誤解しがちだが、Linux 名前空間で分離されている点を見落としやすい。
- CIデーモン停止のような“ホスト側プロセス操作”には高い権限が必要であることを忘れがち。
FAQ
Q: コンテナ内からのネットワーク通信は制限できないのですか?
A: バックエンドにファイアウォールやeBPFフィルタを設定すれば発信先・プロトコルを制御できますが、問題文にはその対策が記載されていないため、本設問では“可能”と判断します。
A: バックエンドにファイアウォールやeBPFフィルタを設定すれば発信先・プロトコルを制御できますが、問題文にはその対策が記載されていないため、本設問では“可能”と判断します。
Q: 他ユーザのビルドスクリプト出力はログ領域を共有していれば読めるのでは?
A: CIシステムでは通常、コンテナごとにボリュームを分離します。共有領域が明示されていない以上、隔離されていると解釈するのが自然です。
A: CIシステムでは通常、コンテナごとにボリュームを分離します。共有領域が明示されていない以上、隔離されていると解釈するのが自然です。
Q: CIデーモンの停止はkillコマンドで実行できませんか?
A: kill は同じPID名前空間内のプロセスにしか届きません。CIデーモンはホスト側で動いており、コンテナは別名前空間のため信号が届きません。
A: kill は同じPID名前空間内のプロセスにしか届きません。CIデーモンはホスト側で動いており、コンテナは別名前空間のため信号が届きません。
関連キーワード: コンテナ隔離、名前空間、C&C通信、外部不正アクセス、ファイアウォール
設問2:〔N社のインシデントの発生と対応〕について答えよ。
(1)本文中の下線②について、攻撃者による不正ログインの方法を、50字以内で具体的に答えよ。
模範解答
偽サイトに入力されたTOTPを入手し、そのTOTPが有効な間にログインした。
解説
解答の論理構成
- 【問題文】では、クラウド管理サイトは「時刻を用いたワンタイムパスワード(TOTP)を、クラウド管理サイトへのログイン時に入力するように設定している」とあります。したがってログインには TOTP が必須です。
- Uさんは「メール中のURLを開き、クラウド管理サイトだと思ってログインを試みていた」ものの、「URL中のドメイン名はクラウド管理サイトのドメイン名とは異なって」いたため、入力先は偽サイトでした。
- 偽サイトに入力された情報は攻撃者が取得できます。TOTP は数十秒〜数分で失効しますが、取得直後であれば有効です。
- 認証ログには「国外のIPアドレスからクラウド管理サイトにログイン」が記録されており、Uさんは社内から失敗しているため、国外 IP は攻撃者であると分かります。
- 以上から、攻撃者は偽サイトで収集した U さんの TOTP(および ID/パスワード)を、失効前にクラウド管理サイトへ入力して不正ログインしたと推論できます。
誤りやすいポイント
- 「パスワードだけ盗まれた」と考えがちですが、TOTP 認証が設定されているため TOTP も同時に窃取されなければログインは成立しません。
- 不正ログインの手口を「リプレイ攻撃」「ブルートフォース」と誤記しやすいですが、本件はフィッシングによるリアルタイム窃取です。
- メール内 URL が正規ドメインと違う点を見落とし、「正規サイトが侵害された」と誤解すると因果関係の説明がずれます。
FAQ
Q: 攻撃者は TOTP が数十秒で変わることをどう回避したのですか?
A: ユーザが偽サイトに入力した直後にリアルタイムで取得し、まだ有効なうちにクラウド管理サイトへ即時転送したと考えられます。
A: ユーザが偽サイトに入力した直後にリアルタイムで取得し、まだ有効なうちにクラウド管理サイトへ即時転送したと考えられます。
Q: Uさんの失敗ログインは何を示していますか?
A: フィッシングサイトに入力したため正規サイト側では認証に失敗し、その後攻撃者が別 IP から成功しています。
A: フィッシングサイトに入力したため正規サイト側では認証に失敗し、その後攻撃者が別 IP から成功しています。
Q: 二要素認証なのになぜ破られたのですか?
A: 「知識要素+TOTP」という2要素が同時に偽サイトへ渡ったため、結果的に攻撃者も同じ2要素を得てしまいました。
A: 「知識要素+TOTP」という2要素が同時に偽サイトへ渡ったため、結果的に攻撃者も同じ2要素を得てしまいました。
関連キーワード: フィッシング、TOTP, ワンタイムパスワード、不正ログイン、ソーシャルエンジニアリング
設問2:〔N社のインシデントの発生と対応〕について答えよ。
(2)本文中の下線③について、RFC 9162で規定されている技術を、解答群の中から選び、記号で答えよ。
解答群
ア:Certificate Transparency
イ:HTTP Public Key Pinning
ウ:HTTP Strict Transport Security
エ:Registration Authority
模範解答
ア
解説
解答の論理構成
- 【問題文】には
― “③RFC9162に規定された証明書発行ログ中のNサービスのドメインのサーバ証明書を検索したところ、正規のもののほかに、N社では利用実績のない認証局Rが発行したものを発見した。”
とあります。 - “証明書発行ログ”という語は、公開鍵証明書の発行を誰でも監査できるようにする公開ログを指しています。
- 公開ログを用いて証明書の不正発行を監視・検証する仕組みは、Certificate Transparency(CT)であり、CT を標準化しているのが “③RFC9162” です。
- 解答群を見ると、CT に該当するのは “ア:Certificate Transparency” だけです。
- したがって、選択すべき記号は【ア】となります。
誤りやすいポイント
- “HTTP Strict Transport Security” や “HTTP Public Key Pinning” は HTTP ヘッダでブラウザの挙動を制御する技術であり、証明書発行ログとは無関係です。
- “Registration Authority” は認証局業務の一部を担う組織名で、これも公開ログの仕組みではありません。
- “証明書発行ログ”というキーワードを CT ではなく監査ログ全般と捉えてしまい、RA を選んでしまう誤答が散見されます。
FAQ
Q: RFC 9162 とは何を定義した RFC なのですか?
A: サーバ証明書を公開ログに記録し、監査可能にする “Certificate Transparency” のフレームワークと関連プロトコルを定義しています。
A: サーバ証明書を公開ログに記録し、監査可能にする “Certificate Transparency” のフレームワークと関連プロトコルを定義しています。
Q: Certificate Transparency を利用すると、どのようなインシデントを防げますか?
A: 第三者が勝手に取得したドメイン名の証明書を早期に検出できるため、フィッシングサイトや中間者攻撃などの被害を抑止・軽減できます。
A: 第三者が勝手に取得したドメイン名の証明書を早期に検出できるため、フィッシングサイトや中間者攻撃などの被害を抑止・軽減できます。
Q: HPKP が廃止方向になった理由は?
A: 運用を誤ると正規サイト自らを DoS 状態にしてしまうリスクが高く、証明書再発行でも復旧が難しいためです。代替として CT の監視と報告が推奨されています。
A: 運用を誤ると正規サイト自らを DoS 状態にしてしまうリスクが高く、証明書再発行でも復旧が難しいためです。代替として CT の監視と報告が推奨されています。
関連キーワード: Certificate Transparency, 公開鍵基盤、TLS, フィッシング対策
設問2:〔N社のインシデントの発生と対応〕について答えよ。
(3)本文中の下線④について、このような手法の名称を、解答群の中から選び、記号で答えよ。
解答群
ア:DNSスプーフィング
イ:ドメインフロンティング
ウ:ドメイン名ハイジャック
エ:ランダムサブドメイン攻撃
模範解答
イ
解説
解答の論理構成
- 攻撃の観測事実
- 「TLSのServer Name Indication(SNI)には、著名なOSS配布サイトのドメイン名が指定されており、製品Xでは、安全な通信だと判断されていた。」
- 「HTTP Hostヘッダーでは別のドメイン名が指定されていた。」
- 「プロセスYは、④監視ソフトウェアに検知されないようにSNIを偽装していたと考えられた。」
- 仕組みの整理
- TLS ハンドシェイク時に示す SNI と、その後の HTTP Host ヘッダーが「一致しない」という点が鍵です。
- 外部から見る検知システムは SNI のみを参照し、「著名なOSS配布サイト」への通信だと誤認します。
- 実際の HTTP リクエストは復号後に現れる Host ヘッダーで「要注意ドメイン」に向け送信されます。
- この手法の名称
- 一般に「SNI に正規ドメインを載せて検査を回避し、暗号化後の HTTP 層で別ドメインへアクセスする」手口は “Domain Fronting(ドメインフロンティング)” と呼ばれます。
- 解答選択
- 解答群で該当するのは「イ:ドメインフロンティング」であり、他の選択肢は SNI すり替えとは無関係または内容が異なります。
誤りやすいポイント
- 「DNSスプーフィング」は DNS 応答を偽装する攻撃であり、TLS/SNI の使い分けとは別物です。
- 「ドメイン名ハイジャック」は権威 DNS ゾーンを乗っ取る行為で、通信経路上の偽装ではありません。
- SNI と Host ヘッダーの役割を混同しがちです。SNI は TLS ハンドシェイク時に平文で送られる拡張情報、Host ヘッダーは暗号化後の HTTP 層で送信されます。
- 「ランダムサブドメイン攻撃」は DNS キャッシュポイズニング緩和策を回避するための大量クエリを指し、本設問とは関連しません。
FAQ
Q: ドメインフロンティングはなぜ検知を逃れやすいのですか?
A: ファイアウォールやプロキシが TLS ハンドシェイクの SNI のみを参照して通信許可を判断している場合、正規サービスのドメインが見えるためブロックされにくいからです。
A: ファイアウォールやプロキシが TLS ハンドシェイクの SNI のみを参照して通信許可を判断している場合、正規サービスのドメインが見えるためブロックされにくいからです。
Q: SNI を偽装すると証明書検証でエラーになりませんか?
A: フロントドメイン(SNI に書いたドメイン)用の証明書を持つ CDN やクラウドサービスを経由するとエラーになりません。バックエンドで Host ヘッダーを見て別ドメインへリクエストを転送できる仕組みを利用しています。
A: フロントドメイン(SNI に書いたドメイン)用の証明書を持つ CDN やクラウドサービスを経由するとエラーになりません。バックエンドで Host ヘッダーを見て別ドメインへリクエストを転送できる仕組みを利用しています。
Q: ドメインフロンティング対策はありますか?
A: CDN 側で Host ヘッダーと SNI の不一致を拒否する設定、ネットワーク監視で TLS 復号または SNI/ALPN 情報と宛先 IP の整合性を検証する方法などが有効です。
A: CDN 側で Host ヘッダーと SNI の不一致を拒否する設定、ネットワーク監視で TLS 復号または SNI/ALPN 情報と宛先 IP の整合性を検証する方法などが有効です。
関連キーワード: TLS, SNI, HTTPS, CDN, ホストヘッダー
設問2:〔N社のインシデントの発生と対応〕について答えよ。
(4)本文中の下線⑤について、プロセスYがシークレットを取得するのに使った方法として考えられるものを、35字以内で答えよ。
模範解答
/procファイルシステムから環境変数を読み取った。
解説
解答の論理構成
- 【問題文】では、ビルドスクリプト実行時に「シークレット機能」に登録された値が「ビルドスクリプトを実行するシェルに設定される環境変数」として渡されると説明されています。
- シークレットは本来コンテナ内のシェル環境変数にのみ存在しますが、【問題文】には「プロセスYは、被害バックエンド上のソースコードが含まれていた」だけでなく「管理者権限をもつ不審なプロセス」と明記されています。したがってプロセスYはホスト OS 上で root 権限を保持していると推測できます。
- Linux では任意プロセスの環境変数を /proc/
/environ から参照できます。root 権限であればコンテナ PID も見えるため、コンテナ内部のシェル PID を特定し、/proc 経由で環境変数(=シークレット)を閲覧可能です。 - 以上より、下線⑤「プロセスYがシークレットを取得した」方法は「/procファイルシステムから環境変数を読み取った」と導けます。
誤りやすいポイント
- 「コンテナ隔離=ホストからは完全に見えない」と思い込み、/proc を通じた情報漏えい経路を見落とす。
- シークレットが CI デーモン経由でファイルに書き出されると誤解し、ログや共有ボリュームを答えにしてしまう。
- 「特権を付与せずに新しいコンテナを起動」とあるためホスト側からの閲覧は不可能と早合点する。root プロセスがホストに存在する前提を確認し忘れる。
FAQ
Q: コンテナが非特権でも、ホストから環境変数を読めるのはなぜですか?
A: ホスト OS から見ればコンテナ内プロセスも通常の PID として管理されています。root 権限があれば /proc//environ にアクセスできるため、隔離を突破できます。
A: ホスト OS から見ればコンテナ内プロセスも通常の PID として管理されています。root 権限があれば /proc/
Q: docker exec のようにコンテナへ入らずに取得できるのですか?
A: はい。ホストから /proc を直接読めばコンテナに入る必要はありません。PID 名前空間を分離していてもホスト側では実 PID が可視です。
A: はい。ホストから /proc を直接読めばコンテナに入る必要はありません。PID 名前空間を分離していてもホスト側では実 PID が可視です。
Q: シークレット漏えい対策として取るべき追加策は?
A: ホスト OS での root 権限流出を防ぐ、シークレットをファイルではなく外部 KMS でオンデマンド取得する、コンテナ実行ユーザを独立 UID/GID マッピングで隔離する等が有効です。
A: ホスト OS での root 権限流出を防ぐ、シークレットをファイルではなく外部 KMS でオンデマンド取得する、コンテナ実行ユーザを独立 UID/GID マッピングで隔離する等が有効です。
関連キーワード: /proc, 環境変数、コンテナ隔離、シークレット、権限昇格
設問2:〔N社のインシデントの発生と対応〕について答えよ。
(5)図2中の下線⑥について、仮に、利用者が偽サイトでログインを試みてしまっても、攻撃者は不正ログインできない。不正ログインを防ぐWebAuthnの仕組みを40字以内で答えよ。
模範解答
認証に用いる情報に含まれるオリジン及び署名名をサーバが確認する仕組み
解説
解答の論理構成
- フィッシング被害の背景
- 問題文では、攻撃者が「偽サイト」で認証情報を詐取し、クラウド管理サイトへ「②攻撃者による不正ログイン」を成功させました。これは ID・パスワード+TOTP という従来の要素を“入力させて”盗む手口が有効だったためです。
- 対策として指定された技術
- 図2の対策③でなく④でもなく「⑥ WebAuthn(Web Authentication)を用いた認証」へ切替える方針が示されています。
- WebAuthn の特徴
- WebAuthn はブラウザが生成した公開鍵認証を用い、チャレンジに署名してサーバへ返します。
- 署名データには「オリジン(scheme+host+port)」と「Relying Party ID(=署名名)」が含まれ、サーバはこれが事前登録値と一致するか検証します。
- なぜ偽サイトで突破できないか
- 偽サイトはクラウド管理サイトとドメインが異なるため、ブラウザが署名に含めるオリジン/Relying Party ID が一致しません。
- サーバ検証で不一致となり、攻撃者は有効な署名を得られず「不正ログイン」が失敗します。
- 以上より「認証に用いる情報に含まれるオリジン及び署名名をサーバが確認する仕組み」という解答が導かれます。
誤りやすいポイント
- WebAuthn=指紋や顔認証と短絡し、オリジン検証の仕組みを答え損ねる。
- 「公開鍵暗号を使う」だけではフィッシング耐性の根拠にならない。
- 署名データに含まれるのは URL 文字列全体と誤解し、ポートやスキームを忘れる。
FAQ
Q: TOTP も“使い捨て”なのに、なぜフィッシングで突破されたのですか?
A: 攻撃者がユーザとリアルタイムでリレーすれば TOTP も利用されてしまいます。入力型認証要素は盗み取られるリスクがあります。
A: 攻撃者がユーザとリアルタイムでリレーすれば TOTP も利用されてしまいます。入力型認証要素は盗み取られるリスクがあります。
Q: WebAuthn では偽サイトがクラウド管理サイトと同じ外観を持っていても無効ですか?
A: はい。ブラウザが送信する署名データに正規オリジン/Relying Party ID が自動的に含まれるため、見た目を偽装してもサーバ検証で弾かれます。
A: はい。ブラウザが送信する署名データに正規オリジン/Relying Party ID が自動的に含まれるため、見た目を偽装してもサーバ検証で弾かれます。
Q: 既存 ID・パスワードと WebAuthn を併用できますか?
A: 可能です。パスワードレス運用も、多要素認証(WebAuthn+追加要素)も選択できます。
A: 可能です。パスワードレス運用も、多要素認証(WebAuthn+追加要素)も選択できます。
関連キーワード: WebAuthn, 公開鍵認証、オリジン、Relying Party ID, フィッシング耐性
設問2:〔N社のインシデントの発生と対応〕について答えよ。
(6)図2中のaに入れる適切な字句を、解答群の中から選び、記号で答えよ。
解答群
ア:CAA
イ:CNAME
ウ:DNSKEY
エ:NS
オ:SOA
カ:TXT
模範解答
a:ア
解説
解答の論理構成
- 図2の対策4では、目的が「N サービスのドメインのサーバ証明書を発行できる認証局を限定するため」と明示されています。
【問題文】
“4. N サービスのドメインのサーバ証明書を発行できる認証局を限定するために、N サービスのドメインの権威 DNS サーバに、N サービスのドメイン名に対応するaレコードを設定する。” - DNS で「どの認証局が当該ドメインに証明書を発行してよいか」を宣言する仕組みは Certificate Authority Authorization(CAA)レコードです。CAA レコードを設定すると、認証局は証明書発行前に DNS を確認し、許可されていない場合は発行を拒否します。
- 解答群を照合すると、証明書発行を制限できるレコードは “ア:CAA” だけです。
したがって、a に入る適切な字句は “CAA” となります。
誤りやすいポイント
- “TXT レコードで SPF などを設定するから ‘TXT’ では?”と連想しやすいですが、証明書発行権限を制御する正式なレコード種別は “CAA” です。
- “DNSSEC 関連だから ‘DNSKEY’ では?”と考える人もいますが、DNSSEC は応答の改ざん防止であり、認証局の限定とは目的が異なります。
- “CNAME で別名を張っておけば限定できるのでは?”という誤解もありますが、CNAME は単なる別名設定で証明書発行可否には関与しません。
FAQ
Q: “CAA レコードを設定しても、すべての認証局が必ず従うのですか?”
A: 主要な公開認証局は RFC に従い必ず確認します。非公開 CA やポリシーに反する CA が従わないリスクはありますが、公的 CA を前提とする Web PKI では強力な抑止力になります。
A: 主要な公開認証局は RFC に従い必ず確認します。非公開 CA やポリシーに反する CA が従わないリスクはありますが、公的 CA を前提とする Web PKI では強力な抑止力になります。
Q: “DNSSEC を併用する必要はありますか?”
A: 任意ですが推奨です。CAA レコード自体が改ざんされると無効化されてしまうため、DNSSEC で真正性を保証するとより安全です。
A: 任意ですが推奨です。CAA レコード自体が改ざんされると無効化されてしまうため、DNSSEC で真正性を保証するとより安全です。
Q: “CAA レコードの ‘issue’ と ‘issuewild’ の違いは?”
A: ‘issue’ は通常の FQDN 向け証明書の発行可否を、‘issuewild’ はワイルドカード証明書(例えば *.example.com)の発行可否を制御します。用途に合わせて両方設定すると漏れを防げます。
A: ‘issue’ は通常の FQDN 向け証明書の発行可否を、‘issuewild’ はワイルドカード証明書(例えば *.example.com)の発行可否を制御します。用途に合わせて両方設定すると漏れを防げます。
関連キーワード: CAAレコード、DNS, 公開鍵基盤、証明書発行制限、RFC준
設問3:〔N社の顧客での対応〕について答えよ。
(1)本文中の下線⑦について、Kさんが開始した対応を踏まえ、予想される攻撃を、40字以内で答えよ。
模範解答
有効なコード署名が付与された偽のPアプリをJストアにアップロードする攻撃
解説
解答の論理構成
-
情報流出の範囲
- N社から「ソースコード及びシークレットが第三者に漏えいしたおそれがある」と通知(問題文)。
- P社がシークレットとして登録していたのは「APP_SIGN_KEY」と「STORE_API_KEY」(表3)。
-
シークレットが攻撃に使われると何が起こるか
- 「APP_SIGN_KEY」は「コード署名の付与に利用する署名鍵とコードサイニング証明書」。
- 「STORE_API_KEY」は「Jストアにアプリをアップロードするための認証用APIキー」。
→ 攻撃者は①正規と同じ署名鍵で“有効なコード署名”を付与し、②APIキーで“Jストア”のREST APIを呼び出してアップロードできる。
-
Pアプリ利用者に及ぶ被害の想定
- スマートフォンOSは「コード署名の有効性を検証しており、検証に失敗したらアプリを起動しない」。
- 有効な署名が付いていれば検証を通過し、偽アプリでも起動してしまう。
- したがって「Pアプリ利用者に被害が及ぶ攻撃」とは、偽アプリが正規アップデートとして配布・実行されること。
-
Kさんが取った二つの対策の目的
- ⑧で「認証用APIキーに必要な対応」(失効・再発行)→ アップロード経路を遮断。
- コードサイニング証明書の失効・再発行→ 偽アプリに付与できる“有効なコード署名”を無効化。
→ どちらも「偽のPアプリがJストアへ正規更新として公開される」シナリオを阻止する動き。
-
以上より、⑦で想定した攻撃は
「有効なコード署名が付与された偽のPアプリをJストアにアップロードする攻撃」と導かれる。
誤りやすいポイント
- 漏えいしたのはソースコードだけと早合点し、「ソースを改ざんしても署名が通らないから安全」と考えてしまう。
- 「APP_SIGN_KEY」か「STORE_API_KEY」のどちらか一方だけを重視し、両方揃うことで“配布まで完了する”点を見落とす。
- 攻撃者が直接ユーザ端末にインストールさせると勘違いし、公式ストア経由の供給網攻撃だと気付かない。
FAQ
Q: シークレットが漏えいしてもストア側で検知できないのですか?
A: 「STORE_API_KEY」は契約者特定用なので正規リクエストとして受理されます。署名も「APP_SIGN_KEY」で正当性が証明されるため、ストア側では不審と判断しにくいです。
A: 「STORE_API_KEY」は契約者特定用なので正規リクエストとして受理されます。署名も「APP_SIGN_KEY」で正当性が証明されるため、ストア側では不審と判断しにくいです。
Q: コードサイニング証明書を失効すれば過去バージョンも起動できなくなりますか?
A: スマートフォンOSが失効確認を行う設計なら、旧バージョンも起動不可になります。そのため新しい証明書で再署名した安全なバージョンを速やかに公開する必要があります。
A: スマートフォンOSが失効確認を行う設計なら、旧バージョンも起動不可になります。そのため新しい証明書で再署名した安全なバージョンを速やかに公開する必要があります。
Q: HSMを使うことで何が改善されますか?
A: 鍵素材をデバイス外に抽出できないため、ビルド環境やCIサービスが侵害されても署名鍵そのものが窃取されるリスクを大幅に低減できます。
A: 鍵素材をデバイス外に抽出できないため、ビルド環境やCIサービスが侵害されても署名鍵そのものが窃取されるリスクを大幅に低減できます。
関連キーワード: コードサイニング、APIキー、アプリ配信、鍵漏えい、サプライチェーン攻撃
設問3:〔N社の顧客での対応〕について答えよ。
(2)本文中の下線⑧について、必要な対応を、20字以内で答えよ。
模範解答
J社のWebサイトから削除する。
解説
解答の論理構成
- 【問題文】では「Jストアへのアプリのアップロードは、J社の契約者を特定するための認証用APIキーをHTTPヘッダーに付加」すると記載されています。
- さらに「認証用APIキーはJ社が発行し、契約者だけがJ社のWebサイトから取得及び削除できる。」と明示されています。
- ⑧の指示は「漏えいしたおそれがあるので、STORE_API_KEYとして登録されていた認証用APIキーに必要な対応を行った」とあります。
- 漏えいが疑われる認証情報は攻撃者に悪用される前に無効化しなければなりません。上記②の仕様により無効化=「削除」は、J社のWebサイト上で行う操作だと分かります。
- したがって必要な対応は「J社のWebサイトから削除する。」となります。
誤りやすいポイント
- Nサービス側のシークレット登録を削除/更新するだけで十分と勘違いし、根本的な無効化を怠る。
- 「失効」や「再発行」といったキーワードに惑わされ、APIキーの削除可能場所(J社サイト)を見落とす。
- コードサイニング証明書の失効処理と混同し、同じ手順を適用しようとする。
FAQ
Q: APIキーを削除した後は必ず再発行する必要がありますか?
A: はい。正規運用を続けるには新しい「認証用APIキー」を取得し、ビルドスクリプトやシークレットに登録し直す必要があります。
A: はい。正規運用を続けるには新しい「認証用APIキー」を取得し、ビルドスクリプトやシークレットに登録し直す必要があります。
Q: Nサービスの一時停止中でもAPIキーは削除できますか?
A: できます。キーの削除操作は「J社のWebサイト」で行うため、Nサービスの稼働状況には依存しません。
A: できます。キーの削除操作は「J社のWebサイト」で行うため、Nサービスの稼働状況には依存しません。
Q: 削除操作を行わずにキーを無効化する他の方法はありますか?
A: 契約者が操作できるのは「取得」と「削除」だけと明記されており、無効化=削除が唯一の確実な手段です。
A: 契約者が操作できるのは「取得」と「削除」だけと明記されており、無効化=削除が唯一の確実な手段です。
関連キーワード: APIキー、キー無効化、認証情報漏えい、アプリアップロード、セキュリティインシデント
設問3:〔N社の顧客での対応〕について答えよ。
(3)本文中の下線⑨について、コード署名を付与する際にHSMを使うことによって得られるセキュリティ上の利点を、20字以内で答えよ。
模範解答
秘密鍵が漏れないこと
解説
解答の論理構成
- 本文では
「FIPS140-2SecurityLevel3の認証を受けたハードウェアセキュリティモジュール(HSM)は、⑨コード署名を付与する際にセキュリティ上の利点があるので、それを利用することにした。」
と記載されています。 - 一般に HSM は秘密鍵を内部で生成・保存し、暗号処理もデバイス内で完結させます。鍵を外部へエクスポートできない設計のため、署名処理で扱う鍵素材が端末やメモリ上に露出しません。
- したがって、利点は「署名用の秘密鍵が流出しないこと」です。
- 以上より解答は「秘密鍵が漏れないこと」となります。
誤りやすいポイント
- 「FIPS140-2SecurityLevel3」の強度を答える設問ではありません。求められるのは“利点”のみです。
- 「鍵生成の高速化」「署名の高速化」など性能面を書くと失点になります。
- 「改ざん検知」だけでは不十分です。鍵の保護に触れていないと要点を外します。
FAQ
Q: FIPS140-2 認証レベルが利点になるのですか?
A: 本設問は認証レベルではなく、HSM そのものが持つ「鍵を出さない」特性が利点です。
A: 本設問は認証レベルではなく、HSM そのものが持つ「鍵を出さない」特性が利点です。
Q: ソフトウェアキーストアではだめですか?
A: ソフトウェアだけでは OS やメモリ領域から鍵が抜き取られる恐れがあります。HSM はハード的に鍵抽出を遮断します。
A: ソフトウェアだけでは OS やメモリ領域から鍵が抜き取られる恐れがあります。HSM はハード的に鍵抽出を遮断します。
Q: HSM を使えば署名鍵更新は不要ですか?
A: 鍵更新ポリシーは別途必要です。HSM は鍵漏えいリスクを下げる手段であり、鍵の有効期限管理とは別問題です。
A: 鍵更新ポリシーは別途必要です。HSM は鍵漏えいリスクを下げる手段であり、鍵の有効期限管理とは別問題です。
関連キーワード: ハードウェアセキュリティモジュール、秘密鍵、コード署名、キーマネジメント
設問3:〔N社の顧客での対応〕について答えよ。
(4)本文中の下線⑩について、影響と対応を、それぞれ20字以内で答えよ。
模範解答
影響:Pアプリを起動できない。
対応:Pアプリをアップデートする。
解説
解答の論理構成
- 【問題文】には
「スマートフォンOSは、各アプリを起動する前にコード署名の有効性を検証しており、検証に失敗したらアプリを起動しないようにしている。」
とあります。 - Kさんは二つ目の対応で「APP_SIGN_KEYとして登録されていたコードサイニング証明について認証局に失効を申請」しました。失効後、旧証明書で署名された既存アプリは検証に失敗し、起動できなくなります。
- 影響は「Pアプリを起動できない。」となります。
- その後「新たな鍵ペアを生成」し、再署名済みバイナリをJストアにアップロードしたとあるため、利用者が取るべき対応は最新版への入替、すなわち「Pアプリをアップデートする。」です。
誤りやすいポイント
- 証明書の失効=攻撃者対策と考え、影響が無いと誤解しやすい
- STORE_API_KEYの失効が直接アプリ起動に影響すると混同する
- 対応を「再インストール」と書きがちだが、一般的にはアップデートで解消
FAQ
Q: 証明書失効だけでアプリが動かなくなるのはなぜですか?
A: スマートフォンOSが起動前にコード署名を検証し、失効済み証明書の署名は無効と判断するためです。
A: スマートフォンOSが起動前にコード署名を検証し、失効済み証明書の署名は無効と判断するためです。
Q: アップデート以外の回避策はありますか?
A: 旧証明書を再有効化しない限り動作しないため、利用者側では最新版へのアップデートが唯一の対処になります。
A: 旧証明書を再有効化しない限り動作しないため、利用者側では最新版へのアップデートが唯一の対処になります。
Q: STORE_API_KEYを失効した影響は?
A: Jストアへの自動アップロードが一時的に失敗しますが、利用者端末の既存アプリ動作には影響しません。
A: Jストアへの自動アップロードが一時的に失敗しますが、利用者端末の既存アプリ動作には影響しません。
関連キーワード: コード署名、証明書失効、アプリ更新、シークレット管理


