web-dev-qa-db-ja.com

SQL Serverへのアクセスに統合セキュリティ(SSPI)を使用すると、Webアプリケーションの方が優れていますか?

Webアプリケーション(.net)を運用環境に展開する場合、統合セキュリティを使用する方が良いですか、それとも重要ですか?

ハッカーがWebサーバーを破壊したとしても、マシンになりすますことができるので、問題にはならないようです。

考え?

13
NotMe

SQL authを使用する正当な理由は2つだけあると思います。

  1. ドメイン外から接続しているため、authを統合しました。
  2. TPC-Cベンチマークを実行しており、すべてのサイクルがカウントされます。 SQL authは少し高速です。

提案しているシナリオ(Webサーバーのホストが完全に危険にさらされている)では、何も保護できません。ハッカーは最低でもDBサーバーで実行できますWebサーバーで実行できるすべてのこと。そして、多層防御は、そのような場合の損失を最小限に抑えることを教えてくれると私は思います:ur Webサーバーが使用するアカウントのDB権限を、必要最低限​​の最低限のものに減らします。次に、Webサーバーホストが危険にさらされている場合、それを使用してWebサーバーアカウントよりも高い権限を昇格できないことを確認します(つまり、WWWホストには、WWWアカウントよりもDBで高い権限を持つ資格情報を使用するサービスがありません)。これらは基本的なセキュリティ原則であり、使用される認証スキームとは関係ありません。

Sql authとwindows authのどちらのシナリオでも、明確な利点はありませんが、他にも考慮すべき問題があります。

  1. 一元化されたポリシーの適用:パスワードの有効期間と有効期限、アカウントの終了など、パスワードポリシーを設定する場所が1か所にあります。
  2. 偽装と信頼の委任の制御。 sql authが信頼委任チェーンで使用されると、それは実際の「委任」ではないため、すべての賭けは無効になり、ポリシーが課す制限から外れます
  3. 監査:SQL authはLSAからも認識されないため、監査インフラストラクチャ全体が単にバイパスされます。 SQLがsql authイベントについて生成するレコードを明示的に追加する必要がありますが、イベントログのソース、プロバイダー、スキーマが異なるため、リンゴとオレンジが混在しています。

最後に、TDSプロトコルはSQL認証パスワードをクリアテキストでトラフィック上に公開しますが、通常はトラフィックのSSL暗号化を要求することで軽減されます。

それでは、なぜweb.configにパスワードを平文で保存しているSQL認証WWWホストが表示されるのですか?それらはbad開発者/管理者です。それらの1つではありません。

msdn.Microsoft.com/en-us/library/aa378326(VS.85).aspx

technet.Microsoft.com/en-us/library/ms189067.aspx

8
Remus Rusanu

SSPIを使用しない場合は、ユーザー名とパスワードをソースファイルにハードコーディングします。

ユーザー名とパスワードをソースファイルにハードコーディングしている場合は、すべての従業員がアクセスできます。

これは比較的安全ではありません。不満を抱いた元従業員が悪意を持って情報を使用する可能性があります。訪問者はどこかで画面上のコードを見るかもしれません。または、ソースコードが誤って公開されてしまう可能性があります。

SSPIの利点は、パスワードが平文のどこにも保存されないことです。

6
Joel Spolsky

これまでの他の答えは良かったですが、私は別の答えを投入します:管理です。

遅かれ早かれ、おそらく複数のSQL Serverを使用することになります。アプリと複数のSQL Serverの間のSQL認証の管理は、特にセキュリティの問題が発生したときに、少し面倒になります。 Windows認証パスワードを一度変更すると、すべてのサーバーですぐに変更されます。 SQL認証パスワードをローテーションする必要がある場合、それはより苦痛です-おそらくそれをまったく行わないところまで。これはセキュリティ上のリスクです。

6
Brent Ozar

ここでは100%確信はありませんが、SQL authは安全でないため、Windows authを使用することをお勧めします。アプリの設定方法によっては、Windows認証を使用して、適切な認証情報を暗号化された形式でマシンに保存することもできます。 SQL authではそれが本当に可能だとは思いません。あなたはそれを難読化することができますが、最終的にはそれは明白なものでなければなりません。

