情報処理安全確保支援士試験 令和5年秋期午前Ⅱ 不正なシェルスクリプト
出典:令和5年秋期 午前Ⅱ 問1
分野:セキュリティ / 情報セキュリティ
Webアプリケーションソフトウェアの脆弱性を悪用する攻撃手法のうち,入力した文字列がPHPのexec関数などに渡されることを利用し,不正にシェルスクリプトを実行させるものは,どれに分類されるか。
- ア:HTTPヘッダーインジェクション
- イ:OSコマンドインジェクション
- ウ:クロスサイトリクエストフォージェリ
- エ:セッションハイジャック
TSUNAGARU-ADVICE
まず押さえたいこと
OSコマンドインジェクションは、Webアプリケーションに入力した文字列がOSコマンドとして解釈され、本来実行されるべきでないシェルスクリプトやコマンドを実行させる攻撃です。
迷ったときの判断軸
PHPのexec関数のように、外部コマンドを実行する関数へ利用者入力が渡される場合は注意が必要です。入力値に「;」や「&&」などを混ぜて別のコマンドを実行させる流れなら、OSコマンドインジェクションと整理すると判断しやすくなります。
科目Bにつなげるために
科目Bでは、攻撃名を覚えるだけでなく、入力値がどこでどのように解釈されるかを読み取る力が問われます。SQL文に渡されるならSQLインジェクション、OSコマンドに渡されるならOSコマンドインジェクションのように、入力値の到達先で切り分けて理解しておきましょう。
OSコマンドインジェクションは、Webアプリケーションの入力欄などに不正なOSコマンドを入力し、サーバ上で本来実行されるべきではない命令を動かす攻撃です。
Webアプリケーションの中には、利用者が入力した値を使って、サーバのOSにコマンドを実行させるものがあります。たとえば、ファイルを検索する処理や、外部プログラムを呼び出す処理などです。
このとき、入力値のチェックが不十分だと、攻撃者が本来の入力に加えて別のOSコマンドを紛れ込ませることがあります。その結果、サーバ上のファイルを不正に操作されたり、外部プログラムを実行されたり、重要情報を盗まれたりするおそれがあります。
多くのプログラミング言語には、文字列をOSのシェルに渡して実行する機能があります。たとえば、PHPのexec、Perlのopen、Pythonのsubprocess.callなどです。外部から受け取った入力値を十分に検証せず、これらの機能に渡すと、攻撃者に任意のコマンドを実行されるリスクがあります。
つまり、OSコマンドインジェクションは「入力値に紛れ込んだ命令を、サーバがそのまま実行してしまう攻撃」と考えると分かりやすいです。
したがって、イが適切です。
❌他選択肢が誤りの理由ア:HTTPヘッダーインジェクション
⇒HTTPレスポンスヘッダーなどに改行コードを注入し、任意のヘッダーを追加・改ざんする攻撃です。OSコマンドを実行させる攻撃ではありません。
ウ:クロスサイトリクエストフォージェリ
⇒ログイン済み利用者に意図しないリクエストを送信させる攻撃です。OSコマンドを実行させる攻撃ではありません。
エ:セッションハイジャック
⇒セッションIDなどを盗用して、利用者になりすます攻撃です。OSコマンドを実行させる攻撃ではありません。