À partir d'aujourd'hui, chaque fois que j'utilise gpg2
(installé via Homebrew) sur mon Mac (10.12.1), je vois maintenant l'avertissement suivant:
Warning: using insecure memory!
Pour ce que ça vaut, je vois ce même comportement sur deux machines différentes: un Mac mini (fin 2012) et un MacBook Pro (fin 2012), tous deux exécutant 10.12.1.
Comme le dit la FAQ GnuPG :
GnuPG essaie de verrouiller la mémoire pour qu'aucun autre processus ne puisse la voir et pour que la mémoire ne soit pas écrite pour permuter. Si pour une raison quelconque, il n'est pas en mesure de le faire (par exemple, certaines plates-formes ne prennent pas en charge ce type de verrouillage de la mémoire), GnuPG vous avertira qu'il utilise une mémoire non sécurisée.
Bien qu'il soit presque toujours préférable d'utiliser une mémoire sécurisée, ce n'est pas nécessairement une mauvaise chose d'utiliser une mémoire non sécurisée. Si vous possédez la machine et que vous êtes sûr qu'elle ne contient pas de logiciels malveillants, cet avertissement peut probablement être ignoré.
Ce qui me déconcerte, c'est que cela gpg2
n'a pas changé depuis le 12 septembre 2016 . J'ai installé la version 2.0.30 plus ou moins depuis, mais je n'ai commencé à voir cet avertissement concernant la mémoire non sécurisée qu'aujourd'hui. Même si la gpg2
formule n'a pas changé depuis le 12 septembre 2016, la seule chose que je peux dire avec certitude que j'ai fait sur les deux machines avant le début de voir cet avertissement est un brew update && brew upgrade
. Mais je ne sais même pas comment cela pourrait affecter cela; étant donné ce que dit la FAQ GnuPG, il semble que cela ait quelque chose à voir avec le système d'exploitation et le verrouillage de la mémoire.
... Et ce qui est encore plus étrange, c'est que j'ai également gpg1
installé à partir de Homebrew (version 1.4.21), qui ne prévient pas de la mémoire non sécurisée lorsque je l'utilise:
$ gpg1 --require-secmem
gpg: Go ahead and type your message ...
^C
gpg: Interrupt caught ... exiting
$ gpg2 --require-secmem
Warning: using insecure memory!
gpg: will not run with insecure memory due to --require-secmem
Les deux fichiers binaires appartiennent au même propriétaire et au même groupe et ont les mêmes autorisations:
-r-xr-xr-x 1 adamliter admin 681932 Dec 10 18:06 /usr/local/Cellar/gnupg2/2.0.30_2/bin/gpg2
-r-xr-xr-x 1 adamliter admin 929352 Aug 17 09:21 /usr/local/Cellar/gnupg/1.4.21/bin/gpg1
J'ai juste essayé de réinstaller gpg2
avec Homebrew: à la fois en utilisant le binaire précompilé et en créant une source de formulaire, mais cela ne change rien. Je reçois toujours l'avertissement concernant l'utilisation d'une mémoire non sécurisée.
De plus, même en faisant l'gpg2 binaire ont le bit suid root basculée (comme l'a suggéré, par exemple , ici ) ne provoque pas le message à disparaître; il met toujours en garde contre l'utilisation d'une mémoire non sécurisée.
Est-ce que quelqu'un sait ce qui aurait pu changer de telle sorte que je commencerais soudain à voir cet avertissement aujourd'hui? Et pourquoi le verrais-je en utilisant le gpg2
binaire mais pas le gpg1
binaire?
Autres informations éventuellement pertinentes:
$ which gpg1
/usr/local/bin/gpg1
$ ls -al /usr/local/bin/gpg1
lrwxr-xr-x 1 adamliter admin 31 Aug 17 17:42 /usr/local/bin/gpg1 -> ../Cellar/gnupg/1.4.21/bin/gpg1
$ which gpg2
/usr/local/bin/gpg2
$ ls -al /usr/local/bin/gpg2
lrwxr-xr-x 1 adamliter admin 34 Dec 10 18:06 /usr/local/bin/gpg2 -> ../Cellar/gnupg2/2.0.30_2/bin/gpg2
Mise à jour
Je pense que la raison pour laquelle cela se produit est à cause de la nouvelle version de libgcrypt
. Je ne sais toujours pas pourquoi cela se produit, mais je suis presque sûr que c'est au moins la cause profonde du problème. La formule libgcrypt
a été juste mis à jour aujourd'hui pour la bosse 1.7.4; cela expliquerait pourquoi je vois cela sur deux ordinateurs différents après a brew update && brew upgrade
. Cela expliquerait également pourquoi cela ne se produit pas gpg1
, car gpg1
ne s'appuyait pas sur la libgcrypt
bibliothèque cryptographique externe , utilisant plutôt sa propre bibliothèque cryptographique intégrée.
De plus, j'ai également gpg2
installé à partir de MacGPG Suite, qui ne présente pas ce problème et est lié à une version différente de libgcrypt
:
$ /usr/local/MacGPG2/bin/gpg2 --version
gpg (GnuPG/MacGPG2) 2.0.30
libgcrypt 1.6.6
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ gpg2 --version
gpg (GnuPG) 2.0.30
libgcrypt 1.7.4
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Je suppose donc qu'il s'agit probablement d'un rapport de bogue pour les responsables de libgcrypt
. Je posterai sur leur liste de diffusion, mais je laisserai ceci ici pour le moment au cas où quelqu'un d'autre rencontrerait le même problème et / ou si quelqu'un d'autre sait exactement pourquoi cela se produit. Si je reçois la confirmation après avoir envoyé un mot à leur liste de diffusion qu'il s'agit d'un bug, je voterai pour fermer cette question.
la source
gpg1
etgpg2
, et (ii) j'ai surveillé la mémoire sur mon ordinateur lors du test, et il y a beaucoup de mémoire inutilisée quand je vois le message d'avertissement. Je pense avoir localisé la racine du problème, mais je ne sais toujours pas pourquoi cela se produit. Mettra à jour la question dans une seconde.Réponses:
La différence entre
gpg1
etgpg2
que je remarquais vient du fait qu'ilgpg2
utilise une bibliothèque cryptographique externelibgcrypt
, alors qu'ilgpg1
utilise une bibliothèque cryptographique intégrée.Et spécifiquement, Homebrew a été mis à jour vers la version 1.7.4 du
libgcrypt
10 décembre , ce qui a introduit une régression dans lelibgcrypt
code, conduisant à l'avertissement de mémoire non sécurisée.Il y avait initialement un peu de discussion à ce sujet sur la demande de pull qui a introduit la formule pour
libgcrypt
1.7.4 dans Homebrew , suggérant que cela pourrait être par conception:@ilovezfs
a également trouvé quelque chose pour suggérer que ce n'était peut-être pas un bug non plus .Néanmoins, il s'avère que c'était effectivement un bug. Le rapport de bogue spécifique a été déposé ici:
libgcrypt
1.7.4 casse KWallet5: "Impossible d'obtenir la mémoire sécurisée" de GCRYCTL_INIT_SECMEMLe bug a été corrigé dans ce commit , et le correctif a été publié en
libgcrypt
1.7.5, qui, au moment de la rédaction, est maintenant la version que Homebrew installe grâce à Dominyk Tiller . Ainsi, pour résoudre ce problème, vous pouvez simplement faire unbrew update && brew upgrade
.Pour la postérité, voici quelques informations d'une ancienne version de cette réponse avant qu'il ne soit confirmé qu'il s'agissait d'un bug dans
libgcrypt
:Une chose que vous pouvez faire si vous verriez plutôt pas toujours l'avertissement sur la mémoire non sécurisé est d'ajouter
no-secmem-warning
à~/.gnupg/gpg.conf
. Une ancienne version de la FAQ GnuPG souligne:Pour autant que je sache, macOS utilise un espace d'échange crypté. Pour moi, par exemple,
sysctl vm.swapusage
renvoie:En outre, comme le
@sideshowbarker
souligne les commentaires , il existe également un message sur la liste de diffusion gnupg-users , qui indique qu'il est relativement sûr d'ignorer cet avertissement:la source
libgcrypt
responsables semblent avoir rompu cela intentionnellement, il pourrait être utile d'ajouter ici que le message peut être supprimé en ajoutant la ligneno-secmem-warning
au~/.gnupg/gpg.conf
fichier. Comme le note lists.gnupg.org/pipermail/gnupg-users/2015-December/054771.html , «il est assez difficile d'exploiter la mémoire non sécurisée sans privilèges root - et si votre attaquant a des privilèges root sur votre machine, alors tout est fini de toute façon ". L'avertissement n'est donc pas très utile pour commencer.