OSコマンドインジェクション


今回はOSコマンドインジェクションについて問題と対策方法を紹介します。

■OSコマンドインジェクションの脅威

<OSコマンドインジェクションとは?>
   閲覧者からのデータの入力や操作を受け付けるようなWEBサイトで、プログラムに与えるパラメータにOSに対する命令文(コマンド)を紛れ込ませて不正に操作する攻撃。

では、OSコマンドインジェクションで起こる被害にはどんなものがあるでしょうか、以下で見てみましょう。

<OSコマンドインジェクションでの被害>
 OSコマンドインジェクションで発生する被害は以下のものがあります。

情報漏えい、ファイルの改ざん・削除
不正なシステム操作
ウィルスなどのマルウェア感染
踏み台にされ他サイトへ攻撃


■脆弱性の原因

 WEBサーバー上でOSコマンドを実行されてしまうような脆弱性がうまれる原因は、1行の指定で複数のプログラムを起動するというシェル機能の悪用によって発生します。 シェルとは、ユーザの操作を受け付けて、与えられた指示をOSの中核部分に伝えるソフトウェアです。Windowsではコマンドプロンプト、UNIX系ではbashやcshがシェルにあたります。悪用の条件は以下の3つです。

     (A)シェルを呼び出す機能のある関数(system、openなど)を利用している。
     (B)シェル呼び出し機能のある関数にパラメータを渡している。
     (C)パラメータ内に含まれるシェルのメタ文字をエスケープしていない。

(例)

 上記の図は、WEBアプリケーションがWEB画面でユーザにメールアドレスを入力させ、そのアドレスに自動配信する仕様のものです。

上記で送信ボタンがクリックされた場合に渡されるプログラムは以下のとおりです。

正常な入力データであると・・・

不正な入力データであると・・・

というように、test@test.comにメール送信した後に、”rm -rf /”を実行してしまいます。
rmコマンドはファイル/ディレクトリを削除するというコマンドです。

例 対策                               

 上記の原因であげた例の対策を以下で紹介します。
  1.外部プログラムを呼びださない。
  2.サニタイジングを実施する。
 サニタイジングとは、WEBサイトの入力フォームへの入力データから、HTMLタグ、JavaScript、SQL文などを検出し、それらを他の文字列に置き換える操作のことです。 ここでは上記のプログラムのサニタイジングの例を以下に示します。



■OSコマンドインジェクションの対策

上記の例の対策は紹介しましたが、ここでOSコマンドインジェクション全体の対策を紹介します。
OSコマンドインジェクションの対策には以下のものがあります。

    1.OSコマンド呼び出しを使わない実装方法を選択する。
    2.シェル呼び出し機能のある関数の利用を避ける。
    3.外部から入力された文字列をコマンドラインのパラメータに渡さない。
    4.OSコマンドに渡すパラメータを安全な関数によりエスケープする。

 OSコマンドインジェクションのそもそもの根本的対策は、1番の「OSコマンド呼び出しを使わない実装方法を選ぶ」ことです。OSコマンドインジェクションの原因を作らないことになります。  

 2番のシェル呼び出し機能のある関数ですが、例えば、Perl言語のopen関数です。 open関数は引数として与えるファイルパスに|(パイプ)を使うことで、OSコマンドを実行できてしまいます。入力フォームなどを実装する際には危険です。 このようなシェルを起動できる言語機能を避ける必要があります。他の関数で代替できる場合があります。今あげたopen関数は、sysopen関数にすることができます。



■まとめ

 OSコマンドインジェクションは、情報漏えい、改ざん・削除、不正なシステムの操作、ウィルス感染などの被害が起こります。そして踏み台にされ、他サイトへの攻撃をされてしまったときには、自分は悪くなくても、加害者になるという可能性があります。 そのためにしっかりと対策をとりましょう。  第一にOSコマンドを呼び出すような実装方法はできるだけなくすようにしましょう。そうすることで、そもそもの根本的原因をなくすことができます。また、それが不可能な場合には、シェル呼び出し機能のある関数の利用を避けることや、例であげたサニタイジングをすることが重要 になってきます。



【参考URL】
SEのための情報セキュリティ対策
http://www.chuu-information.com/security/gyou_a_2.html
IPA OSコマンドインジェクション
https://www.ipa.go.jp/security/vuln/vuln_contents/oscmd.html
Webセキュリティの小部屋
http://www.websec-room.com/2013/03/20/664
Perlの危険な関数
https://www.ipa.go.jp/security/awareness/vendor/programmingv1/a04_02_main.html



 トップへ戻る