Quelles sont les alternatives possibles pour fournir un «mot de passe administrateur» pour une application de bureau?


10

Je gère et refactorise actuellement un logiciel utilisé dans mon entreprise depuis plus d'une décennie maintenant. L'un des éléments de cette application est une sorte de mode administrateur ou utilisateur avancé qui fournit des éléments tels que des entrées supplémentaires / internes ainsi que la possibilité de désactiver les limites d'entrée.

Historiquement, ce mode a été activé en plaçant un fichier spécifiquement nommé à un endroit spécifique du répertoire système de Windows (tous deux codés en dur dans l'application), le fichier étant nommé `` quelque chose.DLL '', même s'il était vide Fichier ASCII et non une DLL.

J'ai donc récemment ajouté du code et un petit formulaire modal qui permet à l'utilisateur d'entrer un mot de passe administrateur pour activer cette fonctionnalité. Il s'agit d'un mot de passe défini, non spécifique à l'utilisateur. Lorsque le mot de passe correct est entré, il fait en quelque sorte la même chose en créant un «fichier clé» dans le répertoire racine des applications afin que le programme puisse démarrer en mode administrateur si ce fichier est présent.

Maintenant, le directeur du département auquel ce logiciel est principalement destiné n'aime pas tellement cette idée. Il pense que si nous avons juste un mot de passe simple et prédéfini, il «sortira» facilement, et il ne veut pas que des utilisateurs inexpérimentés accèdent à ces fonctionnalités supplémentaires.

Ma question est donc la suivante: quelles autres méthodes existe-t-il pour fournir ce type d'accès qui serait un peu plus sûr? C'est à peu près juste moi quand il s'agit de maintenir et de gérer ce logiciel, donc tout ce qui n'est pas complètement intégré ou automatisé n'aiderait pas (comme l'envoi de demandes de `` clés de licence '' ou quelque chose de similaire).

Remarques: Cette application est écrite en VB.NET (.NET 4.0), et je prévois actuellement d'utiliser le déploiement en une seule fois lorsque la nouvelle version sera terminée.


1
Quelqu'un doit décider quels utilisateurs sont "inexpérimentés" et lesquels ne le sont pas. Qui prend cette décision? Qui doit mettre ces décisions dans le système?
Doc Brown

Réponses:


13

Si vous avez Active Directory, vous pouvez tester l'appartenance à un groupe Active Directory:

public bool IsInADGroup(string ADGroupName)
    {
        bool result = false;
        List<string> myGroups = new List<string>();

        using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, SystemInformation.UserDomainName))
        {
            using (PrincipalSearchResult<Principal> src = UserPrincipal.FindByIdentity(pc, SystemInformation.UserName).GetGroups(pc))
            {
                src.ToList().ForEach(sr => myGroups.Add(sr.SamAccountName));
            }
        }
        result = myGroups.Contains(ADGroupName);
        return result;
    }

C'est une très bonne réponse, et je garderai certainement à l'esprit ce projet et d'autres. Cependant, le vrai problème, ce sont les utilisateurs de ce programme en dehors de notre entreprise. Nous le fournissons à la fois à nos sociétés sœurs et à quelques utilisateurs externes tiers. En fait, je pense à ce stade qu'il sera préférable de désactiver complètement ces fonctionnalités pour ceux qui ne font pas partie de notre réseau et d'utiliser votre suggestion à des fins internes.
Anthony

5

Le gestionnaire a raison sur la sortie du mot de passe . Ce n'est pas une question de savoir si, mais quand.

Étant donné qu'Active Directory n'est pas une option pour certains utilisateurs, vous pouvez créer un fichier texte signé avec une liste de noms de connexion Windows autorisés à accéder en tant que superutilisateur. Cela suppose que les gens ne partagent pas d'ordinateurs ou de connexions.

Les noms d'utilisateur iraient simplement dans un fichier texte facilement distribué qui serait placé dans le dossier de l'application. L'important est de signer la liste des noms d'utilisateurs. Restez très simple. Un nom d'utilisateur par ligne et mettez le hachage sur la dernière ligne. Intégrez une sorte de clé secrète dans votre programme binaire et hachez-la avec les noms d'utilisateur. La clé secrète empêchera les gens de modifier le fichier, puis de calculer le hachage eux-mêmes (ce qui est probablement farfelu pour commencer).

