悪意のあるファイルの実行
ユーザーの入力データを使用してファイル名、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が検出する脆弱性(抜粋)一覧
- クロスサイト スクリプティング(XSS)
- SQLインジェクション
- HTTPレスポンス分割
- 悪意のあるファイルの実行 (本ページ)
※ セキュリティルール及びセキュリティコンプライアンス規約セットによる静的解析には「セキュリティコンプライアンスパック」のライセンス(有償)が必要です。
PICK UP
イベント・セミナー
C# VB.NET対応 静的解析・動的解析 テストツール dotTESTに
関するお問い合わせ
テクマトリックス株式会社
東京本社ソフトウェアエンジニアリング事業部
03-4405-7853
- メールでのお問い合わせ
- parasoft-info@techmatrix.co.jp