正解:エ
各選択肢の解説
ア攻撃者が送った不正なSQL文が実行され、データベースの内容を読み出される。
誤り。これはSQLインジェクションの被害です。入力値を命令の一部としてつなげる点は同じなので 混同しやすいですが、この機能が組み立てているのはSQL文ではなくOSのコマンドです。 入力値がどの命令に入り込むかで区別します。
イツールを開いた別の担当者のブラウザで、埋め込まれたスクリプトが動作する。
誤り。これはクロスサイトスクリプティングの被害で、入力値を画面に出力するときの不備が原因です。 スクリプトが動くのは利用者のブラウザです。この機能の入力値は画面ではなく、 サーバ上で実行されるコマンドに渡っています。
ウログイン中の担当者が罠サイトを開くと、本人の権限でツールの操作が送られる。
誤り。これはクロスサイトリクエストフォージェリ(CSRF)の被害で、要求が本人の意図か 確かめていないことが原因です。入力値の扱いとは別の不備です。 この場面で問題になっているのは、入力値がコマンドとして実行される作りです。
エ攻撃者の指定した命令がサーバ上で動き、ファイルの改ざんや他所への攻撃に使われる。
正解。入力値に「;」などの区切り記号と別のコマンドを続けると、疎通確認に続けて そのコマンドまで実行されます。サーバを操作されるので、改ざんや踏み台など被害は広く及びます。
理解を深めるために
「ついでにこれも実行して」が通ってしまう
総務の窓口に「この宛先に書類を送って」と書いた依頼票を出すとします。窓口が依頼票の文面を そのまま作業指示として読み上げるなら、「送って。それから金庫を開けて」と書き足された依頼も そのまま実行されてしまいます。入力値をOSのコマンドに組み込んで実行するWebアプリで これが起きるのがOSコマンドインジェクションです。
なぜ被害が広く及ぶのか
- 疎通確認のような機能は、入力値をコマンドの引数として組み立てて実行することがある
- 入力値に区切り記号と別のコマンドを続けると、本来のコマンドのあとに攻撃者のコマンドも実行される
- 実行されるのはサーバ上なので、ファイルの閲覧・改ざん・削除、マルウェアの設置、 他のシステムへの攻撃の踏み台など、サーバでできることが一通り悪用されうる
IPAの「安全なウェブサイトの作り方」は、根本的解決として、シェルを起動できる言語機能の 利用を避け、他の関数などで代替することを挙げています。使う場合は、引数を構成するすべての値を チェックし、許可した処理だけを実行する(保険的対策)としています。
混同しやすいものとの違い
| 攻撃 | 不備がある場所 | 被害が出るところ |
|---|---|---|
| OSコマンドインジェクション | 入力値でOSのコマンドを組み立てる処理 | サーバそのもの(任意のコマンド実行) |
| SQLインジェクション | 入力値でSQL文を組み立てる処理 | データベースの内容 |
| クロスサイトスクリプティング | 入力値を画面に出力する処理 | 閲覧した利用者のブラウザ |
| CSRF | 要求が本人の意図か確かめない処理 | ログイン中の利用者の権限での操作 |
場面に「入力値をつなげて〇〇を組み立てる」とあれば、〇〇に何が入るかで攻撃名が決まります。