[Résumé administrateur] Et si le programme veut des droits d'administrateur et que vous ne le faites pas


c) Vasya Lozhkin.


Malheureusement, dans le travail de l'administrateur système, non, non, et vous devez autoriser les utilisateurs à exécuter n'importe quel logiciel avec des droits d'administrateur. Le plus souvent, il s'agit d'étranges programmes chinois pour travailler avec de l'équipement. Mais il existe d'autres situations comme le tristement célèbre bnk.exe.


Donner à l'utilisateur des droits d'administrateur pour résoudre le problème rapidement et facilement est contraire aux normes de sécurité de l'information. Vous pouvez, bien sûr, lui donner un ordinateur séparé et le mettre sur un réseau isolé, mais - c'est cher et généralement ...


Essayons de prendre des décisions qui permettront au programme de fonctionner, et de ne pas embêter l’agent de sécurité avec le financier.


Eh bien, pourquoi avez-vous raison?


Un programme peut demander des droits d'administrateur sous condition dans deux cas:


  1. Quand il veut avoir accès à des endroits où les "simples mortels" ne peuvent pas: par exemple, créer des fichiers dans les répertoires système.
  2. Lorsque le programme a été compilé avec l'indicateur spécial «Exiger des droits d'administrateur».

Dans le premier cas, tout est clair: nous prenons en main le merveilleux programme de Mark Russinovich Process Monitor , voyons ce qui se passe et où le programme essaie d'entrer:



Où va ce 7Zip?


Et selon les résultats de l'étude, nous accordons à l'utilisateur les droits d'accès au répertoire ou à la branche de registre souhaité.


C’est plus difficile si le cas est clinique, et il n’est pas facile de donner des droits: par exemple, un programme nécessite une forte intervention dans le fonctionnement du système, comme l’installation de pilotes. Ensuite, vous devez trouver chaque ferme collective, qui sera discutée dans la dernière section de l'article. Pour l'instant, je vais couvrir le deuxième cas plus en détail - lorsque la case est cochée.


Pour le simplifier beaucoup, alors dans un manifeste spécial du programme (en passant, les installateurs sont également des programmes), il peut y avoir trois options de lancement:


  • asInvoker . Le programme démarre avec les mêmes droits que le processus qui l'a généré (en règle générale, c'est explorer.exe avec des droits d'utilisateur);
  • le plus élevé Le programme demandera les autorisations maximales disponibles pour l'utilisateur (l'administrateur verra une fenêtre demandant la mise à niveau de l'UAC, l'utilisateur ne le fera pas)
  • requireAdministrateur . Le programme nécessitera des droits d'administrateur dans tous les cas.

Si le développeur décide fermement d'exiger des droits d'administrateur, même s'ils ne sont pas nécessaires, vous pouvez contourner cela avec un peu de sang.


Non, tu n'auras pas raison


Sous Windows, à partir de Vista, le service UAC est apparu, qui, entre autres, est chargé de demander les programmes d'élévation. Tous les programmes n'ont pas "digéré" le travail avec ce service. Par conséquent, le système a été amélioré du mécanisme de compatibilité des applications, vous permettant de définir directement le programme son comportement - pour demander des droits ou non.


La façon la plus simple de travailler avec ce mécanisme est d'utiliser des variables d'environnement.


Prenons l'exemple de l'éditeur de registre. En effet, en exécutant regedit.exe sous l'administrateur, nous obtenons une demande d'élévation des droits:



Demander une élévation.


Si nous démarrons l'éditeur de registre à partir de la console, après avoir changé la valeur de la variable d'environnement __COMPAT_LAYER en:


set __COMPAT_LAYER=RUNASINVOKER 

Ensuite, il n'y aura pas de demande UAC, ainsi que des droits administratifs pour l'application:



Éditeur de registre privé de ses droits.


Cela peut être utilisé en lançant des programmes avec des fichiers batch ou en ajoutant un menu contextuel via le registre. En savoir plus dans Comment exécuter un programme sans privilèges d'administrateur et pour contourner l'invite UAC?


Un exemple concret d'un tel programme désagréable peut être rencontré lors du téléchargement de classificateurs bancaires à partir de 1C à partir du site Web de RBC à http://cbrates.rbc.ru/bnk/bnk.exe . Si la mise à jour des classificateurs est laissée aux utilisateurs eux-mêmes et qu'il n'y a aucun moyen de changer le téléchargement en bnk.zip (et 1C moderne le supporte), alors vous devez trouver des béquilles. Après tout, bnk.exe est une archive auto-extractible dans laquelle, pour une raison quelconque, il dit «Exiger des droits d'administrateur».


