IISでランタイムエラー。RDSでアプリケーションでサーバーエラーが発生しました

RDS環境で、リモートデスクトップwebアクセスにアクセスし、ログインページが表示されたものの、
ログインしようとしましたら、IIS上で

  • /RDWeb/Pages アプリケーションでサーバーエラーが発生しました。
  • ランタイムエラー

といった表示がされました。
IISにはアクセス出来ているのに、何故こんなエラーが出るのでしょうか?

環境・前提条件

Windows Server 2016でRDS環境を構築し、
クライアントからリモートデスクトップWebアクセスへはアクセス出来ているにも関わらず、ログインしたところエラーとなった

結論、検証エラーが発生。イベントログソースASP.NETイベントID1309

結論から言いますと、リモートデスクトップwebアクセスサーバーのイベントログのアプリケーションログに

  • ソース:ASP.NET 4
  • イベントID 1309

といったエラーが表示されていました。

IISのアクセスログには500番のエラーのみ、IISのエラーログには情報はありませんでした。

このIISのエラーは(Event code 3003)は攻撃のような危険な可能性のある文字列がhttpリクエストに入っているとIIS(ASP.NET)がエラーとする

アプリケーションのイベントログに、以下のようなメッセージがありました。

  • ソース:ASP.NET 4
  • イベントID 1309

以下の詳細ログにある「 危険な可能性のある Request.Form 値がクライアントから検出されました。」というキーワードが解決の糸口でした。

Event code: 3003
Event message: 検証エラーが発生しました。
Event time: 2019/03/26 14:35:51
Event time (UTC): 2019/03/26 5:35:51
Event ID: 85b9a261db9f4ca59394addca6a3b420
Event sequence: 50
Event occurrence: 1
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/1/ROOT/RDWeb/Pages-2-131980497094679912
Trust level: Full
Application Virtual Path: /RDWeb/Pages
Application Path: C:\Windows\Web\RDWeb\Pages\
Machine name:
Process information:
Process ID: 5604
Process name: w3wp.exe
Account name: IIS APPPOOL\RDWebAccess
Exception information:
Exception type: HttpRequestValidationException
Exception message: 危険な可能性のある Request.Form 値がクライアント (UserPass="***&#") から検出されました。
場所 System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
場所 System.Web.HttpValueCollection.EnsureKeyValidated(String key)
場所 System.Web.HttpValueCollection.GetValues(String name)
場所 Microsoft.TerminalServices.Publishing.Portal.FormAuthentication.TSFormsAuthentication.ExtractInfoFromForm(HttpContext objHttpContext)
場所 Microsoft.TerminalServices.Publishing.Portal.FormAuthentication.TSFormsAuthentication.d__71.MoveNext()
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
場所 System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar)
場所 System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
場所 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
場所 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Request information:
Request URL: https://〇〇〇.ne.jp:443/RDWeb/Pages/ja-JP/login.aspx?ReturnUrl=/RDWeb/Pages/ja-JP/Default.aspx
Request path: /RDWeb/Pages/ja-JP/login.aspx
User host address: 10.xx.xx.xx
User:
Is authenticated: False
Authentication Type:
Thread account name: IIS APPPOOL\RDWebAccess
Thread information:
Thread ID: 46
Thread account name: IIS APPPOOL\RDWebAccess
Is impersonating: False
Stack trace: 場所 System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection)
場所 System.Web.HttpValueCollection.EnsureKeyValidated(String key)
場所 System.Web.HttpValueCollection.GetValues(String name)
場所 Microsoft.TerminalServices.Publishing.Portal.FormAuthentication.TSFormsAuthentication.ExtractInfoFromForm(HttpContext objHttpContext)
場所 Microsoft.TerminalServices.Publishing.Portal.FormAuthentication.TSFormsAuthentication.d__71.MoveNext()
--- 直前に例外がスローされた場所からのスタック トレースの終わり ---
場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
場所 System.Web.TaskAsyncHelper.EndTask(IAsyncResult ar)
場所 System.Web.HttpApplication.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
場所 System.Web.HttpApplication.ExecuteStepImpl(IExecutionStep step)
場所 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Custom event details:
***&#

原因は、POSTされているパスワードに、攻撃と思われるような文字列があったためIIS(ASP.NET)がブロックしていました。


「 危険な可能性のある Request.Form 値がクライアントから検出されました。」 の対処方法

対処方法は、

  • 攻撃とみなされるような文字列のPOSTを無くす。
  • もしくはIIS(ASP.NET)のrequestValidationModeの値をfalseに変えセキュリティレベルを低くするか、

のどちらかの方法になります。
後者はweb.configの requestValidationMode をfalseに修正する必要があります。
なるほど、ASP.NETも色々防御策をとっているんですね。

ASP.NETのValidateRequest - Qiita
Request Validation in ASP.NET | Microsoft Docs
.NET Framework の"web.config"ファイルの変更

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です