J'exécute un démon logiciel qui requiert certaines actions pour entrer une phrase secrète afin de déverrouiller certaines fonctionnalités qui ressemblent par exemple à ceci:
$ darkcoind masternode start <mypassphrase>
Maintenant, j'ai des problèmes de sécurité sur mon serveur Debian sans tête.
Chaque fois que je cherche dans mon historique de bash, par exemple, Ctrl+R
je peux voir ce mot de passe super fort. Maintenant, j'imagine que mon serveur est compromis et qu'un intrus a un accès au shell et peut simplement Ctrl+R
trouver ma phrase secrète dans l'historique.
Existe-t-il un moyen de saisir la phrase secrète sans que celle-ci ne soit affichée dans l'historique bash ps
, /proc
ou ailleurs?
Mise à jour 1 : Ne transmettre aucun 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 suspendre les développeurs. Je sais que ce n’est pas un exemple de bonne pratique, mais ce logiciel est basé sur bitcoin et tous les clients basés sur bitcoin sont une sorte de serveur JSON RPC qui écoute ces commandes et dont le problème de sécurité est toujours en cours de discussion ( a , b , c ). .
Mise à jour 3 : le démon est déjà démarré et s'exécute avec la commande
$ darkcoind -daemon
Faire ps
ne montre que la commande de démarrage.
$ 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
Donc, passer les commandes avec la phrase secrète n'apparaît pas ps
ou pas /proc
du tout.
$ darkcoind masternode start <mypassphrase>
$ 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 laisse la question où l'histoire se présente? Seulement dedans .bash_history
?
la source
Réponses:
Vraiment, cela devrait être corrigé dans l'application elle-même. Et ces applications doivent être open source, de sorte que la résolution du problème dans l'application elle-même devrait être une option. Une application liée à la sécurité qui commet ce type d’erreur pourrait en commettre d’autres, aussi je ne lui ferais pas confiance.
Interposeur simple
Mais vous demandiez une autre façon, alors en voici une:
Compiler ceci avec
puis lancez votre processus avec
La bibliothèque interposeur exécutera ce code avant que la
main
fonction de votre application soit exécutée. Il remplacera le dernier argument de la ligne de commande par le mot de passe actuel lors de l'appel à main. La ligne de commande telle qu'elle est imprimée dans/proc/*/cmdline
(et donc vue par des outils tels queps
) contiendra toujours le faux argument, cependant. Il est évident que vous devez rendre le code source et la bibliothèque que vous compilez lisibles par vous-même, afin de mieux fonctionner dans unchmod 0700
répertoire. Et comme le mot de passe ne fait pas partie de l'invocation de commande, votre historique bash est également sécurisé.Interposeur plus avancé
Si vous voulez faire quelque chose de plus élaboré, gardez à l'esprit que celui-ci
__libc_start_main
est exécuté avant que la bibliothèque d'exécution ait été correctement initialisée. Je suggère donc d'éviter tout appel de fonction à moins qu'il ne soit absolument essentiel. Si vous voulez pouvoir appeler des fonctions comme bon vous semble, assurez-vous de le faire juste avant d'être appelémain
, une fois que toutes les initialisations sont terminées. Pour l'exemple suivant, je dois remercier Grubermensch qui a expliqué comment masquer un mot de passe passé en argument de ligne de commande, ce qui a attirégetpass
mon attention.Cela demande le mot de passe, vous n'avez donc plus besoin de garder la bibliothèque d'interposition secrète. L'argument fictif est réutilisé comme invite de mot de passe, invoquez-le ainsi
Une autre alternative consisterait à lire le mot de passe à partir d’un descripteur de fichier (comme par exemple le
gpg --passphrase-fd
fait), ou à partir dex11-ssh-askpass
, ou peu importe.la source
strings
vulnérabilité. Voir SO: Masquer la saisie du mot de passe sur le terminal .__libc_start_main
.Ce n'est pas juste l'histoire. Il va également apparaître dans la sortie ps .
Quiconque a écrit ce logiciel doit être suspendu, dessiné et coupé en quatre. Il est absolument NON de devoir fournir un mot de passe sur la ligne de commande, quel que soit le logiciel utilisé.
Pour un processus démon, c'est encore PLUS impardonnable ...
En dehors de rm -f sur le logiciel lui-même, je ne connais aucune solution à cela. Honnêtement: Trouvez un autre logiciel pour faire le travail. Ne pas utiliser une telle ordure.
la source
rm -f
maintenant.ps
. Donc, jusqu'à ce que le développeur puisse résoudre ce problème, il suggère d'utiliser autre chose.ps
, par exemple , ce n'est donc pas mieux que larm
solution.Cela effacera la
ps
sortie.Soyez très conscient : Cela pourrait casser l'application. Vous êtes dûment prévenu qu'il s'agisse de dragons.
Vous êtes maintenant dûment informé de ces avertissements. Cela effacera la sortie affichée dans
ps
. Votre historique ne sera pas effacé, pas plus que l'historique du travail bash (tel que l'exécution du processusmyprocess myargs &
). Maisps
ne montrera plus les arguments.Invoquez le programme en le sauvegardant,
chmod +x
il. Faire ensuite./whatever <pidoftarget>
si cela fonctionne, il ne produira pas de sortie. Si cela échoue, il se plaindra de quelque chose et cessera de fumer.la source
gdb
on peut modifier la mémoire des processus en cours (avec une précision chirurgicale bien supérieure à celle que je pourrais ajouter).Pouvez-vous passer l'argument d'un fichier, accessible uniquement par root ou par l'utilisateur requis?
C'est un énorme non-non pour taper les mots de passe dans la console, mais dernier recours ... commencez votre ligne par un espace afin qu'il n'apparaisse pas dans l'historique.
la source
export HISTCONTROL=ignoreboth
ignore les doublons et les lignes avec un espace principal pour l'entrée dans l'historique. Ajoutez-le à votre .bashrc ou .bash_profile.Peut-être que cela fonctionne (?):
la source
darkcoind masternode start `head -1`
, si vous voulez entrer le mot de passe manuellement.ps
des utilitaires similaires..bash_history
à un mot de passe en texte clairpassword.txt
vous rapporte quoi exactement?Malheureusement, si votre
darkcoind
commande attend le mot de passe en tant qu'argument de ligne de commande, il sera exposé via des utilitaires tels queps
. La seule vraie solution consiste à éduquer les développeurs .Bien que l'
ps
exposition puisse être inévitable, vous pouvez au moins empêcher le mot de passe d'être écrit dans le fichier historique du shell.Le fichier d'historique doit uniquement enregistrer
xargs darkcoind masternode start
, pas le mot de passe.la source
ignorespace
dans$HISTCONTROL
, puis vous pouvez empêcher toute commande d'entrer dans l'historique du shell en préfixant la commande par un espace.Comme d'autres l'ont déjà dit, examinez le contrôle de l'historique de votre shell pour masquer les informations de l'historique.
Mais une chose que personne ne semble avoir encore suggérée est de monter
/proc
avec lehidepid
paramètre. Essayez de modifier votre/proc
ligne/etc/fstab
pour inclurehidepid
, comme ceci:la source
Vous pouvez conserver le mot de passe en dehors de l'historique de votre shell en exécutant la commande à partir d'un nouveau processus shell, que vous terminez immédiatement. Par exemple:
Assurez-vous qu'il
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
. Je crois que ledarkcoind
programme lui-même dispose de moyens pour cacher les informationsps
, mais cela ne fait que réduire la fenêtre de vulnérabilité.la source
ps
des utilitaires similaires.Pour Bitcoin, la réponse officielle du développeur consiste à utiliser le wrapper Python fourni dans
contrib/bitrpc/bitrpc.py
( github ):et:
Source: n ° 2318
Déverrouiller le portefeuille:
Changer le mot de passe:
https://github.com/bitcoin/bitcoin/tree/master/contrib/bitrpc
Pour darkcoin cela fonctionne anlogue:
https://github.com/darkcoin/darkcoin/tree/master/contrib/bitrpc
la source