Pourquoi une application ne devrait-elle pas utiliser le compte sa

21

Ma première question, veuillez être douce. Je comprends que le compte sa permet un contrôle complet sur un serveur SQL et toutes les bases de données, utilisateurs, autorisations, etc.

Je suis absolument convaincu que les applications ne devraient pas utiliser le mot de passe sa sans une raison perfectionnée et axée sur l'homme d'affaires. Les réponses à cette question comprennent une grande partie de mon raisonnement pour une discussion axée sur l'informatique

Je suis obligé d'accepter un nouveau système de gestion de services qui ne fonctionnera PAS à moins qu'il n'utilise le mot de passe sa. Je n'ai jamais eu le temps de comprendre pourquoi lors de la configuration d'une évaluation, mais l'équipe du serveur a essayé de l'installer pour utiliser un rôle fixe que j'avais configuré en incorporant db_creater et d'autres autorisations que je pensais que cela nécessiterait. qui a échoué. J'ai ensuite laissé l'équipe du serveur s'installer avec le compte sa mais s'exécuter sous un compte dans le rôle dbo pour sa base de données mais cela a échoué aussi. Grincheusement, j'ai essayé de le faire fonctionner avec un compte dans le rôle sysadmin, mais même cela a échoué et pas avec des messages d'erreur utiles qui m'ont permis de comprendre ce qui se passait sans passer plus de temps que je n'en disposais. Il ne fonctionnera qu'avec le compte sa et le mot de passe stocké en texte clair dans le fichier de configuration.

Lorsque j'ai posé cette question et que l'équipe du serveur a parlé au fournisseur, elle a obtenu la réponse inquiétante «Quel est le problème avec ça? puis «eh bien, nous pouvons regarder brouiller le mot de passe» brouillage ffs

Je sais qu'il existe des moyens de restreindre l'accès au fichier, mais ce n'est qu'une autre faiblesse de la sécurité à mon avis

Quoi qu'il en soit, ma question est, quelqu'un pourrait-il m'indiquer une documentation que je peux utiliser pour expliquer à l'entreprise la raison pour laquelle c'est une mauvaise chose et devrait être un gros non non. Je travaille dans un domaine qui signifie que je dois prendre la sécurité au sérieux et que j'ai eu du mal à faire comprendre l'entreprise et, finalement, je peux être surclassé, mais je dois essayer.

SQLDBAWithABeard
la source
1
saou tout membre de sysadmin, y compris les connexions Windows?
Remus Rusanu
sa et sa uniquement :-(
SQLDBAWithABeard
1
Vous devez obtenir plus d'informations auprès du fournisseur. Plus précisément, quelles choses font-ils qui nécessitent saexplicitement.
Aaron Bertrand
11
Souvent, lorsqu'un fournisseur dit qu'il doit se connecter en tant que sa explicitement, cela signifie qu'il n'a tout simplement pas testé son application d'une autre manière (ou qu'il l'a fait une fois et qu'il s'est produit une erreur qu'il n'a pas examinée avant de décider "nous allons simplement coller with sa "), ce qui ne me ferait pas confiance. Ne prenez pas cette tactique directement avec le vendeur, en demandant plus diplomatiquement, vous obtiendrez de meilleurs résultats!
David Spillett
David l'a correctement, je crois d'après mes brèves relations avec le fournisseur
SQLDBAWithABeard

Réponses:

21

Cela dépend de votre entreprise, mais l'essentiel dans la plupart des cas est de s'assurer qu'il n'est pas considéré comme un problème informatique. Il s'agit d'un problème de sécurité et bien que les deux personnes se chevauchent massivement, les gens d'affaires sont plus susceptibles d'écouter si vous dites «sécurité» que si vous «gémissez à propos de choses informatiques générales».

Travaillez-vous avec des clients qui ont des exigences de sécurité? C'est un bon point de départ. Si nous exécutions une application avec un accès de niveau SA, ou simplement une application qui ne sécurisait pas correctement ses informations d'identification même si nous n'utilisions pas un accès privilégié (nous préférons fortement Windows Integrated plutôt que l'utilisateur / passe stocké si possible), et nous étions soumis à une sécurité audit, cet audit échouerait et nous risquerions de perdre des clients et / ou de devoir reverser de l'argent quant aux clients de nos groupes (organismes bancaires dans le cas du produit sur lequel je travaille principalement, d'autres parties du groupe s'occupent de la police et de la santé autorités et ainsi de suite) la sécurité fait partie de notre offre étant adaptée à l'objectif. Les gens d'affaires vont comprendre la gravité de cette menace potentielle , même si elles paient généralement pas plus que du bout des lèvres aux recommandations IT.

