SV.DLLPRELOAD.SEARCHPATH

DLL プリロードの SearchPath ベクターの可能性

アプリケーションが外部ライブラリをロードする場合、コードが完全修飾パスを使用できることが重要です。不完全修飾パスが指定されると、悪意のある攻撃者が検索パスを制御し、リモートで実行する任意コードにそれをベクターとして使用しかねません。SearchPath などの一部の API も悪意のある攻撃に対するベクターを提供します。 これは、ライブラリを予期しないソースディレクトリからロードすることを試みるためです。このようなタイプの脅威は、バイナリプラントまたは DLL プリロード攻撃として知られています。

DLLPRELOAD.SEARCHPATH チェッカーは、SearchPath API が .dll ファイルへのシステムファイル操作関数呼び出しで使用されるコードのインスタンスにフラグを立てます。

脆弱性とリスク

攻撃者は、関連のあるパス名を使用して、セキュリティメカニズムをバイパスして、重大なファイルの読み取り、変更、上書きを行うことができます。たとえば、悪意のあるユーザーは、認証を回避したり、パスワードファイルを読み取ってシステムのアカウントに侵入したりするため、パスワードファイルの終わりに新しいアカウントを追加できます。最悪の場合は、ユーザーがシステムからロックアウトされたり、ソフトウェアが動作を妨害されたり、権限のないコマンドやコードが実行されたりします。

SearchPath (などの類似 API) が使用する検索順序は、アプリケーションライブラリではなくドキュメントを目的としています。このため、この API を使用するアプリケーションは、攻撃者が制御するディレクトリからうっかりライブラリをロードする可能性があります。通常、SearchPath を使用するアプリケーションは、まず、任意のコードの特殊作成ライブラリを含む現在動作しているディレクトリからライブラリをロードしようとします。

軽減と防止

関連パスの問題を回避するには、次の操作を実行します。

  • SearchPath は、安全なプロセス検索モードが有効でない限り使用しないでください。
  • できる限り完全修飾パス名を使用し、外部ライブラリが安全にロードされるようにします。
  • realpath() または canonicalize_file_name() などの、組み込みパス正規化関数をコードに含めます
  • ライブラリ、インクルード、ユーティリティファイルをアクセスされにくい別のディレクトリに保存します
  • エラーメッセージがパス情報を開示しないことを確認します

DLL プリロード攻撃の軽減および防御に関する提案については、マイクロソフトの記事、ダイナミックリンクライブラリのセキュリティを参照してください。