web-dev-qa-db-ja.com

Windows Server2012のIISがシステム環境変数にアクセスできないのはなぜですか?

Windows Server 2012R2でASP.NETCore Webアプリケーションを実行していて、IIS 8.5。IISはweb.config構成変数のペアを使用して起動しますアプリケーション。これは、関連するweb.config行です。

<aspNetCore processPath="dotnet" arguments=".\MyWebsite.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />

processPath変数は実行するコマンドであり、arguments変数は渡す引数を指定します。 dotnet.exeは、ASP.NETCoreランタイムをサーバーに追加するときにインストールされます。これは、ディレクトリC:\Program Files\dotnetにあります。このパスはサーバーのシステムPATH変数にあり、コマンドを実行するユーザーコンテキスト(IISアプリケーションプールユーザー)には、そのパスの読み取り/実行権限があります。

アプリケーションを実行すると、IIS 502.5エラーが発生します。Windowsログは次のように報告します。

物理ルート 'C:\ Sites\MyWebsite \'を持つアプリケーション 'MACHINE/WEBROOT/APPHOST/MYWEBSITE'は、コマンドライン 'dotnet。\ MyWebsite.dll'、ErrorCode = '0x80004005:80008083でプロセスを開始できませんでした。

ただし、実行可能ファイルへのフルパスを指定するようにweb.configを変更すると(つまり、dotnetではなくC:\Program Files\dotnet\dotnet.exe)、アプリケーションは正常に実行されます。

だから私の仮定は、何らかの理由でIISシステム環境変数PATHにアクセスできないということです。誰かが解決策を提案できますか?ASP.NETCoreをインストールしてからサーバーを再起動しましたランタイム。

2
getsetcode

アプリケーションが動的リンクライブラリまたは完全修飾パスを指定せずに実行可能ファイルをロードすると、Windowsは、明確に定義されたディレクトリのセットを検索してバイナリを見つけようとします。これには、ローカルパス、アクティブパス、およびPATH変数(CMDなど、それを尊重するアプリケーションと言えば)が含まれます。

攻撃者がIISのWebサイトパスのように、ディレクトリの1つを制御できるようになると、アプリケーションに、予期していたのではなく、ファイルの悪意のあるコピーをロードさせる可能性があります。これらの攻撃は「プリロード攻撃」と呼ばれ、ライブラリやバイナリの動的な読み込みや共有をサポートするすべてのオペレーティングシステムに共通しています。

このような攻撃の影響により、攻撃者はアプリケーションを実行しているユーザー(プロセス)のコンテキストでコードを実行できる可能性があります。アプリケーションプールが管理者として実行されている場合、これにより、特権がローカルに昇格される可能性があります。

これが、多くのシステムプロセスがバイナリの検索にPATHコンテンツを使用しない、または使用しなくなった理由です。

詳細: プリロード攻撃を防ぐためのライブラリの安全なロード

4
bjoster