ホーム > 情報処理安全確保支援士試験 > 2022年 春期
情報処理安全確保支援士試験 2022年 春期 午前2 問01
Webサーバのログを分析したところWebサーバへの攻撃と思われるHTTPリクエストヘッダが記録されていた。次のHTTPリクエストヘッダから推測できる攻撃者が悪用しようとしていた可能性が高い脆弱性はどれか。ここでHTTPリクエストヘッダ中の%20は空白を意味する。
〔HTTPリクエストヘッダの一部〕
GET /cgi-bin/submit.cgi?user=;cat%20/etc/passwd HTTP/1.1
Accept: /
Accept-Language: ja
UA-CPU: x86 Accept-Encoding: gzip, deflate
User-Agent: (省略)
Host: test.example.com
Connection: Keep-Alive
ア:HTTPヘッダインジェクション(HTTP Response Splitting)
イ:OSコマンドインジェクション(正解)
ウ:SQLインジェクション
エ:クロスサイトスクリプティング
解説
Webサーバのログに記録されたHTTPリクエストヘッダから推測される脆弱性【午前2 解説】
要点まとめ
- 結論:HTTPリクエストのパラメータに「;cat /etc/passwd」が含まれているため、OSコマンドインジェクションの可能性が高いです。
- 根拠:パラメータ内の「;」はコマンドの区切りを意味し、シェルコマンドを直接実行させる攻撃手法に該当します。
- 差がつくポイント:HTTPヘッダの内容だけでなく、URLパラメータの意味やシェルコマンドの構造を理解し、攻撃の種類を正確に見抜くことが重要です。
正解の理由
HTTPリクエストのURLパラメータに「;cat /etc/passwd」が含まれている点が決め手です。
「;」はシェルで複数コマンドを連結するための区切り文字であり、これを悪用して任意のOSコマンドを実行させる攻撃がOSコマンドインジェクションです。
「cat /etc/passwd」はLinux系OSのユーザ情報ファイルを表示するコマンドであり、攻撃者がシステム情報を不正に取得しようとしていることが明らかです。
したがって、選択肢の中で最も適切なのはイ: OSコマンドインジェクションです。
「;」はシェルで複数コマンドを連結するための区切り文字であり、これを悪用して任意のOSコマンドを実行させる攻撃がOSコマンドインジェクションです。
「cat /etc/passwd」はLinux系OSのユーザ情報ファイルを表示するコマンドであり、攻撃者がシステム情報を不正に取得しようとしていることが明らかです。
したがって、選択肢の中で最も適切なのはイ: OSコマンドインジェクションです。
よくある誤解
SQLインジェクションやクロスサイトスクリプティングはパラメータの内容や文脈が異なり、コマンド区切り文字「;」を使う攻撃とは性質が違います。
HTTPヘッダインジェクションはレスポンス分割に関わるもので、今回のリクエストパラメータとは直接関係ありません。
HTTPヘッダインジェクションはレスポンス分割に関わるもので、今回のリクエストパラメータとは直接関係ありません。
解法ステップ
- HTTPリクエストのURLパラメータ部分を確認する。
- 「;」や「%20(空白)」が含まれているかをチェックする。
- 「;cat /etc/passwd」がシェルコマンドであることを認識する。
- OSコマンドインジェクションの特徴と照らし合わせる。
- 選択肢の中から最も該当する攻撃を選ぶ。
選択肢別の誤答解説
- ア: HTTPヘッダインジェクション(HTTP Response Splitting)
→ HTTPヘッダの改行や特殊文字を悪用する攻撃であり、URLパラメータのコマンド実行とは異なります。 - イ: OSコマンドインジェクション
→ 正解。URLパラメータにシェルコマンドが含まれており、OSコマンドを実行させる攻撃です。 - ウ: SQLインジェクション
→ SQL文の構造を破壊する攻撃ですが、今回の「;cat /etc/passwd」はSQL文ではなくシェルコマンドです。 - エ: クロスサイトスクリプティング
→ JavaScriptなどのスクリプトを埋め込む攻撃であり、シェルコマンドの実行とは無関係です。
補足コラム
OSコマンドインジェクションは、Webアプリケーションがユーザ入力を適切に検証せずにシェルコマンドに渡すことで発生します。
特にCGIスクリプトは外部コマンドを呼び出すことが多いため、入力値の検証やエスケープ処理が必須です。
また、「/etc/passwd」はLinux系OSのユーザ情報ファイルであり、攻撃者はこれを閲覧してシステム情報を得ようとします。
特にCGIスクリプトは外部コマンドを呼び出すことが多いため、入力値の検証やエスケープ処理が必須です。
また、「/etc/passwd」はLinux系OSのユーザ情報ファイルであり、攻撃者はこれを閲覧してシステム情報を得ようとします。
FAQ
Q: なぜ「;」がOSコマンドインジェクションの兆候なのですか?
A: 「;」はシェルで複数コマンドを連結するための区切り文字であり、これを使うことで任意のコマンドを追加実行できます。
A: 「;」はシェルで複数コマンドを連結するための区切り文字であり、これを使うことで任意のコマンドを追加実行できます。
Q: SQLインジェクションとOSコマンドインジェクションの違いは何ですか?
A: SQLインジェクションはデータベース操作を不正に行う攻撃で、OSコマンドインジェクションはOSのシェルコマンドを不正に実行させる攻撃です。
A: SQLインジェクションはデータベース操作を不正に行う攻撃で、OSコマンドインジェクションはOSのシェルコマンドを不正に実行させる攻撃です。
関連キーワード: OSコマンドインジェクション, CGI, HTTPリクエストヘッダ, セキュリティ脆弱性, Web攻撃手法