13 votos

gpg2: Advertencia: ¡usando memoria insegura!

A partir de hoy, cada vez que uso gpg2 (instalado vía Homebrew) en mi Mac (10.12.1), ahora veo la siguiente advertencia:

Warning: using insecure memory!

Por si sirve de algo, estoy viendo este mismo comportamiento en dos máquinas diferentes: un Mac mini (finales de 2012) y un MacBook Pro (finales de 2012), ambos con 10.12.1.

Como el Preguntas frecuentes sobre GnuPG dice:

GnuPG intenta bloquear la memoria para que ningún otro proceso pueda verla y para que la memoria no se escriba en la swap. Si por alguna razón no es capaz de hacer esto (por ejemplo, ciertas plataformas no soportan este tipo de bloqueo de memoria), GnuPG le advertirá que está usando memoria insegura.

Aunque casi siempre es mejor utilizar una memoria segura, no es necesariamente malo utilizar una memoria insegura. Si eres el dueño de la máquina y estás seguro de que no alberga malware, probablemente puedas ignorar esta advertencia.

Lo que me desconcierta es que gpg2 no ha cambiado desde 12 de septiembre de 2016 . He tenido la versión 2.0.30 instalada más o menos desde entonces, pero sólo hoy he empezado a ver esta advertencia sobre la memoria insegura. A pesar de que el gpg2 fórmula no ha cambiado desde el 12 de septiembre de 2016, la única cosa que puedo decir con seguridad que hice en ambas máquinas antes del inicio de ver esta advertencia es un brew update && brew upgrade . Pero ni siquiera estoy seguro de cómo podría afectar esto; dado lo que dice el FAQ de GnuPG, parece que esto tiene algo más que ver con el sistema operativo y el bloqueo de la memoria.

... Y lo que es aún más extraño es que también tengo gpg1 instalado desde Homebrew (versión 1.4.21), que hace no advierten sobre la inseguridad de la memoria 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 el código fuente, pero esto no cambia nada. Todavía recibo la advertencia sobre el uso de memoria insegura.

Además, incluso haciendo que el binario de gpg2 tenga el bit Setuid Root invertido (como se sugiere, Por ejemplo , aquí ) no hace que el mensaje desaparezca; sigue advirtiendo sobre el uso de memoria insegura.

¿Alguien sabe qué ha podido cambiar para que hoy empiece a ver este aviso de repente? Y por qué lo vería al usar 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

Actualización

Creo que la razón por la que esto ocurre es por la nueva versión de libgcrypt . Todavía no sé por qué está ocurriendo, pero estoy bastante seguro de que esta es al menos la causa principal del problema. La fórmula para libgcrypt fue se acaba de actualizar hoy para el bump 1.7.4; esto explicaría por qué estoy viendo esto en dos equipos diferentes después de un brew update && brew upgrade . También explicaría por qué no ocurre con gpg1 porque gpg1 no se basó en el exterior libgcrypt biblioteca criptográfica, sino que utiliza su propia biblioteca criptográfica integrada.

Además, también tengo gpg2 instalado desde MacGPG Suite, que no presenta este problema y está vinculado con 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.

Así que supongo que esto es probablemente un informe de error para los mantenedores de libgcrypt . Lo enviaré a su lista de correo, pero lo dejaré aquí por el momento por si alguien más se encuentra con el mismo problema y/o por si alguien sabe por qué ocurre esto exactamente. Si después de enviar el mensaje a su lista de correo me confirman que se trata de un error, votaré para cerrar esta pregunta.

0 votos

Sinceramente, no estoy seguro de si esta pregunta es más apropiada aquí, en Apple.SE, o si es más apropiada para Unix.SE . He preguntado aquí primero porque el FAQ de GnuPG sugiere que podría ser algo relacionado con el sistema operativo y el bloqueo de la memoria, pero por favor, siéntase libre de sugerir una migración si piensa lo contrario.

0 votos

