6
votes

Y a-t-il des alternatives plus sécurisées à la classe .NET SQLConnection?

Je suis très surpris que ce problème n'a pas été discuté en profondeur:

Cet article nous dit comment utiliser WINDBG pour vider une course à pied. Cordes de processus nettes en mémoire.

J'ai passé beaucoup de temps à rechercher la classe de séchage, qui utilise des blocs de mémoire épinglés non gérés et conserve aussi les données cryptées. Superbes.

Le problème est disponible lorsque vous utilisez sa valeur et l'attribuez à la propriété SQLConnection.ConnectionsRing, qui est du type System.String. Qu'est-ce que ça veut dire? Eh bien ...

  • Il est stocké dans du texte brut
  • La collection de déchets le déplace autour, laissant des copies en mémoire
  • il peut être lu avec Windbg Memory Dumps

    Cela annule totalement la fonctionnalité de séchage!

    En plus de cela, la classe SQLConnection est intrépide, je ne peux même pas rouler la mienne avec une propriété de séchage à la place; Yay pour la source fermée. Yay.

    Une nouvelle couche DAL est en cours, mais pour une nouvelle version majeure et pour tant d'utilisateurs, il sera au moins 2 ans avant que chaque utilisateur soit mis à niveau, d'autres pourraient rester sur l'ancienne version indéfiniment, pour une raison quelconque.

    En raison de la fréquence, la connexion est utilisée, le marshalling d'un séchage de séchage ne vous aidera pas, car les anciennes copies immuables collent en mémoire jusqu'à ce que GC se présente. La sécurité Windows intégrée n'est pas une option, car certains clients ne fonctionnent pas sur des domaines et d'autres erreurs et se connectent sur le net.

    Comment puis-je sécuriser la chaîne de connexion en mémoire, de sorte qu'il ne peut donc pas être visualisé avec Windbg?


2 commentaires

Parlez-vous d'une application résidant sur un client ou une application Web?


Ceci est une application de bureau côté client .NET 2.0, architecture client-serveur


4 Réponses :


10
votes

Si vous contrôlez une machine dans la mesure où vous pouvez lire la mémoire d'un autre processus, vous pouvez également remplacer la référence à la classe de séchage avec une référence à la chaîne . Vous aurez accès à des clés privées que l'autre processus peut utiliser.

Il n'y a pas de défense contre un pirate informatique qui possède votre mémoire de processus. :)


1 commentaires

Pointe avant, bon point! Ce que je vis est de réduire la surface de l'attaque. C'est un exercice intéressant en sécurité au moins :)



4
votes

Pas une vraie réponse à la question mais toujours:

Essayez d'utiliser l'authentification Windows au lieu de l'authentification SQL. Même si vous parvenez à sécuriser le mot de passe dans l'utilisateur de la mémoire de programme, vous pouvez le voir à l'aide de Sniffer de trafic.

Un autre avantage de l'authentification Windows est que SQL Server n'a pas besoin de stocker les hachages de mot de passe des utilisateurs. Avec l'authentification SQL déterminée, le pirate informatique peut brute de mot de passe de hachage ou en substituer avec un autre. En fait, le mot de passe peut être remplacé très facilement avec l'utilisation de certains programmes.


3 commentaires

Je préférerais aussi cette méthode, mais ce n'est pas une option pour un tiers des utilisateurs, car ils errent et se connectent à distance sur le Web parfois.


Veuillez clarifier: Vous dites que votre instance SQL Server est ouverte au monde (adresse IP publique et ports ouverts)? À partir de votre description, il semble que vous disposiez d'une application de bureau exécutée sur l'ordinateur client, qui exécute une connexion SQL sur la bande, sans VPN, à un serveur SQL ouvert. Si tel est le cas, vous avez une préoccupation de sécurité beaucoup plus importante, une tentative compliquée de lire la mémoire du processus sur le client dans l'espoir d'obtenir un mot de passe.


Corrigez, bien qu'avec un port personnalisé, non le port SQL standard. Toute préoccupation spécifique / liens que vous envisagez, concernant ce risque? J'aimerais aborder la gestion à ce sujet ...



2
votes

La communication entre un processus et un serveur SQL se produit idéalement sur une colonne vertébrale et si cela est compromis, c'est le moindre de vos soucis.


1 commentaires

La raison pour laquelle je me concentre sur le côté du client, et non le transport, est la semaine dernière, nous avons déposé une violation du droit d'auteur, car le client a décidé de cloner notre système, nous avons des coups d'écran, c'est assez drôle. C'est ce qui m'a amené plus en profondeur dans la sécurité.



1
votes

Comme il s'agit d'une application de bureau côté client, si vous vous demandez que vos informations d'identification de chaîne de connexion pourraient être exposées à certains pirates , il s'agit d'une faille de conception ...

Si vous vous connectez à votre serveur SQL avec des informations d'identification d'administration, ceci est votre problème. Vous devez créer un utilisateur avec des restrictions et l'utiliser dans votre application.

Si vous êtes affrayé d'exposer votre base de données, vous pouvez accéder à un service Web de l'application. Ce site Web accéderait ensuite à la base de données et renvoie les résultats.


4 commentaires

Les informations d'identification SQL sont limitées, mais en raison de la taille du système, comme je l'ai dit dans l'OP, le service DAL est pour une libération majeure. Je cherche une alternative qui conviendrait à la configuration actuelle. Frame de conception Oui, définitivement!


Vous ne pouvez donc pas ajouter un utilisateur avec des informations d'identification limitées? Pouvez-vous rediriger votre appel à la base de données vers une application / Webservice située sur vos serveurs? Souvent, lorsque vous parlez d'une faille de conception de sécurité, le patch possible et efficace est vraiment limité.


Il suffit de souligner que les "pirates" signifient la gestion des clients et les Devs qui essaient l'ingénieur inverse notre système.


Je voulais dire: nous avons des utilisateurs ayant des informations d'identification limitées. Nous n'utilisons pas le compte SA / admin. Vous avez raison sur le patch étant limité, c'est difficile.