J'essaie de déterminer si, sous Linux, les variables d'environnement d'un processus sont observables par d'autres utilisateurs (non root).
Le cas d'utilisation immédiat met des secrets dans les variables d'environnement. Ceci est discuté dans de nombreux endroits du Web comme étant peu sûr, mais je n'ai pas pu me concentrer sur le point d'exposition exact sous Linux.
Notez que je ne parle pas de mettre des secrets en texte clair dans des fichiers. Notez également que je ne parle pas de l'exposition au compte root (je vois la tentative de cacher les secrets d'un adversaire avec root comme un non-démarreur).
Cette question semble répondre à la mienne, avec des commentaires qui classent les variables d'environnement comme étant complètement sans sécurité, ou simplement masquées, mais comment peut-on y accéder?
Dans mes tests, un utilisateur non privilégié ne peut pas observer les variables d'environnement d'un autre utilisateur via la table de processus ('ps auxwwe'). Les commandes qui définissent les variables d'environnement (par exemple l'exportation) sont des commandes internes du shell qui ne parviennent pas sur la table de processus et par extension ne sont pas dans / proc / $ pid / cmdline. / proc / $ pid / environ n'est lisible que par l'UID du propriétaire du processus.
La confusion est peut-être entre différents systèmes d'exploitation ou versions. Diverses sources (récentes) sur le Web dénoncent l'insécurité des variables d'environnement, mais ma vérification ponctuelle des différentes versions de Linux semble indiquer que ce n'est pas possible depuis au moins jusqu'en 2007 (probablement plus loin, mais je n'ai pas de cases sur main pour tester).
Sous Linux, comment un utilisateur non privilégié peut-il observer les variables d'environnement pour les processus d'un autre?
la source
Les variables d'environnement sont très sécurisées. La question à laquelle vous avez lié est de dire que si le système est compromis, le seul avantage de sécurité de l'utilisation de variables d'environnement sur un fichier de configuration est l'obscurité. Cela signifie que si quelqu'un a obtenu un accès root, il peut accéder aux deux.
Il est également discutable de savoir si l'utilisation de variables d'environnement pour des données secrètes est «obscure». Il s'agit d'une pratique très courante et, par conséquent, je ne la considérerais pas comme telle.
Vous ne pouvez accéder aux données stockées dans une variable d'environnement qu'en 2 endroits:
1. L'environnement d'exécution du processus
Lorsque le processus est en cours d'exécution, les variables d'environnement de ce processus sont accessibles via
/proc/$PID/environ
. Cependant, seul l'utilisateur propriétaire du processus, ou root, peut accéder à ce fichier.2. La source des variables d'environnement
Si vous utilisez un script init et que les variables sont stockées dans ce script init, les variables peuvent bien sûr être obtenues en lisant ce script.
Ou si les variables d'environnement viennent d'ailleurs, alors où que ce soit.
3. sortie «ps»
Oui, je sais que j'ai dit 2, et dans tout système décent, ce sera 2. Cependant, si l'administrateur ne sait pas ce qu'il fait, il est possible d'ouvrir une 3ème avenue.
Si le processus est lancé via quelque chose comme
sh -c 'cd /foo/bar; POP=tart /my/executable'
, alors cesh
processus sera visible dansps
:la source
e
modificateur deps
. Il permet également uniquement de visualiser l'environnement des processus dont l'utilisateur est propriétaire.export FOO=bar
), elle peut également apparaître dans le fichier historique (par exemple~/.bash_history
) si l'utilisateur n'a pas pris de précautions pour l'empêcher de l'enregistrer ou la supprimer.