Hoje, sempre que eu uso gpg2
(instalado via Homebrew) no meu Mac (10.12.1), agora vejo o seguinte aviso:
Warning: using insecure memory!
Pelo que vale, estou vendo esse mesmo comportamento em duas máquinas diferentes: um Mac mini (final de 2012) e um MacBook Pro (final de 2012), ambos executando a versão 10.12.1.
O GnuPG tenta bloquear a memória para que nenhum outro processo possa vê-la e para que a memória não seja gravada para troca. Se, por algum motivo, não for capaz de fazer isso (por exemplo, certas plataformas não suportam esse tipo de bloqueio de memória), o GnuPG avisará que ele está usando memória não segura.
Embora quase sempre seja melhor usar memória segura, não é necessariamente uma coisa ruim usar memória insegura. Se você possui a máquina e está confiante de que não está abrigando malware, esse aviso provavelmente poderá ser ignorado.
O que me deixa perplexo é que gpg2
não mudou desde 12 de setembro de 2016 . Eu tive a versão 2.0.30 instalada mais ou menos desde então, mas só comecei a ver esse aviso sobre memória insegura hoje. Mesmo que a gpg2
fórmula não tenha sido alterada desde 12 de setembro de 2016, a única coisa que posso dizer com certeza que fiz nas duas máquinas antes do início da visualização desse aviso é a brew update && brew upgrade
. Mas nem tenho certeza de como isso poderia afetar isso; dado o que o FAQ do GnuPG diz, parece que isso tem mais a ver com o sistema operacional e o bloqueio de memória.
... E o mais estranho é que eu também gpg1
instalei a partir do Homebrew (versão 1.4.21), que não avisa sobre memória insegura quando a 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
Os dois binários pertencem ao mesmo proprietário e grupo e têm as mesmas permissões:
-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
Eu apenas tentei reinstalar gpg2
com o Homebrew: usando o binário pré-compilado e criando a fonte do formulário, mas isso não muda nada. Ainda recebo o aviso sobre o uso de memória não segura.
Além disso, mesmo tornar o gpg2 binário com o bit raiz setuid invertido (como sugerido, por exemplo , aqui ) não faz com que a mensagem desapareça; ele ainda adverte sobre o uso de memória não segura.
Alguém sabe o que poderia ter mudado de tal forma que de repente eu começaria a ver esse aviso hoje? E por que eu estaria vendo isso ao usar o gpg2
binário, mas não o gpg1
binário?
Outras informações possivelmente relevantes:
$ 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
Atualizar
Eu acho que a razão pela qual isso está acontecendo é por causa da nova versão do libgcrypt
. Ainda não sei por que está acontecendo, mas tenho certeza de que essa é pelo menos a causa raiz do problema. A fórmula para libgcrypt
foi atualizada hoje hoje para o bump 1.7.4; isso explicaria por que estou vendo isso em dois computadores diferentes depois de um brew update && brew upgrade
. Também explicaria por que não está acontecendo gpg1
, porque gpg1
não confiava na libgcrypt
biblioteca criptográfica externa , em vez disso, usando sua própria biblioteca criptográfica integrada.
Além disso, eu também gpg2
instalei a partir do MacGPG Suite, que não apresenta esse problema e está vinculado a uma versão 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.
Portanto, acho que esse é provavelmente um relatório de bug para os mantenedores do libgcrypt
. Vou postar na lista de discussão deles, mas deixarei isso aqui por enquanto, caso alguém encontre o mesmo problema e / ou se alguém souber por que exatamente isso está acontecendo. Se eu receber uma confirmação após enviar uma mensagem para a lista de discussão de que isso é um bug, votarei para encerrar esta pergunta.
fonte
gpg1
egpg2
, e (ii) eu tenho monitorado a memória no meu computador ao testar isso, e há muita memória não utilizada quando vejo a mensagem de aviso. Acho que localizei a raiz do problema, mas ainda não sei por que isso está acontecendo. Atualizará a pergunta em um segundo.Respostas:
A diferença entre
gpg1
egpg2
que eu estava percebendo decorre do fato de quegpg2
usa uma biblioteca criptográfica externalibgcrypt
, enquanto quegpg1
usa uma biblioteca criptográfica integrada.E, especificamente, o Homebrew foi atualizado para a versão 1.7.4 do
libgcrypt
em 10 de dezembro , que introduziu uma regressão nolibgcrypt
código, levando ao aviso inseguro de memória.Inicialmente, houve um pouco de discussão sobre isso na solicitação pull que introduziu a fórmula para
libgcrypt
1.7.4 no Homebrew , sugerindo que pode ser por design:@ilovezfs
também encontrou algo para sugerir que também pode não ser um bug .No entanto, verifica-se que isso foi realmente um bug. O relatório de erro específico foi arquivado aqui:
libgcrypt
1.7.4 quebra o KWallet5: "Não é possível obter memória segura" de GCRYCTL_INIT_SECMEMO bug foi corrigido neste commit e a correção foi lançada na
libgcrypt
1.7.5, que, no momento da redação deste artigo, agora é a versão que o Homebrew instala graças ao Dominyk Tiller . Assim, para corrigir esse problema, você pode simplesmente fazer abrew update && brew upgrade
.Para o bem da posteridade, aqui estão algumas informações de uma versão antiga desta resposta antes de confirmar que isso era um bug
libgcrypt
:Uma coisa que você pode fazer se preferir nem sempre ver o aviso sobre memória insegura é adicionar
no-secmem-warning
a~/.gnupg/gpg.conf
. Uma versão antiga do FAQ do GnuPG aponta:Até onde eu sei, o macOS usa espaço de troca criptografado. Para mim, por exemplo,
sysctl vm.swapusage
retorna:Além disso, como
@sideshowbarker
apontado nos comentários , também há uma postagem na lista de discussão gnupg-users , que diz que é relativamente seguro ignorar este aviso:fonte
libgcrypt
mantenedores terem quebrado isso intencionalmente, vale a pena acrescentar aqui que a mensagem pode ser suprimida adicionando a linhano-secmem-warning
ao~/.gnupg/gpg.conf
arquivo. Como observa lists.gnupg.org/pipermail/gnupg-users/2015-December/054771.html , “é muito difícil explorar a memória insegura sem privilégios de root - e se o invasor tiver privilégios de root na sua máquina, estará tudo acabado de qualquer maneira. ”. Portanto, o aviso não é muito útil para começar.