情報処理安全確保支援士 2024年 春期 午後 問01
API セキュリティに関する次の記述を読んで、設問に答えよ。
G社は、ヘルスケアサービス新興企業である。利用者が食事、体重などを入力して、そのデータを管理したり、健康リスクの判定や食事メニューのアドバイスを受けたりできるサービス(以下、サービスYという)を計画している。具体的には、クラウドサービス上にサービスY用のシステム(以下、Sシステムという)を構築して、G社が既に開発しているスマートフォン専用アプリケーションプログラム(以下、G社スマホアプリという)からアクセスする。Sシステムの要件を図1に示す。


G社は、Sシステムの構築をITベンダーF社に委託した。F社との協議の結果、クラウドサービスプロバイダE社のクラウドサービス上にSシステムを構築する方針にした。
〔APIの設計〕
Sシステムには、将来的には他社が提供するスマートフォン専用アプリケーションプログラムからもアクセスすることを想定し、RESTful API方式のAPI(以下、SシステムのAPIをS-APIという)を用意する。RESTful APIの設計原則の一つにセッション管理を行わないという性質がある。この性質をaという。
E社が提供するクラウドサービスのサービス一覧を表1に、サービスYのシステム構成を図2に、S-API呼出し時の動作概要を図3に、S-APIの仕様を表2に、Sシステムの仕様を図4に、それぞれ示す。





〔脆弱性診断の結果〕
Sシステムの構築が進み全ての機能を動作確認できたので、G社でSシステムのセキュリティを担当するRさんが、セキュリティベンダーであるU社に脆弱性診断(以下、診断という)を依頼した。U社による診断レポートを表3に示す。

表3の項番1について、U社のセキュリティコンサルタントで情報処理安全確保支援士(登録セキスペ)のZ氏は、次のように説明した。
・認証APIで、利用者ID“user01”での認証が成功した後、診断中に発行されたJWTのデコード結果は、表4のとおりであった。

・ここで、表4中の“RS256”の代わりに“NONE”を指定し、“user01”を他の利用者IDに改ざんしたJWTを送信したところ、改ざんしたJWTの検証が成功し、他の利用者へのなりすましができた。
項番2~4についても説明を受けた後、G社は、表3の脆弱性を分析し、対策について、F社、U社を交えて検討した。
Rさんが取りまとめた脆弱性の分析と対策案を表5に示す。

全ての対応が完了した後、試用モニターを対象に、サービスYの提供を開始した。
〔セキュリティの強化〕
G社は、試用モニターへのサービスYの提供期間中に、インシデント対応に必要なログの取得方法を検討することになり、F社と協議した。
F社によれば、ログ取得モジュールを実装するには時間が掛かるが、ログ取得モジュールを実装しなくても、サービスNを導入することによって、通信ログを取得できるという。
サービスNにおけるWAFルールの記述形式を図5に示す。

Rさんは、サービスNのSシステムへの導入を責任者に提案し、承認を得た。サービスNの導入完了後、サービスYの提供を開始した。
〔新たな弱性への対応〕
数週間後、ライブラリHというオープンソースのライブラリに弱性Vという脆弱性があることが公表された。Rさんは、脆弱性Vについての関連情報を図6のように取りまとめた。

Rさんは、脆弱性Vへの対応方針をZ氏に相談した。Z氏は、F社の回答を待ってからの対応では遅いので、システムに影響を与えない検証コードをSシステムに対して実行し、外部から脆弱性Vを悪用できるか検証するよう提案した。Rさんは、Z氏の協力の下、図7に示す手順で検証を実施した。


検証の結果、外部から脆弱性Vを悪用できることが確認できた。この結果を踏まえて、Rさんは、脆弱性Vを悪用する攻撃に備え、E社からWAFルールが提供されるまでの間、現在判明している悪用パターンに対応可能な普定的なWAFルールで攻撃を遮断することにした。
Rさんが考えたWAFルールの案を表6に示す。