techrepublic.com/blog/it-security/the-insecure-memory-faq parece sugerir que la causa podría deberse a que su entorno se ha quedado sin memoria RAM y por eso necesita escribir datos en el espacio de intercambio.

0 votos

@sideshowbarker Ese fue mi pensamiento inicial también, pero (i) eso no explicaría las diferencias entre el comportamiento con gpg1 y gpg2 y (ii) he estado monitorizando la memoria de mi ordenador al probar esto, y hay mucha memoria sin usar cuando veo el mensaje de advertencia. Creo que he localizado root del problema, pero todavía no estoy seguro de por qué está sucediendo. Actualizaré la pregunta en un segundo.

11voto

Adam Liter Puntos 314

La diferencia entre gpg1 y gpg2 que estaba notando surge del hecho de que gpg2 utiliza una biblioteca criptográfica externa, libgcrypt mientras que gpg1 utiliza una biblioteca criptográfica integrada.

Y específicamente, Homebrew actualizado a la versión 1.7.4 de libgcrypt el 10 de diciembre que introdujo una regresión en el libgcrypt código, lo que lleva a la advertencia de memoria insegura.

Al principio se discutió un poco sobre esto en el que introdujo la fórmula para libgcrypt 1.7.4 en Homebrew sugiriendo que podría ser por diseño:

Sin embargo, resulta que sí se trataba de un error. El informe de error específico se presentó aquí:

El error se ha corregido en este compromiso y la solución se publicó en libgcrypt 1.7.5, que, en el momento de escribir este artículo, es ahora la versión que instala Homebrew gracias a Dominyk Tiller . Así, para solucionar este problema, basta con hacer un brew update && brew upgrade .


Para la posteridad, aquí hay algo de información de una versión antigua de esta respuesta antes de que se confirmara que se trataba de un error en libgcrypt :

Una cosa que puedes hacer si prefieres no ver siempre la advertencia sobre la memoria insegura es añadir no-secmem-warning a ~/.gnupg/gpg.conf . Un versión antigua del FAQ de GnuPG señala:

No es necesario bloquear las páginas para que no sean intercambiadas si su sistema utiliza una partición de intercambio cifrada. De hecho, esa es la mejor manera de proteger los datos sensibles para que no acaben en un disco. Si tu sistema permite particiones de intercambio encriptadas, haz uso de esa característica. Tenga en cuenta que GPG no conoce las particiones de intercambio cifradas y podría imprimir la advertencia; por lo tanto, debería desactivar la advertencia si su partición de intercambio está cifrada. También puede querer desactivar esta advertencia si no puede o no quiere instalar GnuPG setuid(Root). Para deshabilitar la advertencia se pone una línea

no-secmem-warning

en su ~/.gnupg/gpg.conf archivo.

Por lo que sé, MacOS sí utiliza el espacio de intercambio cifrado. Para mí, por ejemplo, sysctl vm.swapusage devoluciones:

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

Además, como @sideshowbarker señala en los comentarios También hay un mensaje en la lista de correo de usuarios de gnupg que dice que es relativamente seguro ignorar esta advertencia:

[...] es <understatement> bastante difícil </understatement> para explotar memoria insegura sin privilegios Root -- y si su atacante tiene privilegios Root en su máquina, entonces todo ha terminado de todos modos.

0 votos

A la luz de github.com/Homebrew/homebrew-core/pull/ y el hecho de que el libgcrypt los mantenedores parecen haber roto esto intencionalmente, podría valer la pena añadir aquí que el mensaje puede ser suprimido añadiendo la línea no-secmem-warning a la ~/.gnupg/gpg.conf archivo. Como lists.gnupg.org/pipermail/gnupg-users/2015-December/054771.html señala que "es bastante difícil explotar una memoria insegura sin privilegios de root, y si el atacante tiene privilegios de root en su máquina, todo habrá terminado de todos modos". Así que la advertencia no es muy útil para empezar.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X