gpg2: Advertencia: ¡usando memoria insegura!

11

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 gpg2no 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 gpg2fó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 gpg1instalado 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 gpg2con 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 gpg2binario pero no el gpg1binario?

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 libgcryptse 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 gpg1no se basó en la libgcryptbiblioteca criptográfica externa , sino que usó su propia biblioteca criptográfica integrada.

Además, también he gpg2instalado 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.

Adam Liter
fuente
Estoy sinceramente no estoy seguro si esta pregunta es más apropiado en este caso, en Apple.SE, o si es más apropiado para Unix.SE . Pregunté aquí primero porque las preguntas frecuentes de GnuPG sugieren que podría tratarse del bloqueo del sistema operativo y de la memoria, pero no dude en sugerir una migración si piensa lo contrario.
Adam Liter
techrepublic.com/blog/it-security/the-insecure-memory-faq parece sugerir que la causa podría deberse a que su entorno tiene poca RAM y necesita escribir datos para intercambiar espacio.
sidehowbarker
@sideshowbarker Ese fue mi pensamiento inicial también, pero (i) eso no explicaría las diferencias entre el comportamiento con gpg1y gpg2, 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.
Adam Liter
@sideshowbarker ¡Actualizada!
Adam Liter

Respuestas:

9

La diferencia entre gpg1y gpg2que noté surge del hecho de que gpg2usa una biblioteca criptográfica externa libgcrypt, mientras que gpg1usa una biblioteca criptográfica integrada.

Y específicamente, Homebrew actualizó a la versión 1.7.4 del libgcrypt10 de diciembre , que introdujo una regresión en el libgcryptcó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 libgcrypt1.7.4 en Homebrew , lo que sugiere que podría ser por diseño:

Sin embargo, resulta que esto fue realmente un error. El informe de error específico se archivó aquí:

El error se corrigió en esta confirmación , y la corrección se lanzó en libgcrypt1.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 una brew 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-warninga ~/.gnupg/gpg.conf. Una versión anterior de las preguntas frecuentes de GnuPG señala:

No es necesario bloquear las páginas para que no se intercambien si su sistema utiliza una partición de intercambio cifrada. De hecho, esa es la mejor manera de proteger los datos confidenciales para que no terminen en un disco. Si su sistema permite particiones de intercambio encriptadas, utilice esa función. Tenga en cuenta que GPG no conoce las particiones de intercambio encriptadas y puede imprimir la advertencia; por lo tanto, debe deshabilitar la advertencia si su partición de intercambio está encriptada. También puede deshabilitar esta advertencia si no puede o no desea instalar GnuPG setuid (root). Para deshabilitar la advertencia pones una línea

no-secmem-warning

en tu ~/.gnupg/gpg.confarchivo.

Hasta donde yo sé, macOS usa espacio de intercambio encriptado. Para mí, por ejemplo, sysctl vm.swapusagedevuelve:

vm.swapusage: total = 1024.00M  used = 234.75M  free = 789.25M  (encrypted)

Además, como se @sideshowbarkerseñ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:

[...] es <understatement>bastante difícil </understatement>explotar la memoria insegura sin privilegios de root, y si su atacante tiene privilegios de root en su máquina, entonces todo termina.

Adam Liter
fuente
A la luz de github.com/Homebrew/homebrew-core/pull/… y el hecho de que los libgcryptmantenedores parecen haber roto esto intencionalmente, podría valer la pena agregar aquí que el mensaje puede suprimirse agregando la línea no-secmem-warningal ~/.gnupg/gpg.confarchivo. 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.
sidehowbarker