Même en ignorant les exigences imposées par le client, si vous vous efforcez de répondre à diverses normes de sécurité standard de l'industrie, ce type d'authentification d'application va vous échouer face à un audit, car il est si loin des meilleures pratiques qu'il est généralement considéré comme quelque chose sur la liste "ne devrait tout simplement pas être fait". Expliquez clairement à vos décideurs professionnels que la sécurité est une partie importante de l'application, et le fait que ce fournisseur ne semble pas être au courant (ou du moins de manière appropriée) vous fait douter de quoi d'autre ils pourraient ne pas être capables traiter: connaître les meilleures pratiques en matière de sécurité de base de données fait (enfin, devrait) faire partie de leur travail et les mettre en œuvre n'est pas difficile.

Soulignez également que vous (l'acheteur) devez dicter des exigences de sécurité raisonnables au fournisseur, et non l'inverse. Ce sont vos données, elles ne sont donc pas qualifiées pour déclarer ce qui est considéré comme suffisamment sécurisé.

David Spillett
la source
Ha. Je ne savais pas entrer a ajouté le commentaire Il est sûr de dire que là où je travaille, la sécurité de tous types est une préoccupation importante, considérez-la comme la police si vous le souhaitez. Cependant, les décideurs ne voient pas le sa comme une préoccupation. L'audit est un bon point de départ et je poursuivrai mes recherches.
SQLDBAWithABeard
+1 J'ai particulièrement aimé le commentaire que c'est une sécurité question pas ce problème.
Kenneth Fisher
2
J'hésiterais à acheter quoi que ce soit à un groupe de gars qui pensent que c'est OK de laisser les clés du royaume assis dans un fichier de configuration en texte brut. Je sais que ce n'est pas votre appel, mais si vous pouvez demander à The Deciders de voir ce qu'est une idée terrible et ce qu'elle dit sur le vendeur, cela pourrait aider votre cas.
mdoyle
Mdoyle - Le problème est que lorsque j'en apprends plus à ce sujet, les Décideurs voient les choses dans les signes £ et comme il s'agit d'une mise à niveau d'une ancienne version, cela ne coûte pas cher. Je pense que je gagne un peu la bataille grâce aux bonnes personnes ici. J'ai retardé le test de la partie serveur Web de cela pour le moment au moins
SQLDBAWithABeard
20

Aucune application n'a besoin d'avoir accès à SA - jamais. (À moins que son seul but soit l'administration d'une base de données quelconque).

C'est une règle générale de ne jamais accorder plus de droits à une connexion (application- ou personnelle-) que ce que l'entreprise requiert pour cette connexion.

Aucune application n'est complètement sécurisée. La plupart ont une sorte de vulnérabilité d'injection SQL ou XSS. Si un intrus parvient à exécuter une déclaration de son choix et dispose d'un accès «SA», il peut y avoir beaucoup de choses qui peuvent arriver à vos données qui pourraient tuer l'entreprise immédiatement. (Surtout si les données doivent être fiables car elles sont utilisées par les forces de l'ordre.) Demandez aux parties prenantes ce qu'elles devraient faire, si quelqu'un était en mesure de modifier délibérément même un seul enregistrement et que ces informations avaient été divulguées.

Désormais, avec l'accès «SA», non seulement la base de données de l'application pouvait être modifiée, mais également toutes les autres bases de données du système. Alors, demandez à vos parties prenantes ce qu'elles feraient si vous vouliez faire une copie de TOUTES vos bases de données et l'envoyer au journal. Parce que cela pourrait arriver si un employé mécontent découvre l'existence de cette faille de sécurité.

Le vendeur a déclaré qu'il pouvait brouiller le mot de passe. C'est BS. L'application doit accéder au mot de passe en texte clair pour l'utiliser, de sorte que la clé pour déchiffrer le mot de passe serait stockée non chiffrée juste à côté. De plus, comme mentionné précédemment, le vrai problème n'est pas que quelqu'un trouve ce mot de passe; c'est que les personnes (mal) utilisant ce système à travers une vulnérabilité auront un accès complet à toutes vos bases de données sans jamais voir le mot de passe.

La raison la plus probable pour laquelle une SA est requise est que l'application doit interagir avec l'Agent SQL. Au moins, c'est l'une des fonctions les plus difficiles à mettre en œuvre correctement et la plupart des gens prennent simplement la route "utiliser SA" pour la contourner. Exiger «SA» lui-même peut être dû au fait que le fournisseur ne sait pas comment vérifier les autorisations sysadmin.

Vous pouvez essayer deux solutions:

  1. Renommez SA (une meilleure pratique de sécurité de toute façon) et créez un nouveau compte appelé «SA» avec des droits restreints. (Jamais essayé cela, mais cela devrait fonctionner)

  2. N'installez pas le logiciel. En tant que professionnel, vous ne pouvez pas assumer la responsabilité de cette action, vous ne devez donc pas l'installer. Pour vous donner une comparaison, demandez à un plombier de faire passer la conduite de gaz directement à travers le foyer au lieu de le contourner pour économiser du tuyau / de l'argent. Vous vous moquez peut-être de cette image, mais je pense que c'est une comparaison appropriée - Ce logiciel explosera tôt ou tard, probablement plus tôt. Et quand c'est le cas, cela pourrait aussi faire chuter l'entreprise.

Si tout cela n'empêche pas "eux" d'exiger ce logiciel, la dernière recommandation que je puisse vous donner est de vous lancer. Si quelque chose arrive aux données, vous serez le premier responsable. Donc, avec cette application en place, vous n'avez probablement aucune sécurité d'emploi, alors trouvez un employeur qui vous en donne au moins.

Sebastian Meine
la source
4
+1 juste pour la comparaison "la conduite de gaz directement à travers la cheminée" .
ypercubeᵀᴹ
Dans SQL Server, le compte sa ne peut pas être renommé. Il peut cependant être désactivé.
Greenstone Walker
1
@GreenstoneWalker: sûr qu'il peut: alter login sa with name = [as];.
Remus Rusanu
Remus, cela me servira bien pour compter sur SSMS et aussi pour compter sur d'anciennes connaissances. Avant SQL Server 2005, il ne pouvait pas être renommé. SSMS ne semble pas être en mesure de renommer la connexion sa mais le T-SQL que vous publiez est exactement correct.
Greenstone Walker
12

Je vois deux lignes d'attaquer cela.

  • Conformité . Y a-t-il des critères de conformité obligatoires en vigueur dans votre boutique? Recherchez attentivement sa formulation et voyez si vous trouvez quelque chose qui serait incompatible avec la «condition» de l'application. Si vous trouvez quelque chose qui empêche l' sautilisation par une application, vous avez un boîtier étanche à l'eau, car l'application rendrait votre entreprise responsable, etc.

  • Accès administrateur utilisateur . Assurez-vous de présenter clairement le cas où une application nécessitant un saaccès donne en fait saaccès à tous les utilisateurs d'entreprise disposant de droits d'administrateur sur les postes de travail où l'application est installée. Il n'y a aucun moyen de cacher le samot de passe aux administrateurs locaux où l'application s'exécute, c'est un fait et aucune quantité de «brouillage» ne peut empêcher cela. Il n'y a pas de racine de confiance locale à laquelle un administrateur local ne peut pas accéder s'il le souhaite. Précisez qu'avoir une application qui nécessite saéquivaut à donner des saprivilèges à tous les utilisateurs exécutant l'application. Expliquez ce que cela signifie, ce que les utilisateurs peuvent faire efficacement:

    • possibilité de lire toutes les données du serveur, non seulement à partir de cette application mais à partir de toute autre base de données hébergée sur ce serveur
    • possibilité de modifier toutes les données sur le serveur, à nouveau à partir de toute autre base de données sur le même serveur
    • pouvoir effacer toute trace de ses actions après une modification
    • pouvoir modifier tout audit et historique pour faire apparaître que certaines actions ont été effectuées par un utilisateur différent
    • possibilité d'utiliser les informations d'identification SQL Server pour intensifier une attaque sur toute autre ressource qui fait confiance à ce serveur. Cela peut impliquer tout autre serveur SQL mais également d'autres ressources, y compris, mais sans s'y limiter, les partages de fichiers, les serveurs d'échange, etc., car le serveur SQL peut être utilisé comme un tremplin.

Expliquez aux décideurs que l'acceptation de cette application implique de confier à chaque employé disposant d'un accès administrateur aux postes de travail exécutant l'application tous les privilèges mentionnés ci-dessus. Le vendeur tentera de défendre sa position en invoquant une sorte ou une autre de «chiffrement» du samot de passe pour l'application. Cela ne retient pas l'eau. Aucun schéma de chiffrement ne peut résister à une attaque d'un administrateur. Et précisez que la quantité de compétences techniques requises pour trouver un mot de passe localement «caché» est complètement hors de propos. Les employés ne le feront pas eux-mêmes, l'un d'eux cherchera sur Google et découvrira le script facile à utiliser qui le fait.

Remus Rusanu
la source
Merci Remus. C'est précisément la réponse que j'avais besoin. Je gagne lentement la bataille et tout cela aide
SQLDBAWithABeard
7

Tout d'abord, le mot de passe sa stocké en clair? Vous devriez voter avec votre portefeuille. Quiconque pense que cela est acceptable doit être mis hors service.

Voici une anologie qui pourrait vous aider à expliquer le problème: l'employée Alice doit avoir accès au premier étage. Lui donnez-vous la clé principale de tout le bâtiment ou juste la clé du premier étage? Réponse: Vous lui donnez juste les clés du premier étage. Pourquoi? Parce qu'il réduit le risque de dommages accidentels ou délibérés. Si Alice ne peut pas accéder à la salle des serveurs du deuxième étage en premier lieu, elle ne fera jamais rien de mal là-dedans.

C'est le principe du moindre privilège.

Quant à savoir pourquoi l'application doit utiliser le compte sa, c'est une question à laquelle PerfMon ou Extended Events devrait pouvoir répondre. Créez une trace PerfMon à l'aide du modèle T-SQL, peut-être filtrée par nom d'application.

Sur le haut de ma tête, voici un autre argument contre l'utilisation de sa: L'utilisation du compte sa nécessite que le service SQL Server soit en mode d'authentification mixte. Seule l'authentification WIndows est meilleure car nous pouvons tirer parti de toutes les fonctionnalités sécurisées de Kerberos.

Marcheur de Greenstone
la source
4

D'un point de vue technique, il n'y a aucune raison pour qu'une application ait besoin d'autorisations SA. Ce qui s'est probablement passé, c'est que les développeurs de l'application vérifient probablement si leur connexion dispose d'autorisations sysadmin et sinon, cela génère simplement un message d'erreur. De cette façon, ils peuvent prétendre que l'application nécessite des droits SA.

Si vous devez avoir cette application, je l'exécuterais sur une instance distincte qui ne contient rien d'autre.

mrdenny
la source
Je pense qu'il vérifie probablement s'il fonctionne en tant que sa, puis échoue car il ne fonctionnera pas sous un compte avec sysadmin
SQLDBAWithABeard
1
Ensuite, il s'agit de vérifier l'ID utilisateur spécifique. Il y a de fortes chances que le développeur le fasse parce qu'il fonctionne avec sa et qu'il ne voulait pas se soucier de voir les autorisations dont il avait réellement besoin, c'est donc le moyen le plus simple d'éviter d'autres erreurs. C'est une approche totalement merdique et le vendeur devrait être frappé pour le faire.
mrdenny
4

Peut-être que votre fournisseur demande / requiert "sa", car quelque part dans son application, il utilise XP_CMDSHELL. (Ne me lancez pas sur les dommages possibles avec un accès illimité à XP_CMDSHELL. Il suffit de dire que cela ouvre potentiellement non seulement vos données, mais la machine hôte et, peut-être, tout autre élément de votre réseau à un accès de type administrateur)

S'il y a un besoin légitime, vous pouvez accorder un accès restreint via un compte proxy. Voir, par exemple, BOL: http://msdn.microsoft.com/en-us/library/ms175046.aspx

TheDataBeagle
la source
4

Aucune application ne devrait nécessiter le compte SA et le mot de passe pour fonctionner.

Cependant, j'ai installé un produit de gestion des services informatiques et, pendant le processus d'installation, vous avez la possibilité de fournir les informations d'identification du compte SA pour permettre au programme d'installation de créer la base de données et d'attacher un compte à la base de données pour le logiciel à utiliser. Les informations d'identification du compte SA ne sont enregistrées dans les journaux de l'application ou du programme d'installation nulle part. Ce logiciel offre également la possibilité d'utiliser une base de données pré-créée lors de l'installation.

Je voudrais donc simplement confirmer si le compte SA est requis pour l'installation ou le fonctionnement de ce logiciel de gestion des services informatiques.

Si Installation: créez un compte 'sa' temporaire - faites l'installation - et supprimez le compte.

Si opération: évitez ce logiciel comme la peste. (ou configurez un serveur SQL autonome qui hébergera uniquement cette base de données.)

Brent
la source
+1 pour l'instance de serveur SQL dédiée. Ce serait une bonne alternative de dernier recours à l'octroi de sa sur le vrai serveur.
Dan
0

Tout paramètre de sécurité système SQL Server par défaut fourni doit être modifié. Il est recommandé de ne pas utiliser le mode mixte (active à la fois l'authentification Windows et SQL Server) pour l'authentification. Au lieu de cela, passez à l'authentification Windows uniquement - qui appliquera la stratégie de mot de passe Windows - vérification de la longueur, de la durée de vie et de l'historique du mot de passe. La fonctionnalité de la stratégie de mot de passe Windows qui la différencie de l'authentification SQL Server est le verrouillage de la connexion - après plusieurs tentatives de connexion infructueuses, la connexion devient verrouillée et inutilisable pour une utilisation ultérieure

D'un autre côté, l'authentification SQL Server ne fournit aucune méthode pour détecter les tentatives d'attaque par force brute, et pire encore, SQL Server est même optimisé pour gérer un grand nombre de tentatives de connexion rapide. Donc, si l'authentification SQL Server est indispensable dans un système SQL Server particulier, il est fortement recommandé de désactiver la connexion SA

Ivan Stankovic
la source
1
Était-ce un accident ou intentionnel - de répondre à 2 questions avec la même réponse exacte?
ypercubeᵀᴹ
Merci pour le commentaire. Je pensais juste que l'explication peut aider dans les deux cas.
Ivan Stankovic
Intéressant, mais pas particulièrement utile au PO.
Dan