また、ハッカーがサーバーに侵入できるからといって、それがゲームオーバーであるとは限りません。ハッカーは、権限のないプロセスを制御できるが、サーバー上では他に何もしない可能性があります。そのため、すべてを管理者またはシステムとして実行するのではなく、最小限の特権のサービスアカウントを使用することが重要です。

2
diq

問題はどちらが「良い」かです。質問者のコンテキスト、価値観、優先順位に依存しているため、答えるのは難しいです。

個人的には、SQL authが好きです。

  • ADは、サービスアカウントを実行、サポート、および管理するもう1つのものです。
  • ADはホスティング環境で使用できる必要があります。
  • ADは、クラウドまたはハイブリッドクラウドへの移行を困難にします。
  • ADを使用すると、サービスアカウントをグループに簡単に追加できます。組織の他の一部の管理者は、これらのアカウントをグループに含めることはできません。
  • 設定でSQLホスト名を暗号化する必要があるため、SSPIは接続文字列の暗号化の問題を回避しません。
  • SQL authはシンプルでテキスト構成であり、導入が簡単です。
  • アプリケーションプールIDを設定することは、自動化し、各環境の自動化スクリプトでユーザー名とパスワードを非表示にするもう1つの方法です。
  • 2つの接続文字列を使用すると、ローリングパスワードを簡単に使用できるため、ダウンタイムなしでパスワードを更新できます。

最後のポイント:各接続文字列を試すように接続マネージャークラスをコーディングします。これにより、configの最初のパスワードを変更し、変更をプッシュして、2番目の接続にフェイルオーバーし、MSQLのパスワードを更新します。そして最初のものが再び使用されます。 2番目のパスワードを最初のパスワードと同じに設定して、次回の準備ができるように、最後の構成変更が必要です。

1
Luke Puplett

私は、あなたが内部プライベートネットワーク上の内部Webサーバーについて話していることを前提としていると言って、これらすべての前置きをします。

マシンを偽装することから始めましょう。アプリケーションプールIDがネットワークサービスであり、.NETアプリケーションに偽装がない場合、はい、Webアプリケーションはマシンのコンピューターアカウントを使用してバックエンドSQL Serverに接続します。そして、それはあなたがそのマシンアカウントへのアクセスを許可したことを意味します。 MicrosoftのCRMはこのように機能します。

ただし、IDを指定した場合、そのユーザーアカウントはSQL Serverにアクセスする必要があります。攻撃者がWebサーバーを危険にさらした場合、事実上、IDアカウントと同じアクセス権を持っていることは間違いありませんが、SQL Serverログオンを使用しても、ここでは何も変更されません。アクセス権を取得したら、Webアプリケーションを変更して、私がやりたいことを実行できるようにします。バックエンドSQL Serverでのセキュリティの許容範囲を最大限に活用できます。

次に、SSPIを使用する理由について説明します。何よりもまず、SQL Serverベースのログインを使用していません。つまり、Active Directoryが唯一のセキュリティソースです。つまり、無効なアクセスを判別するための通常の監査手段があるということです。次に、それを必要とする他のアプリがない限り、SQL ServerをWindows認証のみのモードのままにしておくことができることを意味します。つまり、SQL Serverログインは許可されません。つまり、saに対する攻撃は、開始する前に停止されます。そして最後に、回復が容易になります。 SQL Serverベースのログインを使用する場合は、SIDと暗号化されたパスワードを使用してログインを抽出する必要があります。 Windowsベースのユーザーアカウントを「サービスアカウント」として使用している場合、新しいSQL Serverに移動すると、ログインを作成することにより、データベースを復元するとすべてのものが再接続されます。これは、ログインとデータベースユーザーの間でSIDが一致するためです。 。

1
K. Brian Kelley

最善の方法は、Webサーバーに侵入した場合に実行できることを制限することです。つまり、アプリケーションが機能するために必要なSQL権限のみを付与します。アプリケーションにDBO権限を付与する方がはるかに簡単ですが、Webサーバーへの攻撃が成功した場合に、DBをはるかに脆弱にします。

1
Kevin Colby

ユーザーが(SQL Server Management Studioなどの他のクライアントツールを介して)データベースを直接操作しない場合は、通常、アプリケーションに対して単一のSQLログインを作成し、必要なアクセス権を付与します。その時点で、ユーザーは、Webアプリのインターフェースで許可されているように、実行できることが制限されます。

0
squillman