UserName1
UserName2
.
.
.
UserName34
<HashOfUserNamesAndSecretKey>

Cela, bien sûr, nécessite que quelqu'un quelque part agisse en tant qu'administrateur de la liste des utilisateurs autorisés. L'administrateur doit avoir un programme (écrit par vous!) Qui génère le fichier et le hachage. Si rien d'autre, il pourrait simplement prendre un fichier texte de noms d'utilisateurs et ajouter le hachage.

Dans l'intérêt d'être approfondi, une personne dont l'accès a été révoqué peut récupérer la copie du fichier qui contient toujours son nom de connexion. Chaque fois qu'ils voulaient avoir accès, ils pouvaient simplement mettre leur copie en place. Mais ce n'est probablement pas quelque chose à craindre.


3

Depuis Active Directory n'est pas une option, je hacherais la date actuelle. Utilisez les éléments avec le plus d'entropie en premier (jour du mois) et ceux avec le moins d'entropie en dernier (année). Si nécessaire, ajoutez un sel spécifique au domaine (un identifiant client, le nom de l'entreprise, etc. car il est utilisé en dehors de votre entreprise). Cela devrait produire un mot de passe très différent chaque jour qui est pratiquement impossible à deviner pour les utilisateurs finaux, et il peut être différent pour différentes sociétés qui utilisent le logiciel.

Il s'agit essentiellement d'un problème de poule et d'oeuf puisque le logiciel doit pouvoir authentifier l'utilisateur sans téléphoner à la maison. Faites donc un œuf avec un mécanisme de craquage vraiment obscur: alors que la sécurité par l'obscurité n'est pas une vraie sécurité, c'est la meilleure que vous ayez donnée aux paramètres de votre problème.

C'est aussi mieux que de placer un fichier texte quelque part: ce n'est pas mieux qu'un mot de passe statique car une fois le secret dévoilé, game over.


0

Utilisez les listes de contrôle d'accès .

La façon rapide et sale de le faire consiste à supprimer toutes les autorisations du répertoire de l'application (y compris l'autorisation de lecture), puis ajoutez ces autorisations pour tous les utilisateurs autorisés à exécuter l'application. Bien sûr, un utilisateur autorisé pourrait tout aussi facilement copier le répertoire de l'application vers un emplacement public, mais cela ne se produira probablement pas accidentellement, tandis que le partage de mot de passe peut facilement se produire accidentellement.

Cela suppose, bien sûr, que les ordinateurs impliqués sont sécurisés (avec, espérons-le, avec Active Directory).


Si les ordinateurs impliqués sont sécurisés avec Active Directory, il peut être préférable de simplement sécuriser les fonctionnalités avancées en devenant membre d'un groupe de sécurité. Les utilisateurs peuvent être ajoutés au groupe selon les besoins et les autorisations du système de fichiers ne sont pas pertinentes
Kevin

@Kevin: D'accord. Je pense que la réponse de Dan couvre cela.
Brian

0

Ma préférence est celle suggérée par @Dan - utilisez Active Directory. Si cela n'est pas possible, un générateur de mot de passe basé sur le temps peut être utile. Dans une situation similaire (dans un passé très éloigné), une entreprise dans laquelle je travaillais utilisait le 9999-MMDD. Cela est sorti après quelques années. Si vous avez jeté hhmm et mélangé un peu, vous pourriez en retirer un an ou deux avant que quelqu'un ne laisse le chat sortir du sac.

Vous pouvez toujours écrire un programme qui génère un mot de passe en utilisant une stratégie similaire, mais plus complexe. Ajoutez également le nom utilisé et le nom de la machine. Votre gestionnaire peut exécuter ce programme pour obtenir le mot de passe actuel pour cette machine uniquement. Stockez des informations dans le fichier afin qu'elles ne soient pas valides si elles sont copiées sur une autre machine ou si un autre utilisateur est connecté. Il vous appartient ensuite de gérer le programme en toute sécurité et si le chat sort, c'est de sa faute.

Ce schéma est considéré comme faible et peu fiable du point de vue de cyrpto, mais il convient au problème que vous rencontrez.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.