問題 28★★☆

社内の管理用Webツールに、画面で入力したホスト名に対して疎通確認を行う機能がある。 この機能は、入力値をそのまま文字列としてつなげてOSのコマンドを組み立て、サーバ上で実行していた。 この作りの不備を突かれた場合に想定すべき被害として、最も適切なものはどれか。

正解:エ

各選択肢の解説

  1. ア攻撃者が送った不正なSQL文が実行され、データベースの内容を読み出される。

    誤り。これはSQLインジェクションの被害です。入力値を命令の一部としてつなげる点は同じなので 混同しやすいですが、この機能が組み立てているのはSQL文ではなくOSのコマンドです。 入力値がどの命令に入り込むかで区別します。

  2. イツールを開いた別の担当者のブラウザで、埋め込まれたスクリプトが動作する。

    誤り。これはクロスサイトスクリプティングの被害で、入力値を画面に出力するときの不備が原因です。 スクリプトが動くのは利用者のブラウザです。この機能の入力値は画面ではなく、 サーバ上で実行されるコマンドに渡っています。

  3. ウログイン中の担当者が罠サイトを開くと、本人の権限でツールの操作が送られる。

    誤り。これはクロスサイトリクエストフォージェリ(CSRF)の被害で、要求が本人の意図か 確かめていないことが原因です。入力値の扱いとは別の不備です。 この場面で問題になっているのは、入力値がコマンドとして実行される作りです。

  4. エ攻撃者の指定した命令がサーバ上で動き、ファイルの改ざんや他所への攻撃に使われる。

    正解。入力値に「;」などの区切り記号と別のコマンドを続けると、疎通確認に続けて そのコマンドまで実行されます。サーバを操作されるので、改ざんや踏み台など被害は広く及びます。

理解を深めるために

「ついでにこれも実行して」が通ってしまう

総務の窓口に「この宛先に書類を送って」と書いた依頼票を出すとします。窓口が依頼票の文面を そのまま作業指示として読み上げるなら、「送って。それから金庫を開けて」と書き足された依頼も そのまま実行されてしまいます。入力値をOSのコマンドに組み込んで実行するWebアプリで これが起きるのがOSコマンドインジェクションです。

なぜ被害が広く及ぶのか

  • 疎通確認のような機能は、入力値をコマンドの引数として組み立てて実行することがある
  • 入力値に区切り記号と別のコマンドを続けると、本来のコマンドのあとに攻撃者のコマンドも実行される
  • 実行されるのはサーバ上なので、ファイルの閲覧・改ざん・削除、マルウェアの設置、 他のシステムへの攻撃の踏み台など、サーバでできることが一通り悪用されうる

IPAの「安全なウェブサイトの作り方」は、根本的解決として、シェルを起動できる言語機能の 利用を避け、他の関数などで代替することを挙げています。使う場合は、引数を構成するすべての値を チェックし、許可した処理だけを実行する(保険的対策)としています。

混同しやすいものとの違い

攻撃 不備がある場所 被害が出るところ
OSコマンドインジェクション 入力値でOSのコマンドを組み立てる処理 サーバそのもの(任意のコマンド実行)
SQLインジェクション 入力値でSQL文を組み立てる処理 データベースの内容
クロスサイトスクリプティング 入力値を画面に出力する処理 閲覧した利用者のブラウザ
CSRF 要求が本人の意図か確かめない処理 ログイン中の利用者の権限での操作

場面に「入力値をつなげて〇〇を組み立てる」とあれば、〇〇に何が入るかで攻撃名が決まります。

前の問題へ次の問題へ