情報セキュリティ
ウェブアプリケーションによっては、外部からの攻撃により、ウェブサーバのOSコマンドを不正に実行されてしまう問題を持つものがあります。このような問題を「OSコマンド・インジェクションの脆弱性」と呼び、問題を悪用した攻撃手法を、「OSコマンド・インジェクション攻撃」と呼びます。
OS コマンド・インジェクション攻撃により、発生しうる脅威は次のとおりです。
重要情報の漏えい、設定ファイルの改ざん 等
意図しないOS のシャットダウン、ユーザアカウントの追加、変更 等
ウイルス、ワーム、ボット等への感染、バックドアの設置 等
サービス不能攻撃、システム攻略のための調査、迷惑メールの送信 等
運営主体やウェブサイトの性質を問わず、外部プログラムを呼び出し可能な関数等(脚注1)を使用しているウェブアプリケーションに注意が必要な問題です。
OSコマンド・インジェクションの脆弱性は、Perlで開発されたウェブアプリケーションや、組み込み製品の管理画面で使用されるCGIプログラム等のソフトウェア製品に発見され、届出を受けています。下記は、IPAが届出を受け、同脆弱性の対策が施されたソフトウェア製品の例です。
ウェブアプリケーションに利用されている言語によっては、シェルを起動できる機能を持つものがあります。たとえば、Perlのopen関数等です。Perlのopen関数は、引数として与えるファイルパスに「|」(パイプ)を使うことでOSコマンドを実行できるため、外部からの入力値を引数として利用する実装は危険です。シェルを起動できる言語機能の利用は避けて(脚注2)、他の関数等で代替してください。Perlでファイルを開く場合、sysopen関数を利用すればシェルを起動することはありません。
シェルを起動できる言語機能の引数を構成する変数に対し、引数に埋め込む前にチェックをかけ、本来想定する動作のみを実行するように実装してください。チェック方法には、その引数に許可する文字の組み合わせを洗い出し、その組み合わせ以外は許可しない「ホワイトリスト方式」をお勧めします。数値を示すはずのパラメータであれば、数字のみからなる文字列であることをチェックします。チェックの結果、許可しない文字の組み合わせが確認された場合は、引数へ渡さず、処理を中止します。
なお、チェック方法には、OSコマンド・インジェクション攻撃に悪用される記号文字(「|」、「<」、「>」等)等、問題となりうる文字を洗い出し、これを許可しない「ブラックリスト方式」もありますが、この方法はチェックに漏れが生じる可能性があるため、お勧めできません。
以上の対策により、OSコマンド・インジェクション攻撃に対する安全性の向上が期待できます。OSコマンド・インジェクションの脆弱性に関する情報については、次の資料も参考にしてください。