Webページ上で入力した文字列から不正にシェルスクリプトを起動させる攻撃|情報処理安全確保支援士 平成29年 春期午前Ⅱ試験 問12
出典:平成29年春期 午前Ⅱ 問12
分野:セキュリティ / 情報セキュリティ
Webアプリケーションの脆弱性を悪用する攻撃手法のうち,Webページ上で入力した文字列がPerlのsystem関数やPHPのexec関数などに渡されることを利用し,不正にシェルスクリプトを実行させるものは,どれに分類されるか。
- ア:HTTPヘッダーインジェクション
- イ:OSコマンドインジェクション
- ウ:クロスサイトリクエストフォージェリ
- エ:セッションハイジャック
TSUNAGARU-ADVICE
まず押さえたいこと
Webページで入力された文字列が、Perlのsystem関数やPHPのexec関数などに渡され、不正にシェルスクリプトを実行させる攻撃はOSコマンドインジェクションです。入力値がOSのコマンドとして解釈されてしまうことで、サーバ上で意図しないコマンドを実行される点が特徴です。
迷ったときの判断軸
HTTPヘッダーインジェクションはHTTPヘッダーを不正に操作する攻撃、クロスサイトリクエストフォージェリは利用者に意図しないリクエストを送信させる攻撃、セッションハイジャックはセッションIDなどを悪用して利用者になりすます攻撃です。system関数・exec関数・シェルスクリプト?OSコマンドといった語が出たら、OSコマンドインジェクションと判断しましょう。
科目Bにつなげるために
科目Bでは、Webアプリケーションの入力値・外部コマンド呼出し・CGI・ログ・サーバ権限などと絡めて問われることがあります。対策としては、入力値をそのままシェルに渡さない、安全なAPIを使う、入力値検証を行う、実行権限を最小化するなど、入力値がOSコマンドとして解釈されない設計を意識しましょう。
OSコマンドインジェクションは、Webアプリケーションに入力した文字列をOSコマンドの一部として解釈させ、不正なコマンドを実行させる攻撃です。
Perlのsystem関数やPHPのexec関数は、OS上でコマンドを実行するための関数です。入力値を十分に検証せずこれらの関数へ渡すと、攻撃者がシェルの制御文字やコマンドを混入させ、ファイルの閲覧・変更などを行うおそれがあります。
したがって、イが適切です。
❌他選択肢が誤りの理由ア:HTTPヘッダーインジェクション
⇒HTTPレスポンスヘッダーに改行コードなどを挿入し、不正なヘッダーやレスポンス本文を追加する攻撃です。OSのシェルコマンドを実行させる攻撃ではありません。
ウ:クロスサイトリクエストフォージェリ
⇒ログイン中の利用者に意図しないリクエストを送信させ、利用者の権限で処理を実行させる攻撃です。system関数やexec関数を悪用するものではありません。
エ:セッションハイジャック
⇒セッションIDを盗取・推測するなどして、正規利用者のセッションを乗っ取る攻撃です。入力値を利用してOSコマンドを実行させる攻撃とは異なります。