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

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

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

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

public void saveStory(TextBox storyName, TextBox storyContents)
{
    string fileName = storyName.Text;
    using (StreamWriter streamWriter = File.CreateText(fileName))
    {
        streamWriter.Write(storyContents);
    }
}

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

対策

必ずユーザーからの入力を検証してから使用するようにします。

dotTESTのルール

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

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

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

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

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

C# VB.NET対応 静的解析・単体テストツール dotTESTに
関するお問い合わせ

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

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

    03-4405-7853

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

お問い合わせ

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