Étant donné que les raccourcis ne fonctionneront pas ici, car 1C télécharge lui-même le fichier et le lance, vous devrez utiliser de l'artillerie lourde - le Microsoft Application Compatibility Toolkit.


La documentation du logiciel, comme d'habitude, est disponible sur le site officiel , vous pouvez le télécharger dans le cadre du Kit d'évaluation et de déploiement Windows . Le processus de résolution du problème est simple.


Vous devez installer l'utilitaire, exécuter l'administrateur de compatibilité et créer un correctif d'application dans une base de données nouvelle ou existante:



Créez un correctif d'application.


Le nom et l'éditeur n'ont pas d'importance. Seul l'emplacement du fichier est important - ici, vous devez spécifier le vrai problème bnk.exe (où il se trouvera réellement - cela n'a pas d'importance).


Ensuite, sélectionnez RunAsInvoker dans la liste des correctifs.



Sélectionnez le correctif souhaité.


Nous laissons le reste par défaut, sauvegardons la base de données. Cela devrait ressembler à ceci:



Correctif créé pour bnk.exe.


Après cela, il suffira d'installer la base de données en cliquant dessus avec le bouton droit et en sélectionnant Installer. Désormais, les utilisateurs pourront charger eux-mêmes les classificateurs de banque.


Cela empire si l'application a vraiment besoin de droits d'administrateur. Ensuite, l'ajout de droits sur les objets système et les corrections n'aident pas.


D'accord, garde ça bien


Il semblerait que la solution la plus évidente pour lancer notre étrange logiciel soit d'utiliser l'utilitaire Runas intégré. La documentation est disponible sur le site Web de Microsoft .


Eh bien, voyons ce qui se passe.


Équipe:


 runas /savecred /user: "C:\Program Files\7-Zip\7zFM.exe" 

En effet, RunAs exécutera 7zip avec des privilèges d'administrateur, demandera un mot de passe et s'en souviendra. Ensuite, un raccourci avec une telle ligne de lancement lancera sans aucun doute 7zip sous l'administrateur.


)


Saisissez le mot de passe.


Il y a un inconvénient important: le mot de passe est mémorisé au niveau du système, et maintenant, en utilisant la commande Runas, vous pouvez démarrer absolument n'importe quel programme. Ce n'est pas différent de l'octroi direct de droits d'administrateur aux employés, vous ne devez donc pas utiliser cette solution.


Mais les runas peuvent être utiles lorsqu'un employé connaît le mot de passe administrateur, mais travaille sous un compte limité (en principe, chaque administrateur système devrait le faire).

Si nous avons commencé avec les commandes de la console, nous passerons à des scripts de niveau supérieur. Une solution intéressante a été proposée dans l'article « Plankton Windows », où les Runas susmentionnés étaient liés avec un script js et passés à travers un obscurcisseur. La solution a un inconvénient évident - le script peut être décodé.


Une méthode légèrement plus intéressante dans 2k20 est les fonctionnalités de PowerShell et son travail avec les mots de passe. Vous pouvez en savoir plus dans l'article « Protection par mot de passe et chiffrement dans les scripts PowerShell ».


En bref: dans PS, le travail avec les mots de passe se fait via un type de données SecureString spécial et un objet PSCredential. Par exemple, vous pouvez saisir le mot de passe de manière interactive:


 $Cred = Get-Credential 

Enregistrez ensuite le mot de passe sous forme cryptée dans un fichier:


 $Cred.Password | ConvertFrom-SecureString | Set-Content c:\pass.txt 

Et maintenant, utilisez ce fichier pour un travail non interactif:


 $username = "Domain\" $pass = Get-Content C:\pass.txt | ConvertTo-SecureString $creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $username, $pass 

Malheureusement, ce fichier ne peut être utilisé que sur le PC sur lequel il a été créé. Pour éviter cela, vous pouvez créer une clé de chiffrement distincte. Par exemple, comme ceci:


 $AESKey = New-Object Byte[] 32 [Security.Cryptography.RNGCryptoServiceProvider]::Create().GetBytes($AESKey) $AESKey | out-file C:\password_aes.key 

Maintenant, en utilisant cette clé, le mot de passe peut être crypté:


 $Cred.Password| ConvertFrom-SecureString -Key (get-content C:\password_aes.key )| Set-Content C:\pass.txt 

Et décryptez:


 $pass = Get-Content C:\pass.txt | ConvertTo-SecureString -Key (get-content C:\password_aes.key) 

