悪意のあるファイルの実行


ユーザーの入力データを使用してファイル名、ライブラリ名、URL などを生成してリソースにアクセスするアプリケーションに脆弱性があると、本来許可されないリソースを読み込ませて任意のコードを実行したり、ファイルの内容を改ざんしたりといった攻撃が可能になる場合があります。

悪意のあるファイルの実行の例

サーバー上のファイルにユーザー固有のデータ ( ここではユーザーの書いたエッセイ ) を格納するアプリケーションがあるものとします。
ファイル名にはエッセイの題名が使用されます。

悪意のあるファイルの実行の例

この場合、悪意のあるユーザーがエッセイのタイトルとして c:¥¥windows¥¥system.ini を渡し、エッセイの中身としてコンフィギュレーション ファイルの内容を渡した場合、この“エッセイ”を保存すると、システムの重要なファイルが改ざんされて危険な内容が保存されます。

対策

必ずユーザーからの入力を検証してから使用するようにします。
また、セキュリティ・マネージャーを有効にし、アプリケーションに適切なアクセス・ポリシーを適用します。

Jtestのルール

ファイル名に対するインジェクションから防御する

このルールは、悪意のあるファイル名を含む可能性のあるエンド ユーザーからのデータを使ってファイル名を生成し、アクセスしている場合に違反をレポートします。このルールはフロー解析ルールなので、入力データの取得とファイルアクセスが別のメソッドに分かれていたり、複数の実行パスが存在する場合でも、実行パスを辿って違反を検出することができます。

  • チェックできる入力データ
    • リモート メソッドおよびエントリ ポイント メソッドのパラメータ
    • ネイティブ メソッド
    • 検証を行っていない Struts フォーム
    • ネットワーク
    • Servlet リクエスト
    • ファイル
    • パイプ
    • リモート メソッド
    • リフレクション メソッド
    • 環境変数およびシステム プロパティ
    • データベース
    • ストリーム指向 API (ストリーム、リーダー、チャネル)
    • コンソール
    • GUI コントロール
  • チェックできるファイルアクセス メソッド
    • File.File(...)
    • FileInputStream.FileInputStream(...)
    • FileOutputStream.FileOutputStream(...)
    • FileReader.FileReader(...)
    • FileWriter.FileWriter(...)
    • javax.xml.parsers.DocumentBuilder.parse(...)
    • javax.servlet.ServletContext.getRequestDispatcher(...)
    • javax.servlet.ServletContext.getResource*(...)
    • org.jaxen.Navigator.getDocument(...)
また、ルールのパラメータをカスタマイズすることによって、どの入力データおよびファイルアクセス メソッドをチェック対象にするかを指定することができます。

  • 検証メソッドの指定も可能
    ルールのパラメータでは検証メソッドを指定することも可能です。検証メソッドは、悪意のあるデータを含んでいる可能性のある入力データを受け取り、チェック済みの安全なデータをパラメータまたは戻り値として返すメソッドです。検証メソッドをパラメータで指定しておくと、チェック済みのデータに対して誤って違反が検出されることがなくなるため、検証結果の精度が向上します。

  • 関連ルール
    このほかにも悪意のあるファイルの実行を防ぐいくつかのフロー解析ルールがあります。

      ライブラリ インジェクションから防御する

このルールは、悪意のあるファイル名を含む可能性のあるエンド ユーザからのデータを使って、ロードされるライブラリの名前を生成している場合に違反をレポートします。

  • ネットワーク リソース インジェクションから防御する
  • このルールは、悪意のあるファイル名を含む可能性のあるデータが、ホスト名・IP アドレス・ポート番号・パス・クエリー文字列などのネットワーク リソースを表すパラメータとしてメソッドに渡され、リソースの割り当てに使用される URL や URI などのリソース記述の一部として使われる可能性がある場合に違反をレポートします。 Jtestのファイル名/ライブラリ/ネットワーク リソースのインジェクションから防御するルールでソースコードを解析することにより、悪意のあるファイルの実行による攻撃に対して脆弱なコードを発見し、改修することが可能になります。
※ セキュリティルール及びセキュリティコンプライアンス規約セットによる静的解析には「セキュリティコンプライアンスパック」のライセンス(有償)が必要です。

Java対応静的解析・単体テストツール Jtestに
関するお問い合わせ

  • テクマトリックス株式会社
    東京本社

    ソフトウェアエンジニアリング事業部

    03-4405-7853

メールでのお問い合わせ
parasoft-info@techmatrix.co.jp

CONTACT

製品についてやテクマトリックスについてなど、
こちらよりお気軽にお問い合わせいただけます。