gpg2: Advertencia: ¡usando memoria insegura!

12

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 (a finales de 2012) y una MacBook Pro (a finales de 2012), ambas con 10.12.1.

Como dice Preguntas frecuentes de GnuPG , dice:

  

GnuPG intenta bloquear la memoria para que ningún otro proceso pueda verla y para que la memoria no se escriba en el intercambio. 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á usando una memoria insegura.

     

Aunque casi siempre es mejor usar memoria segura, no es necesariamente malo usar memoria insegura. Si es el propietario de la máquina y confía en que no contiene malware, es probable que esta advertencia se pueda ignorar.

Lo que me desconcierta es que gpg2 no ha cambiado desde 12 2016 . He tenido más o menos instalada la versión 2.0.30 desde entonces, pero solo hoy comencé a ver esta advertencia sobre la memoria insegura. A pesar de que la fórmula gpg2 no ha cambiado desde el 12 de septiembre de 2016, lo único que puedo decir con certeza es que lo hice en ambas máquinas antes de que apareciera esta advertencia, que 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 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 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 al hacer que el binario gpg2 tenga invertido el bit raíz de setuid (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 comience a ver esta advertencia hoy? ¿Y por qué lo estaría viendo cuando uso el gpg2 binary pero no el gpg1 binary?

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 debido a 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 raíz del problema. La fórmula para libgcrypt fue recién actualizada hoy para el bump 1.7.4; esto explicaría por qué veo esto en dos computadoras diferentes después de brew update && brew upgrade . También explicaría por qué no está sucediendo con gpg1 , porque gpg1 no se basó en la biblioteca criptográfica libgcrypt externa, en lugar de utilizar su propia biblioteca criptográfica integrada.

Además, también tengo 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 . Lo publicaré en su lista de correo, pero lo dejaré aquí por el momento, en caso de que alguien más se encuentre con el mismo problema y / o en caso de que alguien más sepa por qué sucede exactamente esto. Si recibo una 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.

    
pregunta Adam Liter 11.12.2016 - 00:55

1 respuesta

9

La diferencia entre gpg1 y gpg2 que noté se debe al hecho de que gpg2 usa una biblioteca criptográfica externa, libgcrypt , mientras que gpg1 usa una biblioteca criptográfica integrada.

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

Inicialmente hubo un poco de discusión sobre esto en el solicitud de extracción que introdujo la fórmula para libgcrypt 1.7.4 into Homebrew , sugiriendo que podría ser por diseño:

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

  • libgcrypt 1.7.4 saltos KWallet5: "No se puede obtener una memoria segura" de GCRYCTL_INIT_SECMEM

El error se corrigió en , y la solución se publicó en libgcrypt 1.7.5, que, al momento de escribir, es ahora la versión que Homebrew instala gracias a Dominyk Tiller . Por lo tanto, para solucionar este problema, puedes hacer un 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 puedes hacer si prefieres no siempre ver la advertencia sobre la memoria insegura es agregar no-secmem-warning a ~/.gnupg/gpg.conf . Una versión antigua de las preguntas frecuentes de GnuPG señala:

  

No es necesario bloquear las páginas para evitar que 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 se queden en un disco. Si su sistema permite particiones de intercambio cifradas, haga uso de esa función. Tenga en cuenta que GPG no conoce las particiones de intercambio encriptadas y puede imprimir la advertencia; por lo tanto, debería desactivar la advertencia si su partición de intercambio está encriptada. También es posible que desee desactivar esta advertencia si no puede o no desea instalar GnuPG setuid (root). Para deshabilitar la advertencia debes poner una línea

     

no-secmem-warning

     

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

Por lo que sé, macOS utiliza espacio de intercambio encriptado. Para mí, por ejemplo, sysctl vm.swapusage devuelve:

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

Además, como @sideshowbarker apunta en En los comentarios , también hay un una publicación en la lista de correo de gnupg-users , que dice que es relativamente seguro ignorar esta advertencia:

  

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

    
respondido por el Adam Liter 11.12.2016 - 16:00

Lea otras preguntas en las etiquetas