Malheureusement, les choses sont tout aussi tristes avec la sécurité: il n'est pas difficile de supprimer un mot de passe si vous avez accès à un fichier avec une clé de cryptage et un mot de passe crypté. Oui, vous pouvez ajouter de l'obscurcissement et compiler le script en .exe avec les fichiers nécessaires. Mais vous devez comprendre que ce sont des demi-mesures.


À un moment donné, j'ai utilisé mon AutoIt préféré pour résoudre de tels problèmes, où j'ai compilé un script avec l'équipe RunAs et me suis réjoui ... Jusqu'à ce que je découvre qu'AutoIt (en particulier les anciennes versions) s'est décompilé une ou deux fois.

Une autre option intéressante peut être l'utilisation des tâches assignées - si vous créez une tâche planifiée à partir du compte administrateur, l'utilisateur n'aura qu'à la démarrer. Malheureusement, cette solution ne convient pas pour un travail interactif avec l'application.


Dans le monde, il existe plusieurs solutions tierces conçues pour résoudre le problème. Je vais m'attarder sur quelques-uns d'entre eux.


L'un des utilitaires les plus célèbres est peut-être AdmiLink , développé par Alexei Kuryakin pour les besoins de la physique nucléaire. Le programme et les principes de son travail sont décrits sur le site officiel . Comme d'habitude, je me permets une brève description.


Le programme se compose de trois modules. AdmiLink est une fenêtre graphique où vous pouvez créer un raccourci vers l'application souhaitée (en principe, dans certains cas seulement, cela suffit).



La fenêtre principale du programme.


En plus de créer directement un raccourci (et oui, la demande UAC peut également être supprimée), il existe des fonctions supplémentaires comme une calculatrice, un terminal et des paramètres pratiques pour les politiques de sécurité. Avec toutes les fonctionnalités du programme, le lecteur est invité à le découvrir par lui-même.


Le deuxième module est appelé AdmiRun et est un utilitaire de console. Elle sait comment exécuter des applications au nom de l'administrateur, recevant comme l'un des paramètres une chaîne créée via AdmiLink. Le nom d'utilisateur et le mot de passe sont cryptés dans la ligne, et le chemin d'accès au programme est également impliqué.


À première vue, tout semble sûr, mais, malheureusement, le code du programme est fermé, et combien vous pouvez faire confiance au développeur est une question.


Le troisième module - AdmiLaunch - est responsable du lancement des fenêtres dans différents modes, et il est utilisé pour lancer AdmiRun si vous créez un raccourci via AdmiLink.


En général, la solution a été testée au fil des années et des générations d'administrateurs de systèmes nationaux. Mais j'ajouterai une alternative de l'étranger.


RunAsRob est un logiciel assez intéressant créé par le développeur allemand Oliver Hessing. Contrairement à AdmiLink, le logiciel est installé en tant que service fonctionnant sous un compte privilégié (administrateur ou système). Par conséquent, le raccourci préparé fait référence au service, qui à son tour lance déjà le logiciel spécifié.


Une caractéristique du programme est qu'il est possible d'autoriser non seulement des programmes, mais également des dossiers (y compris des dossiers réseau). Et le stockage des paramètres dans le registre a permis d'ajouter des modèles de stratégie de groupe, à peu près comme nous l'avons écrit dans l'article « Immersion dans les modèles et apprivoiser le GPO Windows ». Grâce à cela, si nécessaire, les paramètres peuvent être appliqués directement depuis Active Directory.



La fenêtre principale du programme.


Le programme est richement documenté sur le site officiel .


Cet auteur possède également un programme RunAsSpc qui vous permet d'exécuter des fichiers exécutables sous les droits d'un autre utilisateur, en transférant les informations d'identification via un fichier crypté.


Je peux seulement ajouter que ce logiciel est gratuit uniquement pour un usage personnel.


Mais gardez à l'esprit que d'un programme exécuté sous des droits administratifs, vous pouvez faire du mal. Par exemple, lancez une console de commande privilégiée via la boîte de dialogue Fichier - Ouvrir.



Exécutez cmd.exe directement à partir de l'éditeur de registre.


Les politiques interdisant le menu contextuel et d'autres gestionnaires de tâches, dont certains peuvent configurer AdmiLink, aideront à se protéger un peu. Mais dans tous les cas, vous devez être prudent.


Avez-vous déjà fait d'étranges béquilles? Je suggère de partager des histoires dans les commentaires.

Source: https://habr.com/ru/post/fr485958/


All Articles