今回はwebセキュリティの内のOSコマンド・インジェクションについて、IPAの資料を基におさらいします。
OSコマンド・インジェクション
ウェブアプリケーションによっては、外部からの攻撃のよってウェブサーバーのOSコマンドを不正に実行されてしまう問題を持つものがあります。
発生し得る脅威
- サーバ内ファイルの閲覧・改竄・削除
重要情報の漏洩、設定ファイルの改竄 等 - 不正なシステム操作
意図しないOSのシャットダウン、ユーザーアカウントの追加・変更 等 - 不正なプログラムのダウンロード・実行
ウイルス・ワーム・ボット等への感染、バックドアの設置 等 - 他のシステムへの攻撃の踏み台
サービス不能攻撃、システム攻略のための調査、迷惑メールの送信 等
注意が必要なウェブサイトの特徴
外部のプログラムを呼び出し可能な関数などを使用しているウェブアプリケーションに注意が必要です。
外部プログラムを呼び出し可能な関数の例:PHP exec(), shell_exec(), system(), popen 等
根本的解決
- シェルを利用できる言語機能の利用を避ける
ウェブアプリケーションに利用される言語によっては、シェルを起動できる機能を持つものがあります。例えば、Perlのopen関数は引数として与えるファイルパスに「|」(パイプ)を使うことでOSコマンドを実行できるため、外部からの入力を引数として利用する実装は危険です。シェルを起動できる言語機能の利用は避けて他関数で代替します。
保険的対策
- シェルを起動できる言語機能を利用する場合は、その引数を構成するすべての変数に対してチェックを行い、あらかじめ許可した処理のみを実行する
シェルを起動できる言語機能の引数を構成する変数に対して、引数に埋め込む前にチェックをかけ、本来想定する動作を実行するように実装します。
今日はOS・インジェクションについて軽くおさらいしました。詳しくは以下のサイトを参照してください。