午前I問題

SQLインジェクション攻撃への対策として、最も適切なものはどれか。

ア)WebアプリケーションファイアウォールをWebサーバの前段に設置し、すべてのHTTPリクエストを検査してSQLインジェクションの試みを遮断する。

イ)データベースへのクエリにプリペアドステートメント(パラメータ化クエリ)を使用し、入力値をSQL文の一部として解釈しないようにする。

ウ)入力文字列の長さを制限し、一定文字数を超えるリクエストをすべて拒否することで、長いSQLペイロードの送込みを防止する。

エ)データベースの接続パスワードを定期的に変更し、推測困難な複雑なパスワードを設定することで、データベースへの不正ログインを防止する。

午前I の解答・解説を見る

正解:

解説: プリペアドステートメント(パラメータ化クエリ)はSQL文の構造をあらかじめデータベースエンジンに解析させ、後から渡すパラメータをデータとして扱う仕組みです。ユーザ入力がSQL構文の一部として解釈されないため、SQLインジェクションを根本的に防止できます。ア)WAFはSQL文のパターンマッチで一部攻撃を検知しますが、難読化や未知のペイロードにより迂回される可能性があり、根本対策にはなりません。ウ)文字数制限は短いペイロード(例:' OR 1=1--)には無効です。エ)DBパスワード管理は認証強化策であり、SQLインジェクション対策とは別の脅威に対する対策です。

午前II問題

SSRF(Server-Side Request Forgery)攻撃に関する記述として、最も適切なものはどれか。

ア)Webサーバがユーザの指定したURLに対してバックエンドからHTTPリクエストを発行する機能を悪用し、攻撃者が本来アクセスできない内部ネットワークのリソースや、クラウド環境のメタデータエンドポイントへアクセスさせる攻撃である。

イ)攻撃者が細工したXMLドキュメントをWebアプリに送信し、外部エンティティ参照機能を通じてサーバのローカルファイルを読み取ったり、内部システムへのリクエストを発行させる攻撃である。

ウ)正規ユーザのブラウザを悪用して、ユーザが意図しないHTTPリクエストをサーバに送信させることでデータ改ざんや不正操作を行う攻撃である。

エ)Webアプリのパラメータを通じてサーバのOSコマンドを実行させ、任意のファイル読み取りや外部との不正通信を実現する攻撃である。

午前II の解答・解説を見る

正解:

解説: SSRFはWebアプリがURLを取得・処理する機能(Webhookの検証、外部画像の取得、URLプレビューなど)を悪用します。AWSでは http://169.254.169.254/latest/meta-data/ にアクセスしてIAM認証情報を窃取するケースが代表的です。IMDSv2はセッショントークンを要求することでSSRF経由のIMDSアクセスを困難にします。イ)はXXE(XML External Entity Injection)の説明です。ウ)はCSRF(クロスサイトリクエストフォージェリ)の説明です。エ)はOSコマンドインジェクションの説明です。

午後問題

D社はオンラインショッピングサイトを運営している。同社はAWSクラウド上でシステムを運用しており、EC2インスタンス上にWebアプリケーションサーバを配置している。第三者機関によるセキュリティ診断の結果、以下の2つの脆弱性が報告された。

脆弱性A(商品検索機能): 商品検索API(GET /api/search?keyword=)において、keyword=スマホ' AND SLEEP(5)-- を指定したところ、APIの応答に約5秒の遅延が生じた。また keyword=スマホ' OR '1'='1'-- を指定すると、非公開商品を含む全レコードが返却された。

脆弱性B(プロフィール画像登録機能): ユーザが外部URLを登録すると、サーバ側でそのURLから画像を取得しリサイズして保存する仕組みになっている(POST /api/avatar、ボディに {"url":"..."} を指定)。診断担当者が urlhttp://169.254.169.254/latest/meta-data/iam/security-credentials/ec2-role を指定したところ、レスポンスにAWSのIAM一時認証情報(AccessKeyIdSecretAccessKeyToken)が含まれた。

設問1

脆弱性Aで SLEEP(5) を利用した攻撃手法の名称を答えよ。また、このSQLインジェクション脆弱性を根本的に修正するための実装上の対策を1つ具体的に述べよ。

設問1の解答・解説を見る

