A partir de hoy, cada vez que uso gpg2
(instalado a través de Homebrew) en mi Mac (10.12.1), ahora veo la siguiente advertencia:
Warning: using insecure memory!
Por lo que vale, veo este mismo comportamiento en dos máquinas diferentes: una Mac mini (finales de 2012) y una MacBook Pro (finales de 2012), ambas con 10.12.1.
Como dice el FAQ de GnuPG :
GnuPG intenta bloquear la memoria para que ningún otro proceso pueda verla y para que la memoria no se escriba para intercambiar. Si por alguna razón no puede hacer esto (por ejemplo, ciertas plataformas no admiten este tipo de bloqueo de memoria), GnuPG le advertirá que está utilizando memoria insegura.
Si bien casi siempre es mejor usar memoria segura, no es necesariamente algo malo usar memoria insegura. Si es dueño de la máquina y está seguro de que no está albergando malware, entonces esta advertencia probablemente puede ignorarse.
Lo que me desconcierta es que gpg2
no ha cambiado desde el 12 de septiembre de 2016 . He tenido la versión 2.0.30 instalada más o menos desde entonces, pero hoy solo comencé a ver esta advertencia sobre la memoria insegura. Aunque la gpg2
fórmula no ha cambiado desde el 12 de septiembre de 2016, lo único que puedo decir con certeza que hice en ambas máquinas antes del inicio de ver esta advertencia es a brew update && brew upgrade
. Pero ni siquiera estoy seguro de cómo eso podría afectar esto; dado lo que dice la pregunta frecuente de GnuPG, parece que esto tiene algo más que ver con el sistema operativo y el bloqueo de memoria.
... Y lo que es aún más extraño es que también he gpg1
instalado desde Homebrew (versión 1.4.21), que no advierte sobre la memoria insegura cuando la uso:
$ 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
Ambos binarios pertenecen al mismo propietario y grupo y tienen los mismos permisos:
-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
Acabo de intentar reinstalar gpg2
con Homebrew: tanto usando el binario precompilado como construyendo la fuente del formulario, pero esto no cambia nada. Todavía recibo la advertencia sobre el uso de memoria insegura.
Además, incluso hacer que el binario gpg2 tenga el bit raíz setuid invertido (como se sugiere, por ejemplo , aquí ) no hace que el mensaje desaparezca; todavía advierte sobre el uso de memoria insegura.
¿Alguien sabe qué podría haber cambiado de tal manera que de repente comenzara a ver esta advertencia hoy? ¿Y por qué debería verlo cuando uso el gpg2
binario pero no el gpg1
binario?
Otra información posiblemente relevante:
$ 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
Actualizar
Creo que la razón por la que esto sucede es por la nueva versión de libgcrypt
. Todavía no sé por qué está sucediendo, pero estoy bastante seguro de que esta es al menos la causa principal del problema. La fórmula para libgcrypt
se acaba de actualizar hoy para el golpe 1.7.4; Esto explicaría por qué estoy viendo esto en dos computadoras diferentes después de a brew update && brew upgrade
. También explicaría por qué no está sucediendo gpg1
, porque gpg1
no se basó en la libgcrypt
biblioteca criptográfica externa , sino que usó su propia biblioteca criptográfica integrada.
Además, también he gpg2
instalado desde MacGPG Suite, que no presenta este problema y está vinculado a una versión diferente 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.
Por lo tanto, supongo que este es probablemente un informe de error para los mantenedores de libgcrypt
. Publicaré en su lista de correo, pero dejaré esto aquí por el momento en caso de que alguien más se encuentre con el mismo problema y / o si alguien más sabe por qué exactamente esto está sucediendo. Si recibo la confirmación después de enviar un mensaje a su lista de correo de que se trata de un error, votaré para cerrar esta pregunta.
fuente
gpg1
ygpg2
, y (ii) he estado monitoreando la memoria en mi computadora cuando probé esto, y hay mucha memoria sin usar cuando veo el mensaje de advertencia. Creo que he localizado la raíz del problema, pero todavía no estoy seguro de por qué está sucediendo. Actualizará la pregunta en un segundo.Respuestas:
La diferencia entre
gpg1
ygpg2
que noté surge del hecho de quegpg2
usa una biblioteca criptográfica externalibgcrypt
, mientras quegpg1
usa una biblioteca criptográfica integrada.Y específicamente, Homebrew actualizó a la versión 1.7.4 del
libgcrypt
10 de diciembre , que introdujo una regresión en ellibgcrypt
código, lo que provocó la advertencia de memoria insegura.Inicialmente hubo un poco de discusión sobre esto en la solicitud de extracción que introdujo la fórmula para
libgcrypt
1.7.4 en Homebrew , lo que sugiere que podría ser por diseño:@ilovezfs
También encontré algo que sugiere que podría no ser un error tampoco .Sin embargo, resulta que esto fue realmente un error. El informe de error específico se archivó aquí:
libgcrypt
1.7.4 interrumpe KWallet5: "No se puede obtener memoria segura" de GCRYCTL_INIT_SECMEMEl error se corrigió en esta confirmación , y la corrección se lanzó en
libgcrypt
1.7.5, que, en el momento de escribir esto, ahora es la versión que Homebrew instala gracias a Dominyk Tiller . Por lo tanto, para solucionar este problema, solo puede hacer unabrew update && brew upgrade
.Por el bien de la posteridad, aquí hay información de una versión anterior de esta respuesta antes de que se confirmara que se trataba de un error en
libgcrypt
:Una cosa que puede hacer si prefieres no siempre vea la advertencia acerca de la memoria insegura es agregar
no-secmem-warning
a~/.gnupg/gpg.conf
. Una versión anterior de las preguntas frecuentes de GnuPG señala:Hasta donde yo sé, macOS usa espacio de intercambio encriptado. Para mí, por ejemplo,
sysctl vm.swapusage
devuelve:Además, como se
@sideshowbarker
señala en los comentarios , también hay una publicación en la lista de correo gnupg-users , que dice que es relativamente seguro ignorar esta advertencia:fuente
libgcrypt
mantenedores parecen haber roto esto intencionalmente, podría valer la pena agregar aquí que el mensaje puede suprimirse agregando la líneano-secmem-warning
al~/.gnupg/gpg.conf
archivo. Como notes.gnupg.org/pipermail/gnupg-users/2015-December/054771.html señala, "es bastante difícil explotar la memoria insegura sin privilegios de root, y si su atacante tiene privilegios de root en su máquina, entonces todo termina de todos modos ". Entonces, la advertencia no es muy útil para empezar.