44 votes

Comment masquer un mot de passe passé en argument de ligne de commande ?

Je lance un logiciel en arrière-plan qui nécessite pour certaines actions de saisir une phrase secrète pour déverrouiller certaines fonctionnalités qui ressemblent par exemple à ceci :

$ darkcoind masternode start 

Maintenant, j'ai quelques préoccupations en matière de sécurité sur mon serveur debian sans interface graphique.

Chaque fois que je recherche mon historique bash par exemple avec Ctrl+R, je peux voir ce mot de passe super fort. Maintenant, j'imagine que mon serveur est compromis et qu'un intrus a accès à un terminal et peut simplement utiliser Ctrl+R pour trouver ma phrase secrète dans l'historique.

Y a-t-il un moyen de saisir la phrase secrète sans qu'elle soit affichée dans l'historique bash, ps, /proc ou ailleurs ?


Mise à jour 1 : Ne pas passer de mot de passe au démon génère une erreur. Ce n'est pas une option.


Mise à jour 2 : Ne me dites pas de supprimer le logiciel ou d'autres astuces utiles comme pendre les développeurs. Je sais que ce n'est pas un exemple de bonnes pratiques, mais ce logiciel est basé sur bitcoin et tous les clients basés sur bitcoin sont des serveurs json rpc qui écoutent ces commandes et c'est un problème de sécurité connu toujours en cours de discussion (a, b, c).


Mise à jour 3 : Le démon est déjà démarré et fonctionne avec la commande

$ darkcoind -daemon

En faisant un ps, seul la commande de démarrage est affichée.

$ ps aux | grep darkcoin
user     12337  0.0  0.0  10916  1084 pts/4    S+   09:19   0:00 grep darkcoin
user     21626  0.6  0.3 1849716 130292 ?      SLl  May02   6:48 darkcoind -daemon

Ainsi, les commandes avec la phrase secrète ne s'affichent pas du tout dans ps ou /proc.

$ darkcoind masternode start 
$ ps aux | grep darkcoin
user     12929  0.0  0.0  10916  1088 pts/4    S+   09:23   0:00 grep darkcoin
user     21626  0.6  0.3 1849716 130292 ?      SLl  May02   6:49 darkcoind -daemon

Cela soulève la question : où l'historique apparaît-il ? Uniquement dans .bash_history ?

5voto

200_success Points 4681

Malheureusement, si votre commande darkcoind attend le mot de passe en tant qu'argument de ligne de commande, il sera exposé via des utilitaires tels que ps. La seule vraie solution consiste à éduquer les développeurs.

Alors que l'exposition via ps pourrait être inévitable, vous pourriez au moins empêcher le mot de passe d'être écrit dans le fichier d'historique du shell.

$ xargs darkcoind masternode start

password

CtrlD

Le fichier d'historique ne devrait enregistrer que xargs darkcoind masternode start, pas le mot de passe.

2voto

Nick Klein Points 21

Vous pouvez empêcher l'historique de votre shell de conserver le mot de passe en exécutant la commande à partir d'un nouveau processus shell, que vous terminez immédiatement ensuite. Par exemple :

bash$ sh
sh$ darkcoind masternode start 'correct horse battery staple'
sh$ exit
bash$

Assurez-vous que sh est configuré pour ne pas enregistrer son historique dans un fichier.

Bien sûr, cela ne résout pas les autres problèmes, tels que le mot de passe étant visible dans ps. Il existe, je crois, des façons pour le programme darkcoind lui-même de masquer l'information de ps, mais cela ne réduit que la fenêtre de vulnérabilité.

2voto

ptman Points 26336

Comme d'autres l'ont dit, regardez dans votre historique de shell pour masquer les informations de l'historique.

Mais une chose que personne n'a encore suggérée est de monter /proc avec le paramètre hidepid. Essayez de modifier votre ligne /proc dans /etc/fstab pour inclure hidepid, comme ceci:

#                
proc            /proc           proc    defaults,hidepid=2        0       0

2voto

resmon6 Points 491

Pour Bitcoin, la réponse officielle des développeurs consiste à utiliser le wrapper python fourni dans contrib/bitrpc/bitrpc.py (github) :

Il demande un mot de passe de manière sécurisée si vous utilisez la commande walletpassphrase, par exemple. Il n'y a pas de plans pour ajouter une fonctionnalité interactive à bitcoin-cli.

et :

bitcoin-cli restera tel quel et ne gagnera pas en fonctionnalité interactive.

Source : #2318

Déverrouiller le portefeuille :

$ python bitrpc.py walletpassphrase

Changer le mot de passe :

$ python bitrpc.py walletpassphrasechange

https://github.com/bitcoin/bitcoin/tree/master/contrib/bitrpc

Pour darkcoin, cela fonctionne de manière analogue :

https://github.com/darkcoin/darkcoin/tree/master/contrib/bitrpc

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X