正解例:

  • 攻撃手法の名称:ブラインドSQLインジェクション(Time-based blind SQL injection)
  • 対策:データベースへの問い合わせにプリペアドステートメント(パラメータ化クエリ)を使用し、ユーザの入力値がSQL構文として解釈されないようにする。

解説: SLEEP() 関数を用いてデータベースの応答時間を意図的に遅延させ、SQL文の評価結果(真偽)を間接的に判定する手法をTime-based blind SQL injectionといいます。エラーメッセージが非表示であってもデータを抽出できるため、通常の診断では見逃されやすい危険な攻撃です。根本的な対策はプリペアドステートメントの使用ですが、Webアプリに付与するDBユーザ権限を最小化(読み取り専用権限の付与など)することも被害の局限に有効です。

採点基準:

  • 攻撃名称に「ブラインドSQLインジェクション」または「Time-based」への言及(3点)
  • 対策に「プリペアドステートメント」または「パラメータ化クエリ」が含まれる(3点)

設問2

脆弱性BはSSRF攻撃によるものである。診断担当者が http://169.254.169.254/ を指定した目的を答えよ。また、このSSRF脆弱性の対策として実装すべき措置を2つ挙げよ。

設問2の解答・解説を見る

正解例:

  • 目的:AWSのInstance Metadata Service(IMDS)に対してリクエストを発行させ、EC2インスタンスに付与されたIAMロールの一時的な認証情報(アクセスキー・シークレットキー・セッショントークン)を窃取すること。取得した認証情報を悪用することでAWSリソースへの不正アクセスや権限昇格が可能になる。
  • 対策①:ユーザが指定したURLのIPアドレスを解決し、プライベートIPアドレス範囲(169.254.0.0/16、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16等)やループバックアドレスへのリクエストを拒否する。
  • 対策②:外部リソース取得機能を許可リスト(ホワイトリスト)方式に変更し、許可された特定のドメインまたはURLのみアクセスを許可し、それ以外はすべて拒否する。

解説: AWSのIMDS(169.254.169.254)はEC2インスタンス内からのみアクセス可能なリンクローカルアドレスです。SSRFを悪用するとWebサーバ経由でIMDSにアクセスでき、IAMロールの一時認証情報を入手して大規模なクラウドリソース侵害につながります。IMDSv2(セッショントークン必須化)への移行も有効な対策ですが、アプリ側でのリクエスト制限(許可リスト・IPブロック)と組み合わせるべきです。

採点基準:

  • 目的に「IMDS」または「IAM認証情報の窃取」への言及(3点)
  • 対策①にIPアドレス検証・プライベートIP拒否(2点)
  • 対策②に許可リスト方式またはIMDSv2への言及(2点)

重要キーワード

用語説明
SQLインジェクションWebアプリのSQL構文の隙間に悪意あるSQL文を挿入し、DBの不正操作やデータ窃取を行う攻撃
プリペアドステートメントSQL文の構造を先にDBエンジンに解析させ、パラメータをデータとして渡すことでSQLインジェクションを防止する実装手法
SSRF(Server-Side Request Forgery)Webアプリのバックエンドリクエスト機能を悪用し、内部リソースやIMDSへの不正アクセスを行う攻撃
IMDS(Instance Metadata Service)AWSのEC2インスタンスがメタデータやIAM認証情報を取得するためのリンクローカルエンドポイント(169.254.169.254)
ブラインドSQLインジェクションエラーメッセージが非表示でも応答時間や内容の差異を観察してSQL実行結果を間接的に推測する攻撃手法
許可リスト(ホワイトリスト)方式拒否リスト方式より安全な、あらかじめ許可した対象のみアクセスを認めるSSRF対策の設計原則

まとめ

  • 午前I視点: SQLインジェクションの根本対策は「プリペアドステートメント」。WAFや文字数制限は補完的手段に過ぎず、根本対策にならないことを押さえる
  • 午前II視点: SSRFはCSRF・XXE・OSコマンドインジェクションと混同しやすい。「サーバ側が外部URLへリクエストを発行する」点がSSRFの核心。クラウド環境でのIMDS悪用パターンも頻出
  • 午後視点: ブラインドSQLiとSSRFが共存する複合シナリオが出題されやすい。各攻撃の目的・手口・対策を実装レベルで説明できるようにする