ホーム > 情報処理安全確保支援士試験 > 2018年 春期
情報処理安全確保支援士試験 2018年 春期 午前2 問02
Web サーバのログを分析したところ, Web サーバへの攻撃と思われる HTTP リクエストヘッダが記録されていた。次の HTTP リクエストヘッダから推測できる, 攻撃者が悪用しようとしている脆弱性はどれか。ここで, HTTP リクエストヘッダはデコード済みである。
〔HTTPリクエストヘッダの部分〕
GET/cgi-bin/submit.cgi?user=;cat/etc/passwdHTTP/1.1
Accept:/
Accept-Language:ja
UA-CPU:x86
Accept-Encoding:gzip,deflate
User-Agent:(省略)
Host:test.example.com
Connection:Keep-Alive
ア:HTTPヘッダインジェクション
イ:OSコマンドインジェクション(正解)
ウ:SQLインジェクション
エ:クロスサイトスクリプティング
解説
WebサーバのHTTPリクエストヘッダから推測される脆弱性【午前2 解説】
要点まとめ
- 結論:攻撃者はOSコマンドインジェクションを狙っている可能性が高いです。
- 根拠:リクエストURIに「;cat /etc/passwd」とあり、コマンド区切り文字「;」を使ってOSコマンドを実行しようとしているためです。
- 差がつくポイント:HTTPヘッダではなくリクエストラインのパラメータ部分に注目し、コマンド実行の痕跡を見抜くことが重要です。
正解の理由
リクエストラインの「GET /cgi-bin/submit.cgi?user=;cat /etc/passwd HTTP/1.1」には、パラメータ「user=」の後にセミコロン「;」があり、その後にLinuxのコマンド「cat /etc/passwd」が続いています。これは、サーバ側でパラメータをOSコマンドとして実行する処理がある場合に、コマンドを追加で実行させる攻撃手法です。
この特徴はOSコマンドインジェクションに典型的であり、SQLインジェクションやクロスサイトスクリプティングとは異なります。HTTPヘッダインジェクションはHTTPヘッダの改ざんを狙う攻撃であり、今回のリクエストラインの内容とは異なります。
したがって、正解はイ: OSコマンドインジェクションです。
この特徴はOSコマンドインジェクションに典型的であり、SQLインジェクションやクロスサイトスクリプティングとは異なります。HTTPヘッダインジェクションはHTTPヘッダの改ざんを狙う攻撃であり、今回のリクエストラインの内容とは異なります。
したがって、正解はイ: OSコマンドインジェクションです。
よくある誤解
- 「;」がSQLの区切り文字と混同されやすいですが、SQLインジェクションでは通常「'」や「--」などが使われます。
- HTTPヘッダの改ざんとリクエストラインのパラメータ改ざんを混同しないことが重要です。
解法ステップ
- HTTPリクエストのどの部分に注目すべきかを確認する(今回はリクエストライン)。
- パラメータの値に不審な文字列やコマンドが含まれていないかを探す。
- 「;cat /etc/passwd」の意味を理解し、OSコマンド実行を狙った攻撃と判断する。
- 選択肢の攻撃手法の特徴と照らし合わせて正解を選ぶ。
選択肢別の誤答解説
- ア: HTTPヘッダインジェクション
→ HTTPヘッダの改ざんを狙う攻撃であり、今回のリクエストラインのコマンド実行とは異なります。 - イ: OSコマンドインジェクション
→ 正解。パラメータにOSコマンドを埋め込み、サーバで実行させようとしています。 - ウ: SQLインジェクション
→ SQL文の構造を壊す攻撃ですが、今回の「;cat /etc/passwd」はSQL文ではなくOSコマンドです。 - エ: クロスサイトスクリプティング
→ JavaScriptなどのスクリプトを埋め込む攻撃であり、コマンド実行とは異なります。
補足コラム
OSコマンドインジェクションは、Webアプリケーションが外部コマンドを実行する際に、ユーザ入力を適切に検証・無害化しない場合に発生します。攻撃者は「;」や「&&」などのコマンド区切り文字を使い、任意のコマンドを実行させることが可能です。対策としては、パラメータの厳格なバリデーションや、OSコマンドの直接実行を避ける設計が推奨されます。
FAQ
Q: なぜ「;」が危険なのですか?
A: 「;」はシェルで複数コマンドを区切る記号であり、これを使うと本来のコマンドに続けて任意のコマンドを実行できます。
A: 「;」はシェルで複数コマンドを区切る記号であり、これを使うと本来のコマンドに続けて任意のコマンドを実行できます。
Q: SQLインジェクションとOSコマンドインジェクションはどう違いますか?
A: SQLインジェクションはデータベース操作を不正に行う攻撃で、OSコマンドインジェクションはサーバOSのコマンドを不正に実行する攻撃です。
A: SQLインジェクションはデータベース操作を不正に行う攻撃で、OSコマンドインジェクションはサーバOSのコマンドを不正に実行する攻撃です。
関連キーワード: OSコマンドインジェクション, HTTPリクエスト解析, Webセキュリティ, コマンドインジェクション対策, 攻撃手法識別