web-dev-qa-db-fra.com

Utilisation de la sécurité intégrée (SSPI) pour accéder mieux à SQL Server pour les applications Web?

Lors du déploiement d'applications Web (.NET) à un environnement de production, il est-il préférable d'utiliser une sécurité intégrée ou peut-être même?

Il me semble que si un pirate informatique brise le serveur Web, cela n'aura pas d'importance car ils peuvent facilement imiter la machine.

Les pensées?

13
NotMe

Je dirais qu'il n'y a que deux raisons valables d'utiliser SQL Auth:

  1. Vous vous connectez de l'extérieur du domaine, alors intégré Auth.
  2. Vous exécutez une référence TPC-C et chaque cycle compte. SQL Auth est un peu plus rapide.

Pour le scénario, vous proposez (l'hôte du serveur Web est complètement compromis) rien ne peut vous protéger. Le pirate informatique peut faire sur le serveur DB au minimum tout ce que le serveur Web peut le faire. Et je dirais que la défense en profondeur peut vous apprendre à minimiser la perte dans ce cas: réduire les droits de la DB du compte utilisé par votre serveur Web au minimum total requis et rien de plus. Deuxièmement, assurez-vous que l'hôte du serveur Web est compromis, il ne peut pas être utilisé pour élever des privilèges supérieurs au compte de serveur Web (c.-à-d. Aucun autre service sur l'hôte www utilise des informations d'identification avec des privilèges plus élevés sur la DB que le compte WWW). Ce sont des principes de sécurité de base et n'ont rien à voir avec le schéma d'authentification utilisé.

Alors que l'authentification SQL Auth contre Windows n'engage ni un avantage clair dans votre scénario, il existe d'autres problèmes à prendre en compte:

  1. Exécution des politiques centralisées: vous avez un endroit pour configurer vos stratégies de mot de passe, y compris la durée de vie du mot de passe et l'expiration, la terminaison de compte, etc.
  2. Contrôle sur l'impersonnation et la délégation de la confiance. Une fois que SQL Auth est utilisé dans une chaîne de délégation de confiance, tous les paris sont désactivés, car ce n'est pas une "délégation" et donc n'est plus sous les restrictions que vos politiques imposent
  3. Audit: SQL Auth n'est même pas vue par votre LSA afin que toute votre infrastructure d'audit soit simplement contournée. Vous devez expliquer expliquer des produits SQL d'enregistrements sur les événements SQL Auth, mais mélange des pommes et des oranges à mesure que ces événements ont une source, un fournisseur et un schéma différentes dans le journal des événements.

Une dernière note: le protocole TDS expose le mot de passe SQL AUTH dans le texte clair sur le trafic, mais qui est généralement atténué en demandant un cryptage SSL du trafic.

Alors, pourquoi voyez-vous toujours les hôtes www www qui stockent le mot de passe en clair dans web.config? Ce sont les mauvais développeurs/administrateurs, ne soyez pas l'un d'entre eux.

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

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

8
Remus Rusanu

Si vous n'utilisez pas SSPI, vous êtes en train de tirer le code d'utilisateur et du mot de passe dans les fichiers source.

Si vous êtes en train de tirer le code d'utilisateur et du mot de passe dans les fichiers source, tous vos employés y ont accès.

Ceci est relativement insécurisé. Un ex-employé mécontent pourrait utiliser les informations malicieusement. Un visiteur peut voir le code sur un écran quelque part. Ou le code source pourrait se lever accidentellement dans la nature.

L'avantage de SSPI est que le mot de passe n'est jamais stocké n'importe où dans le clair.

6
Joel Spolsky

Les autres réponses jusqu'à présent ont été bonnes, mais je vais lancer une autre: la direction.

Tôt ou tard, vous allez probablement vous retrouver avec plusieurs serveurs SQL. Gestion de l'authentification SQL entre votre application et plusieurs serveurs SQL devient un peu douloureux, surtout lorsque vous rencontrez des problèmes de sécurité. Si vous modifiez une fois un mot de passe d'authentification Windows une fois, il change tout de suite sur tous vos serveurs. Si vous devez faire pivoter vos mots de passe d'authentification SQL, il est plus douloureux - au point où vous ne le ferez probablement pas du tout. C'est un risque de sécurité.

6
Brent Ozar

Je ne suis pas sûr à 100% ici, mais je pense que le point principal est que SQL Auth n'est pas sécurisé, il est donc préférable d'utiliser Windows Auth. Selon la configuration de votre application, vous pouvez également stocker les informations d'identification appropriées sur un formulaire crypté sur la machine à l'aide de Windows Auth. Je ne pense pas que ce soit vraiment possible avec SQL Auth. Vous pouvez l'obscurcer, mais finalement, il doit être clair.

En outre, simplement parce qu'un pirate informatique peut entrer dans un serveur ne signifie pas que c'est le jeu. Un pirate informatique peut prendre le contrôle d'un processus non privilégié mais ne rien faire d'autre sur le serveur. C'est pourquoi il est important de ne pas tout courir en tant qu'administrateur ou système, mais plutôt d'utiliser des comptes de service de privilège minimum.

2
diq

La question est qui est "meilleure"? Ce qui est difficile à répondre car il s'appuie sur le contexte, les valeurs et les priorités du questionneur.

Personnellement, j'aime SQL Auth.

  • L'AD est une autre chose à exécuter et à soutenir et à gérer des comptes de service.
  • L'AD doit être disponible dans votre environnement d'hébergement.
  • L'annonce rendrait difficile de passer au nuage ou au nuage hybride.
  • La publicité facilite l'ajout de comptes de service en groupes qu'ils ne devraient pas être dans des administrateurs dans une autre partie de votre organisation.
  • SSPI ne contourne pas la question de crypter votre chaîne de connexion car vous devriez crypter votre nom d'hôte SQL dans Config.
  • SQL Auth est simple et juste une configuration de texte, facile à déployer.
  • Configuration des identités de piscine App est une autre chose à automatiser, puis masque le nom d'utilisateur et le mot de passe de ces scripts d'automatisation pour chaque environnement.
  • En utilisant deux chaînes de connexion, facilite l'utilisation de mots de passe Rolling, vous pouvez donc mettre à jour le mot de passe sans temps d'arrêt.

Dernier point: vous codez le code de votre classe de Connection Manager pour essayer chaque chaîne de connexion, de cette façon, vous pouvez modifier le mot de passe sur le premier dans config, appuyez sur la modification et le basculement de la deuxième connexion, puis vous mettez à jour le mot de passe sur MSQL. et le premier sera utilisé à nouveau. Un changement de configuration final est nécessaire pour définir le deuxième mot de passe identique au premier, prêt pour la prochaine fois.

1
Luke Puplett

Je préfère tout cela en disant que je fais que je fais supposer que vous parlez d'un serveur Web interne sur le réseau privé interne.

Commençons par l'imprimante de la machine. Si l'identité du pool d'applications est un service réseau et qu'il n'y a pas d'impersonnation dans l'application .NET, alors oui, l'application Web se connecte au serveur SQL Back-end à l'aide du compte d'ordinateur de la machine. Et cela signifierait que vous avez accédé audit compte machine. Le CRM de Microsoft fonctionne de cette façon.

Toutefois, si vous avez spécifié une identité, ce compte d'utilisateur aura besoin d'un accès au serveur SQL. Pendant que vous avez raison que si un attaquant compromettait le serveur Web, ils ont effectivement le même accès que le compte d'identité, la vérité de la matière est que l'utilisation d'une connexion SQL Server ne change rien ici. Une fois que j'ai accès, je peux modifier l'application Web pour faire ce que je veux et ce sera le maximum de vos autorisations de sécurité sur le serveur SQL Back-end.

Maintenant pourquoi utiliser SSPI. D'abord et avant tout, vous n'utilisez pas de connexion SQL Server basée sur SQL. Cela signifie que Active Directory est la source unique de sécurité. Cela signifie que vous avez le moyen d'audit normal pour déterminer l'accès invalide. Deuxièmement, cela signifie que, à moins d'autres applications qui l'exigent, vous pouvez laisser votre serveur SQL dans le mode d'authentification Windows uniquement. Cela signifie qu'aucune connexion SQL Server n'est autorisée. Cela signifie que toutes les attaques contre SA sont arrêtées avant même de commencer. Et enfin, cela facilite la récupération. Si vous utilisez une connexion basée sur SQL Server, vous devez extraire le login avec le mot de passe SID et crypté. Si vous utilisez un compte d'utilisateur basé sur Windows en tant que "compte de service", lorsque vous allez sur un nouveau serveur SQL, en créant la connexion, tout sera reconnecté une fois que vous restaurez la base de données car les SIDS correspondent entre la connexion et l'utilisateur de la base de données. .

1
K. Brian Kelley

La meilleure chose à faire est de limiter ce qu'ils peuvent faire si/lorsqu'ils tombent sur le serveur Web. Cela signifie accorder uniquement les droits SQL requis pour que l'application fonctionne. Il est beaucoup plus facile de donner aux droits DBO de l'application, mais il fait que DB dB est beaucoup plus vulnérable en cas d'attaque réussie sur le serveur Web.

1
Kevin Colby

Si les utilisateurs ne manipulent pas la base de données directement (par d'autres outils clientels tels que SQL Server Management Studio), je vais généralement créer un seul identifiant SQL pour l'application et l'accordera l'accès dont il a besoin. À ce moment-là, l'utilisateur est restreint dans ce qu'ils peuvent faire comme autorisé par l'interface d'application Web.

0
squillman