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"ファイルの変更