さまざまなリソースインジェクション

リソースインジェクションとは

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

Jtestでセキュアなアプリケーション開発 失敗しない虚弱性対策とは?

リソースインジェクションの例

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

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

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

さまざまなリソースインジェクションを対策

コーディングによる対策

さまざまなリソースインジェクションを防ぐには、リソースにアクセスするアプリケーションでは、ユーザーからの入力データの検証や適切なアクセス権の設定を徹底します。
例えば、これらをコーディング規約として定義すること、コードレビューの観点に追加することが想定されます。
  • 外部からの入力を直接利用したリソースへのアクセスを行わない
  • 入力データを検証する
  • セキュリティ・マネージャーを有効にし、アプリケーションに適切なアクセス・ポリシーを適用する

ただし、このような対策を行ったとしても大規模なアプリケーションで複数のクラス・メソッドにまたがるソースコードに潜む全て問題を従来の目視レビューだけで発見するのは不可能に近いとも言えます。そこで、静的解析ツールでコードレビューを自動化して機械的にソースコードの問題を検出するようにします。

静的解析ツールJtestでさまざまなリソースインジェクションを対策する

Parasoft Jtest にはファイル名/ライブラリ/ネットワーク リソースのインジェクションの脆弱性を検出する静的解析ルールがあります。
  • ファイル名に対するインジェクションから防御する [BD.SECURITY.TDFNAMES]
  • ライブラリ インジェクションから防御する [BD.SECURITY.TDLIB]
  • ネットワーク リソース インジェクションから防御する [BD.SECURITY.TDNET]

ファイル名に対するインジェクションから防御する [BD.SECURITY.TDFNAMES]
このルールは、外部から入力されたデータを使用してファイル名を生成、アクセスしている場合に違反をレポートします。

検出例 - Jtest 解析結果とソースコード:

15行目でアプリケーションを操作するユーザーが入力したデータを取得し、そのデータに対する安全性のチェックを行わないままファイル名として利用します。
悪意のあるユーザーが任意のファイルパスを入力した場合、パスに実在するファイルの情報を取得し情報の漏洩につながることや、ファイルの内容を改ざん、削除することもできます。

ライブラリ インジェクションから防御する [BD.SECURITY.TDLIB]
このルールは、外部から入力されたデータを使用して、ロードされるライブラリの名前を指定している場合に違反をレポートします。

検出例 - Jtest 解析結果とソースコード:

37行目でアプリケーションを操作するユーザーが入力したデータを取得し、そのデータに対する安全性のチェックを行わないままライブラリの名前として扱い、ライブラリをロードしています。
悪意のあるユーザーがアプリケーションが意図していないライブラリ名を入力した場合、不正なコードが実行されてシステムに被害を与える可能性があります。

ネットワーク リソース インジェクションから防御する [BD.SECURITY.TDNET]
このルールは、外部から入力されたデータが、ホスト名・IP アドレス・ポート番号・パス・クエリー文字列などのネットワークリソースを表すパラメータとしてメソッドに渡され、リソースの割り当てに使用される URL や URI などの一部として使われる可能性がある場合に違反をレポートします。

検出例 - Jtest 解析結果とソースコード:


12行目で HTTP リクエストから取得したポート番号の安全性のチェックを行わないまま、サーバーソケットを作成しています。プロキシを使用するユーザーは、ポートを変更してサーバへの直接的なソケット接続を獲得することができます。


Jtestのファイル名/ライブラリ/ネットワーク リソースのインジェクションから防御するルールでソースコードを解析することにより、さまざまなリソースインジェクションに対して脆弱なコードを発見し、改修することが可能になります。

Jtestが検出する脆弱性(抜粋)一覧

※ 本ページでご紹介したルールを含むセキュリティルール及びセキュリティコンプライアンス規約セットによる静的解析には「セキュリティコンプライアンスパック」のライセンス(有償)が必要です。

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

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

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

    03-4405-7853

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

お問い合わせ

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