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


13

Webアプリケーション(.net)を実稼働環境にデプロイする場合、統合セキュリティを使用する方がよいのですか、それとも重要ですか?

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

考え?


ここにはたくさんの良い答えがあります。勝者を選ぶのは大変でした。みんなありがとう。
NotMe

回答:


8

SQL認証を使用する正当な理由は2つしかないと思います。

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

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

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

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

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

では、なぜweb.configにパスワードをクリアで保存するSQL認証WWWホストがまだ表示されるのですか?それらは悪い開発者/管理者です、彼らの一人ではありません。

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

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


6

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

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

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

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


本当ですが、不満を持つ従業員は、SSPI接続を利用するWebページを単にインストールすることもできます。これは...パスワード自体へのアクセス権を持つように悪いようです
NotMe

1
彼/彼女のパスワードが無効になっているであろうから不満EXの従業員は、もはや、アクセス権を持っていないだろう
ジョエル・スポルスキ

6

これまでの他の答えは良かったが、私は別の答えを投げ込む:管理。

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


ワーカープロセスIDの各Webサーバーでパスワードを変更する必要がありますか?これは、構成ファイルの変更よりも自動化するのが難しいようです。最近では、私の選択はすべて自動化の容易さに基づいています。
ルークププレット16

2

ここでは100%確信はありませんが、主なポイントは、SQL認証は安全ではないため、Windows認証を使用することをお勧めします。アプリのセットアップ方法に応じて、Windows認証を使用して、適切な資格情報を暗号化された形式でマシンに保存することもできます。SQL認証ではそれが本当に可能だとは思いません。難読化できますが、最終的には明確にする必要があります。

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


1

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


1

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

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

ただし、IDを指定した場合、そのユーザーアカウントはSQL Serverにアクセスする必要があります。攻撃者がWebサーバーを侵害した場合、IDアカウントと実質的に同じアクセス権を持っていることは間違いありませんが、実際のところ、SQL Serverログオンを使用してもここでは何も変わりません。アクセスが可能になったら、バックエンドSQL Serverでセキュリティが許可する最大値まで、Webアプリケーションを変更して必要な処理を実行できます。

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


公開されているサーバーと内部で使用されているサーバーの間に本当に違いがあるかどうかはわかりません。それ以外は、これは良い説明です。
NotMe

確かにあります。一般に公開されているサーバーは、ドメイン上にあるべきではありません。つまり、信頼できる接続を使用することはできません。SSPIはオプションではありません。
K.ブライアンケリー

1

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

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

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

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


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.