Rさんは、例えば“jnDI”のように大文字・小文字を入れ替える手口によって、ルール1と2それぞれで、案のパターンを回避する方法があることに気付いた。④このような手口にも対応できるように案を変更した。その後、変更後の案の確認をZ氏に依頼した。
Z氏は、⑤本番運用開始後の一定期間においては、WAFルールの動作には”検知”を設定して、サービスYが今までどおり利用できるかを確認することを助言した。Rさんは、Z氏の助言を踏まえて、WAFルールを設定した。
後日、Sシステムでは、ライブラリHを利用しているとの回答がF社からあった。また、E社からサービスNにおけるWAFルールが提供された。その後、脆弱性Vを修正したバージョンがライブラリHの公式Webサイトで配布され、Sシステム内のライブラリHのバージョンを最新にすることで、脆弱性Vへの対応が完了した。
設問1:
本文中のaに入れる適切な字句を答えよ。
模範解答
a:ステートレス
解説
解答の論理構成
- 【問題文】には「RESTful APIの設計原則の一つにセッション管理を行わないという性質がある。この性質をaという。」と記載されています。
- REST(Representational State Transfer)は“サーバ側にクライアント状態を保持しない”ことを原則とするアーキテクチャです。
- この原則を技術用語で「ステートレス(stateless)」と呼びます。つまり、リクエスト間でサーバにセッション情報を残さず、必要な状態は都度リクエストに含めて送信します。
- したがって、aに入る適切な字句は「ステートレス」となります。
誤りやすいポイント
- 「セッションレス」と書き換えてしまう
→ RESTの正式な原則名は「ステートレス」であり、設問は“性質を何というか”を問うため略語や和製英語は不可です。 - 「無状態」「ステートフリー」など日本語訳をそのまま記述
→ 原文の流れに合わせるとカタカナ語「ステートレス」が一般的かつ正答。 - HTTPの“接続を保持しない”=Keep-Alive無効と混同
→ RESTのステートレスはアプリケーション層でのクライアント状態管理を指し、TCP接続の継続とは別概念です。
FAQ
Q: ステートレスにすると毎回すべての情報を送るので通信量が増えませんか?
A: 多少増えますが、キャッシュやトークンを用いることで実運用上の負荷は抑えられます。また、スケーラビリティや冗長構成の容易さが利点となります。
A: 多少増えますが、キャッシュやトークンを用いることで実運用上の負荷は抑えられます。また、スケーラビリティや冗長構成の容易さが利点となります。
Q: クッキーでトークンを送っている場合もステートレスですか?
A: クッキー自体はクライアント側に保存されるためサーバが状態を保持しなければステートレスを満たします。サーバ側でセッション表を管理するとステートフルになります。
A: クッキー自体はクライアント側に保存されるためサーバが状態を保持しなければステートレスを満たします。サーバ側でセッション表を管理するとステートフルになります。
Q: JWTを用いてもステートレス原則を守れますか?
A: はい。JWTには利用者情報と署名が含まれ、サーバはデータベースにセッションを保存せずに認証・認可を行えるため、ステートレス設計に適合します。
A: はい。JWTには利用者情報と署名が含まれ、サーバはデータベースにセッションを保存せずに認証・認可を行えるため、ステートレス設計に適合します。
関連キーワード: REST, ステートレス、セッション管理、HTTPリクエスト、JWT
設問2:〔脆弱性診断の結果〕について答えよ。
(1)表3中のbに入れる適切な数値を、小数点以下を四捨五入して整数で答えよ。
模範解答
b:500
解説
解答の論理構成
- 前提確認
- 認証 API は「毎回ランダムに生成される数字4桁の文字列(以下、文字列Xという)」と定義されています(表2)。
- 診断レポートでは「1 秒間に 10 回試行する総当たり攻撃を行った場合」とあります(表3 項番4)。
- 総当たり攻撃に必要な総試行回数
- 4桁の数字なので、取り得る値は 通りです。
- 平均的な成功までの試行回数
- ランダムに並べ替えられた 10,000 通りを順に試す場合、成功位置は一様分布になります。
- 期待値(平均回数)は 回です。
- 1 秒間あたりの試行回数と所要時間
- 1 秒間に 10 回試行できるので、所要時間は
- 1 秒間に 10 回試行できるので、所要時間は
- 小数点以下を四捨五入した整数
- 既に整数なので、そのまま「500」となります。
誤りやすいポイント
- 「平均的な成功まで」は「すべて試した場合の最大時間」ではない点を取り違える。
- 試行レートを「毎秒10回」ではなく「毎分10回」と誤読する。
- 4桁=1,000通りと勘違いし、計算を にしてしまう。
- 期待値計算で とせず、端数処理を誤る。
FAQ
Q: 最大で何秒掛かりますか?
A: 10,000 通りを全て試すと 秒です。平均はその半分の 500 秒です。
A: 10,000 通りを全て試すと 秒です。平均はその半分の 500 秒です。
Q: 文字列Xを6桁に増やすと平均時間は?
A: 通り数は なので平均試行回数は 500,000 回。毎秒10回なら 50,000 秒(約13.9時間)になります。
A: 通り数は なので平均試行回数は 500,000 回。毎秒10回なら 50,000 秒(約13.9時間)になります。
Q: 攻撃者が並列に 100 リクエスト/秒を送ったら?
A: 同じ計算式で 秒に短縮されるため、レート制限など追加対策が必要です。
A: 同じ計算式で 秒に短縮されるため、レート制限など追加対策が必要です。
関連キーワード: ブルートフォース、期待値、確率計算、OTP, レートリミット
設問2:〔脆弱性診断の結果〕について答えよ。
(2)表5中の下線①について、修正後のライブラリQで行うJWTの検証では、どのようなデータに対してどのような検証を行うか。検証対象となるデータと検証の内容を、それぞれ20字以内で答えよ。
模範解答
データ:JWTヘッダ内のalgに指定された値
内容:NONEでないことを検証する。
解説
解答の論理構成
- 問題文は、診断時に「“RS256”の代わりに“NONE”を指定し、“user01”を他の利用者IDに改ざんしたJWTを送信したところ、改ざんしたJWTの検証が成功」したと指摘しています。
- さらに「ライブラリQは、JWT内のヘッダに指定されたアルゴリズムに基づいてJWTを検証する」と記載されており、alg に “NONE” を許容してしまうことが脆弱性の原因だと読み取れます。
- したがって、改修後のライブラリQは「JWTヘッダの alg 値」を取り出し、「その値が “NONE” ではない」ことを確認する検証を追加することで、アルゴリズム混乱攻撃を防ぎます。
誤りやすいポイント
- user クレーム(利用者ID)の改ざん検出と誤解しやすいですが、本質は alg フィールドの扱いにあります。
- 署名そのものを再計算すると考えがちですが、“NONE” を禁止するだけでも攻撃を封じられる点を見落としやすいです。
- “RS256 のみ許可”と書くと、他の安全なアルゴリズム実装が将来追加された場合に柔軟性を欠く恐れがあります。
FAQ
Q: なぜ “NONE” の受信を拒否するだけで対策になるのですか?
A: “NONE” を指定すると署名検証が実質スキップされるため、攻撃者は任意のペイロードを偽造できます。拒否すれば必ず署名付きトークンだけを受け入れることになり、改ざんは失敗します。
A: “NONE” を指定すると署名検証が実質スキップされるため、攻撃者は任意のペイロードを偽造できます。拒否すれば必ず署名付きトークンだけを受け入れることになり、改ざんは失敗します。
Q: “NONE” 以外にも危険なアルゴリズムはありますか?
A: 仕様上は “NONE” が唯一の署名なしアルゴリズムです。ただし、将来の拡張で同様の挙動を持つものが追加される可能性もあるため、ホワイトリスト方式(安全なアルゴリズムのみ許可)が推奨されます。
A: 仕様上は “NONE” が唯一の署名なしアルゴリズムです。ただし、将来の拡張で同様の挙動を持つものが追加される可能性もあるため、ホワイトリスト方式(安全なアルゴリズムのみ許可)が推奨されます。
Q: ペイロード中の user クレームをサーバ側データと突き合わせる必要は?
A: 署名が正しく検証されていれば user は改ざんできませんが、多層防御の観点でトークン内IDとサーバ上セッション情報を照合する実装も有効です。
A: 署名が正しく検証されていれば user は改ざんできませんが、多層防御の観点でトークン内IDとサーバ上セッション情報を照合する実装も有効です。
関連キーワード: JWT, アルゴリズム混乱攻撃、署名検証、RESTful API
設問2:〔脆弱性診断の結果〕について答えよ。
(3)表5中の下線②について、P呼出し処理に追加すべき処理を、40字以内で具体的に答えよ。
模範解答
JWTに含まれる利用者IDがmidの値と一致するかどうかを検証する処理
解説
解答の論理構成
-
脆弱性の確認
表3の項番2には、 「パラメータ mid に他の利用者 ID を指定すると、他の利用者 ID にひも付く利用者情報を取得、改変できてしまう。」
とあり、mid と実際の利用者の対応付けが行われていないことが示されています。 -
既存認証処理の限界
図4には、 「JWT内の署名を検証した後、ペイロードに含まれた利用者IDを確認して利用者を識別し…」
と記述されています。
つまり JWT だけで認証は完了していますが、その後の API 呼び出しでは mid パラメータが優先され、JWT 内の利用者 ID との照合が行われていません。 -
具体的な攻撃シナリオ
・攻撃者は自分の JWT(ペイロード中 "user": "attacker01")を保持。
・GET /user?mid=victim01 を送信。
・P呼出し処理は mid=victim01 をそのまま共通モジュールPへ渡すため、他人の情報を取得 / 更新できてしまいます。 -
対策の要点
表5では、 「②P呼出し処理に処理を追加する」
と求められています。
攻撃を防ぐには、(1) JWT ペイロードの利用者 ID と (2) リクエストの mid を比較し、一致しない場合は処理を中止する必要があります。 -
したがって追加すべき処理
JWT から取り出した利用者 ID と mid の値を照合し、一致しないリクエストを拒否するロジックであると導けます。
誤りやすいポイント
- JWT の署名検証のみで十分と誤解し、パラメータ整合性チェックを忘れる。
- mid を署名付きパラメータに置き換えればよいと考え、既存 API 仕様の維持コストを見落とす。
- 共通モジュールP側で一括制御できると判断し、P呼出し処理にチェックを入れない。
FAQ
Q: JWT の署名が正当なら他の ID でアクセスしても問題ないのでは?
A: JWT は“誰がログインしたか”を示すだけで、“誰のデータを操作するか”はリクエストパラメータ次第です。両者の不一致を放置するとなりすましが成立します。
A: JWT は“誰がログインしたか”を示すだけで、“誰のデータを操作するか”はリクエストパラメータ次第です。両者の不一致を放置するとなりすましが成立します。
Q: mid を省略して JWT の ID をそのまま使う方法ではダメ?
A: API 仕様変更が広範に及ぶうえ、将来拡張で mid が必要になる可能性も残ります。一致確認を追加する方が影響を局所化できます。
A: API 仕様変更が広範に及ぶうえ、将来拡張で mid が必要になる可能性も残ります。一致確認を追加する方が影響を局所化できます。
Q: 共通モジュールPでの検証と P呼出し処理での検証、どちらが望ましい?
A: 現行構成では P呼出し処理が JWT を受け取れる唯一の場所なので、ここで照合するのが実装コストとセキュリティの両面で最適です。
A: 現行構成では P呼出し処理が JWT を受け取れる唯一の場所なので、ここで照合するのが実装コストとセキュリティの両面で最適です。
関連キーワード: JWT, アクセスコントロール、パラメータ検証、RESTful API, Bearer認証
設問2:〔脆弱性診断の結果〕について答えよ。
(4)表5中のcに入れる適切な字句を、表2中の用語で答えよ。
模範解答
c:共通モジュールP
解説
解答の論理構成
- 表5の設問部分
- 「指定されたパラメータを検証せず全て c に送信していた。」
- 「送信内容を改ざんしてパラメータ “status” を追加してリクエストを送信すると、c は利用者ステータスを変更できる。」
ここから c には“利用者ステータスを変更する処理”を実際に担うモジュール名が入ると分かります。
- 表2の API 仕様
- 利用者APIの説明欄に「F社が既に開発済みの利用者管理共通ライブラリ(以下、共通モジュールPという)を利用する。」
- 「共通モジュールPは、サービスMを呼び出して…利用者情報を取得、更新する。」
利用者情報(=ステータスを含む)を更新できるのは「共通モジュールP」です。
- 照合
- 表5ではパラメータ “status” を追加すると「利用者ステータスを変更できる」とあり、表2では「共通モジュールP」が利用者情報更新を担当。
- よって、検証を行わず送っている先 c は「共通モジュールP」でなければ辻褄が合いません。
- 結論
c に入る字句は 表2 に記載の「共通モジュールP」です。
誤りやすいポイント
- 「サービスM」と混同する
サービスMはデータベースサービスであり直接ロジックを持ちません。更新処理は「共通モジュールP」経由で行います。 - 「サービスL」を選んでしまう
サービスLはイベント駆動の実行基盤で、具体的な利用者情報の変更は内部で呼び出す「共通モジュールP」が担当します。 - “status” パラメータが表2にないため別の新モジュールと誤解する
表2に定義されないパラメータでも送信先は既存モジュールと読み取る必要があります。
FAQ
Q: 「共通モジュールP」はどこで呼び出されていますか?
A: 表2に「利用者ステータスの管理にも利用される」と明記され、サービスLの処理から呼び出されます。
A: 表2に「利用者ステータスの管理にも利用される」と明記され、サービスLの処理から呼び出されます。
Q: サービスMがステータス変更を行うわけではないのですか?
A: サービスMはデータベースとして動作し CRUD の実体は持ちますが、ロジック層である「共通モジュールP」を通して呼び出されます。
A: サービスMはデータベースとして動作し CRUD の実体は持ちますが、ロジック層である「共通モジュールP」を通して呼び出されます。
Q: パラメータ検証を追加する箇所はどこですか?
A: 表5の対策案②にあるとおり「P呼出し処理」にバリデーションを追加して、不要なパラメータが「共通モジュールP」へ渡るのを防ぎます。
A: 表5の対策案②にあるとおり「P呼出し処理」にバリデーションを追加して、不要なパラメータが「共通モジュールP」へ渡るのを防ぎます。
関連キーワード: アクセス制御、パラメータ検証、JWT, RESTful API, WAF
設問2:〔脆弱性診断の結果〕について答えよ。
(5)表5中のdに入れる適切な処理内容を、30字以内で答えよ。
模範解答
d:連続失敗回数がしきい値を超えたらアカウントをロックする処理
解説
解答の論理構成
- 脆弱性4の問題点
- 【問題文】「総当たり攻撃によって、文字列 X を使った認証メカニズムを突破できる。」とあり、短桁数の “数字4桁” が狙われています。
- 対策案の要求
- 表5の対策欄には「次の対策を実施する。 ・d を実装する。そのしきい値は10とする。」と明記されています。
- さらに同表で「文字列Xを数字6桁に変更する」と併記されており、主眼が“総当たり攻撃の難度上げ”にあると分かります。
- しきい値「10」が意味するもの
- 短時間に10回失敗したら何らかの強制措置を行うという趣旨で、典型的にはアカウントの一時利用停止(ロック)です。
- 結論
- 以上より d には「連続失敗回数がしきい値を超えたらアカウントをロックする処理」が入ると導けます。
誤りやすいポイント
- 「CAPTCHAを表示する」など視覚的チャレンジを想起しがちですが、しきい値“10”という具体値はアカウントロック制御の典型です。
- “JWT”や“WAF”の改修と混同し、トークン失効機構と答えてしまうケース。
- 「IPアドレス単位のブロック」を連想しがちですが、記述には“利用者”の概念が前提となっているため不適切です。
FAQ
Q: IPブロックでも総当たり攻撃は止められるのでは?
A: 攻撃者が複数IPを使うと回避されるため、利用者ID単位でロックする方が確実です。
A: 攻撃者が複数IPを使うと回避されるため、利用者ID単位でロックする方が確実です。
Q: ロック後はどうやって解除するのですか?
A: 多くの実装では一定時間経過や管理者手動解除で復旧します。本問題は解除方法までは要求していません。
A: 多くの実装では一定時間経過や管理者手動解除で復旧します。本問題は解除方法までは要求していません。
Q: “数字6桁化”だけで十分では?
A: 6桁にしても10回/秒なら10分弱で全通り試せます。ロックとの併用で攻撃継続を実質不可能にします。
A: 6桁にしても10回/秒なら10分弱で全通り試せます。ロックとの併用で攻撃継続を実質不可能にします。
関連キーワード: アカウントロック、ブルートフォース、OTP, 二要素認証、レートリミット
設問3:〔新たな脆弱性への対応〕について答えよ。
(1)図7中の下線③について、テストサーバに実装する仕組みを、35字以内で具体的に答えよ。
模範解答
テストサーバのindex.htmlへのアクセスを記録し、確認する仕組み
解説
解答の論理構成
- 問題文の要求確認
下線③は【図7】で示され、原文には
“③図8で指定したコマンドが実行されたことを確認する仕組み”
とあります。つまり「コマンドが実行された事実」を“テストサーバ”側で把握できる仕掛けを答える必要があります。 - 実行されるコマンドの内容
【図8】注記2に
“d2dldCBodHRwOi8vYTIuYjIuYzIuZDlvaW5kIvaW5kZW5kaHRtbA==のデコード結果は、 wget http://a2.b2.c2.d2/index.html である。”
と明記されています。攻撃成功時には攻撃対象サーバが test サーバ(IP“a2.b2.c2.d2”)の “index.html” を wget で取得しに来ることが分かります。 - 確認方法の導出
したがって test サーバで
・index.html への HTTP アクセスを受け付け
・そのアクセスをログに残す
仕組みを用意すれば、アクセスログの有無でコマンド実行を確認できます。 - 以上より解答は
“テストサーバのindex.htmlへのアクセスを記録し、確認する仕組み”
となります。
誤りやすいポイント
- コマンドがダウンロードした「Jファイル」側を監視すると誤解しやすいですが、実際に送信されるのは wget …/index.html です。
- テストサーバでは“コマンドの実行結果”を直接捕捉するのではなく、“HTTPアクセスを記録”するだけで十分です。
- “syslog で監視”や“パケットキャプチャ”など広義の方法を書いてしまい焦点がぼけるケースがあります。
FAQ
Q: index.html へのアクセス以外のファイルでも確認できますか?
A: 原文でダウンロード対象が “index.html” と決まっているため、最も確実なのは同ファイルへのアクセスを監視する方法です。
A: 原文でダウンロード対象が “index.html” と決まっているため、最も確実なのは同ファイルへのアクセスを監視する方法です。
Q: アクセス記録は Apache のアクセスログでも良いのでしょうか?
A: はい。要件は「アクセスを記録して確認できる」ことなので、Web サーバ既定のアクセスログで問題ありません。
A: はい。要件は「アクセスを記録して確認できる」ことなので、Web サーバ既定のアクセスログで問題ありません。
Q: パケットキャプチャを常時行う方法ではダメですか?
A: 成立しますが、設問は“仕組み”を簡潔に問われており、アクセスログの方がシンプルで意図を明確に示せます。
A: 成立しますが、設問は“仕組み”を簡潔に問われており、アクセスログの方がシンプルで意図を明確に示せます。
関連キーワード: JNDI, LDAP, アクセスログ、wget, WAFルール
設問3:〔新たな脆弱性への対応〕について答えよ。
(2)表6中のe、fに入れる適切な字句を、図5中から選んで答えよ。
模範解答
e:Header
f:Header
解説
解答の論理構成
- 図6には「準備した攻撃コードをHTTPリクエストのx-api-versionヘッダの値として指定したHTTPリクエストを攻撃対象サーバに送信する。」とあります。攻撃文字列が格納される場所が明示的に“ヘッダ”である点がポイントです。
- 図5の[検証対象]の選択肢には Header が含まれており、「全てのヘッダの値を検証対象とする。」と定義されています。
- 表6は脆弱性Vを悪用する攻撃コード(${jndi:ldap://…} を含む)を検知・遮断するルールを作成する場面です。攻撃コードがヘッダに置かれる以上、検証対象は Header を選ぶ必要があります。
- ルール1のパターン ¥Wjndi¥W とルール2のパターン ¥Wldap¥W はどちらも同じヘッダ値の中に含まれる可能性が高いため、双方とも Header を指定するのが適切です。
- 以上より、表6中 e と f には同じ語句「Header」を入れる結論となります。
誤りやすいポイント
- 攻撃コードがクエリ文字列や本文に入ると誤解し、GET や POST を選んでしまう。実際にはヘッダ内に挿入される攻撃手法が説明されています。
- 図5の「ANY」を万能と捉え、安易に選択するケース。ANY は範囲が広すぎて正規表現誤検知のリスクが増えるため、必要最小限の Header を選ぶ方が望ましいです。
- Rule1 と Rule2 で異なる検証対象を選択してしまう。表6の文脈では両者とも同一ヘッダを調査する設定が前提です。
FAQ
Q: ルールに GET や POST を指定しても攻撃は検知できますか。
A: 今回の攻撃文字列はヘッダに含まれるため、GET や POST を指定しても検査対象外となり検知できません。
A: 今回の攻撃文字列はヘッダに含まれるため、GET や POST を指定しても検査対象外となり検知できません。
Q: ANY を使えばヘッダも含めて網羅できるのでは。
A: ANY は便利ですが誤検知率が高く、サービスへの影響が大きくなるため、攻撃箇所が明確な場合は Header のように限定するのが推奨です。
A: ANY は便利ですが誤検知率が高く、サービスへの影響が大きくなるため、攻撃箇所が明確な場合は Header のように限定するのが推奨です。
Q: Header を選ぶ場合、特定ヘッダのみ検査する設定はできますか。
A: 多くの WAF 製品では個別ヘッダを条件に追加設定できます。まずは全ヘッダを対象に検知モードで動作確認し、問題がなければ運用ポリシーに合わせて絞り込みます。
A: 多くの WAF 製品では個別ヘッダを条件に追加設定できます。まずは全ヘッダを対象に検知モードで動作確認し、問題がなければ運用ポリシーに合わせて絞り込みます。
関連キーワード: WAF, 正規表現、HTTPヘッダ、JNDI, LDAP
設問3:〔新たな脆弱性への対応〕について答えよ。
(3)本文中の下線④の変更後の案について、表6中のルール1に記述すべきパターンを、図5の記述形式で答えよ。
模範解答
・¥W[jJ][nN][dD][iI]¥W
・¥W(j|J)(n|N)(d|D)(i|I)¥W
解説
解答の論理構成
- 問題文には、下線④で「このような手口にも対応できるように案を変更した」とあります。ここでの「手口」とは、“jnDI”のように大文字・小文字を入れ替える手法であり、従来の ¥Wjndi¥W というパターンでは検知できないケースを指します。
- 図5のルール記述形式では、正規表現を使って大小文字を個別に許容することが可能です。正規表現の文字クラス [xX] を用いれば、大文字・小文字のいずれか 1 文字を許容できます。
- したがって、4 文字すべてを大小文字のいずれでもマッチさせるには、
- j→[jJ]
- n→[nN]
- d→[dD]
- i→[iI]
と置き換え、前後に非英数字を表す ¥W を残します。
- 以上より、変更後のルール1に記述すべきパターンは
¥W[jJ][nN][dD][iI]¥W
となります。これは図5の記述形式を完全に満たし、大文字・小文字の混在にも対応できます。
誤りやすいポイント
- ^ や .* を不用意に追加してしまい、意図せず攻撃を許可・遮断してしまう。図5の要件に無い文字を加えると動作が変わります。
- [jJ][nN][dD][iI] の代わりに (j|J)(n|N)(d|D)(i|I) と書けますが、かっこを閉じ忘れる・縦棒を抜かすなどでシンタックスエラーを起こす。
- 誤って後続の ¥W を削除すると、語中やパラメータ値の一部に現れた無関係な文字列まで遮断対象となる過検知が発生します。
FAQ
Q: 先頭の ¥W と末尾の ¥W は必須ですか?
A: はい。図5で ¥W は「任意の非英数字」を意味し、攻撃コードの前後の区切りを検出する役割があります。外すと誤検知・過検知の原因になります。
A: はい。図5で ¥W は「任意の非英数字」を意味し、攻撃コードの前後の区切りを検出する役割があります。外すと誤検知・過検知の原因になります。
Q: (j|J)(n|N)(d|D)(i|I) 形式との違いは?
A: 機能は同じですが、[jJ] 形式の方が短く可読性が高いだけでなく、正規表現エンジンによっては高速に処理できる場合があります。
A: 機能は同じですが、[jJ] 形式の方が短く可読性が高いだけでなく、正規表現エンジンによっては高速に処理できる場合があります。
Q: 全て小文字に変換してから判定する方法でも良いですか?
A: 可能ですが、WAFでリアルタイムに文字列変換を行うとオーバーヘッドが増大することがあります。正規表現で大小文字を網羅した方が実装が容易です。
A: 可能ですが、WAFでリアルタイムに文字列変換を行うとオーバーヘッドが増大することがあります。正規表現で大小文字を網羅した方が実装が容易です。
関連キーワード: 正規表現、WAF, JNDI, 大文字小文字、パターンマッチ
設問3:〔新たな脆弱性への対応〕について答えよ。
(4)本文中の下線⑤について、WAFルールの動作に“遮断”ではなく“検知”を設定することによる利点と、“検知”に設定した際に被害を最小化するために実施すべき内容を、それぞれ25字以内で答えよ。
模範解答
利点:誤検知による遮断を防ぐことができる。
内容:アラートを受信したら攻撃かどうかを精査する。
解説
解答の論理構成
- 【問題文】には“⑤本番運用開始後の一定期間においては、WAFルールの動作には”検知”を設定して、サービスYが今までどおり利用できるかを確認する”とあります。
- “検知”は図5の説明で“通信を通過させ、ログに記録し、管理者にアラートを送信する”動作です。
- もし初期設定で“遮断”にしてしまうと、誤ったパターンマッチにより正当な通信まで止める恐れがあります。可用性確保の観点から、まずは“検知”で様子を見る利点が導かれます。
- 被害を最小化するには、“検知”で得られたアラートを速やかに確認し、本当に攻撃かどうかを判断してルールを調整・強化する運用が必要です。
- 以上より、模範解答
利点:「誤検知による遮断を防ぐことができる。」
内容:「アラートを受信したら攻撃かどうかを精査する。」
が妥当であると論証できます。
誤りやすいポイント
- “検知”=通信許可と勘違いして「効果がない」と評価してしまう。実際はログとアラートが残せるのでチューニングに必須です。
- 被害最小化策を「すぐ遮断に切替える」とだけ答えてしまう。まずはアラートを確認し、正当・不正を見極めた上で段階的に対処する運用が求められます。
- “誤検知を減らす”と“過検知を減らす”の区別が曖昧になり、理由と対策が対応しなくなる点。
FAQ
Q: なぜ“遮断”を使わないのですか?
A: 新ルール導入直後は誤検知の可能性が高く、業務影響を避けるためにまず“検知”で挙動を観察します。
A: 新ルール導入直後は誤検知の可能性が高く、業務影響を避けるためにまず“検知”で挙動を観察します。
Q: “検知”設定時は攻撃を許してしまうのでは?
A: アラートで迅速に把握できるため、精査してルールを修正・遮断へ切替えるまでの短期間で被害を最小化できます。
A: アラートで迅速に把握できるため、精査してルールを修正・遮断へ切替えるまでの短期間で被害を最小化できます。
Q: ログ確認は誰が行うべきですか?
A: セキュリティ担当者が責任を持ち、SIerやベンダと連携してルール調整を行う体制が望ましいです。
A: セキュリティ担当者が責任を持ち、SIerやベンダと連携してルール調整を行う体制が望ましいです。
関連キーワード: WAF, 誤検知、ログ分析、アラート運用


