web-dev-qa-db-ja.com

debug =“ true”でWebアプリを実行するセキュリティリスクはありますか?

これは Stack Overflowの元の質問 のコピーであり、あまり愛されていなかったため、おそらくここでより関連性があります。

アプリをdebug = "true"モードで実行してはならない理由はたくさんありますが( Scott Guからの良いランダウン )、この方法で公開される攻撃ベクトルはありますか?それは「あなたがすべきか、すべきでないか」という問題ではなく、それは明らかであり、特定の脆弱性をもたらすかどうかという問題です。

リモートで検出 の機能と既知のパフォーマンスの問題を組み合わせると、サービスの可用性が悪用される可能性があると思いますが、もう少し明確にしたいと思います。 debug = "true"を実行しているアプリに対して調整できる特定の攻撃を知っている人はいますか?

18
Troy Hunt

ここと Stack Overflow の両方で、この質問について興味深いフィードバックがありました。スタックトレース(デバッグの問題ではなく、カスタムエラーの問題)とパフォーマンス([直接の]セキュリティの問題ではない)に関連する多くの応答がありました。

最も説得力のある応答は、条件付きコンパイル定数(#if DEBUG ...)が予期しない動作を引き起こす可能性があることですが、これもまた、セキュリティ上のリスクよりも機能上のリスク(ライブ環境で意図しないコードが実行される)の方が多くなります。

デバッグモードでは、アプリにかかるパフォーマンスのオーバーヘッドとリモートで検出する機能(おそらく、サービス継続性のリスク)に基づいて、他のエクスプロイトへの経路が開かれるのではないかと思います。私の結論は 。NET開発者のためのOWASPトップ10パート6:セキュリティの構成ミス の一部として書いています。

したがって、完全を期すために、答えはデバッグモードで実行することによる明確なセキュリティリスクはないように見えますが、上記の要因を考慮すると、本番環境のアプリには決して良い考えではありません。

12
Troy Hunt

潜在的な攻撃者にソースコード、スタックトレースなどへの潜在的なアクセスを許可することにより、システムへの攻撃に焦点を絞ったり狭めたりすることができます。

また、(テストしていませんが)debug = trueが予想されるサイトのcustomerrorではなくコンパイルエラーを引き起こすため、.net customerrorの暗号バグにさらされる可能性があると想定します。

http://blogs.technet.com/b/srd/archive/2010/09/17/understanding-the-asp-net-vulnerability.aspx

5
iivel

Debug = trueのときに留意すべき最大のことは、シンボルがそこにあることです。アプリケーションはdebug = trueでプリコンパイルできますが、これはデプロイメントプロセスの一部です。例えば。ビルドサーバーまたはローカルマシンでビルドし、アセンブリを転送します。 (本番デプロイメントの前に誰もがアプリケーションをプリコンパイルしていますよね?!:))デバッグでは、特定のランタイム最適化もオフになっています。明らかな攻撃はDoSです。カスタムエラーがオフの場合は、カスタムエラーがオフでシンボルが存在しない場合よりも、コールスタックで詳細情報を確認することもできます。

3
Steve

CustomErrors = offおよびdebug = trueの場合、さらに多くの情報が攻撃者に送信されると思います。

CustomErrors = onまたはcustomErrors = RemoteOnlyと言った方が安全です。これにより、リモートユーザーは常に一般的なASP.NETエラーページを取得します。 [〜#〜] msdn [〜#〜] に関する詳細情報

3

これは、ほとんど完全に言語/フレームワーク/デプロイメント環境に依存しています。

Python/Djangoの場合、DEBUG = Trueがセキュリティの問題である場合が非常に明確です。たとえば、 「SECRET」、「PASSWORD」、「PROFANITIES」、または「SIGNATURE」の構成変数を表示しないことに関する注意-参照 http://docs.djangoproject.com/en/dev/ref/settings/#debug

2
nealmcb

情報漏えいの観点からは悪いので、繰り返す必要はありません。さらに、デバッグモードでは、リクエストの実行タイムアウトは約5時間なので、タイムアウトすることなくアプリケーションをデバッグできます。 (デフォルトのタイムアウト値はデフォルトで110秒です)そのため、攻撃者がコードを見つけた場合、この攻撃の実行に時間がかかりすぎてサービス拒否につながる可能性があります。

2
Nathan B.