gpg2: Attenzione: utilizzo di memoria non sicura!


11

Ad oggi, ogni volta che utilizzo gpg2(installato tramite Homebrew) sul mio Mac (10.12.1), ora vedo il seguente avviso:

Warning: using insecure memory!

Per quello che vale, vedo lo stesso comportamento su due macchine diverse: un Mac mini (fine 2012) e un MacBook Pro (fine 2012), entrambi in esecuzione 10.12.1.

Come dice la FAQ di GnuPG :

GnuPG tenta di bloccare la memoria in modo che nessun altro processo possa vederla e che la memoria non venga scritta per scambiare. Se per qualche motivo non è in grado di farlo (ad esempio, alcune piattaforme non supportano questo tipo di blocco della memoria), GnuPG ti avvertirà che sta usando una memoria non sicura.

Mentre è quasi sempre meglio usare la memoria sicura, non è necessariamente una brutta cosa usare la memoria non sicura. Se possiedi la macchina e sei sicuro che non stia nascondendo malware, probabilmente questo avviso può essere ignorato.

La cosa che mi sconcerta è che gpg2non è cambiato dal 12 settembre 2016 . Da allora ho installato la versione 2.0.30 più o meno, ma oggi ho iniziato a vedere questo avviso sulla memoria non sicura. Anche se la gpg2formula non è cambiata dal 12 settembre 2016, l'unica cosa che posso dire con certezza che ho fatto su entrambe le macchine prima dell'inizio della visualizzazione di questo avviso è a brew update && brew upgrade. Ma non sono nemmeno sicuro di come ciò possa influire su questo; dato ciò che dice la FAQ di GnuPG, sembra che questo abbia qualcosa a che fare con il sistema operativo e il blocco della memoria.

... E ciò che è ancora più strano è che ho anche gpg1installato da Homebrew (versione 1.4.21), che non avvisa della memoria non sicura quando 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

Entrambi i binari appartengono allo stesso proprietario e gruppo e hanno le stesse autorizzazioni:

-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

Ho appena provato a reinstallare gpg2con Homebrew: sia usando il binario precompilato sia costruendo il modulo sorgente, ma questo non cambia nulla. Ricevo ancora l'avvertimento sull'uso della memoria non sicura.

Inoltre, anche facendo il binario gpg2 viene capovolto il bit di root setuid (come suggerito, ad esempio , qui ) non fa scomparire il messaggio; avverte ancora dell'uso di memoria non sicura.

Qualcuno sa cosa potrebbe essere cambiato in modo tale che improvvisamente inizierei a vedere questo avviso oggi? E perché dovrei vederlo quando uso il gpg2binario ma non il gpg1binario?

Altre informazioni eventualmente pertinenti:

$ 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

Aggiornare

Penso che il motivo per cui ciò sta accadendo sia dovuto alla nuova versione di libgcrypt. Non so ancora perché stia succedendo, ma sono abbastanza sicuro che questa sia almeno la causa principale del problema. La formula per è libgcryptstata appena aggiornata oggi per il bump 1.7.4; questo spiegherebbe perché lo vedo su due computer diversi dopo un brew update && brew upgrade. Spiegherebbe anche perché non sta accadendo gpg1, perché gpg1non si basava sulla libgcryptlibreria crittografica esterna , invece utilizzava la propria libreria crittografica integrata.

Inoltre, ho gpg2installato anche da MacGPG Suite, che non presenta questo problema ed è collegato a una versione diversa di 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.

Quindi suppongo che questo sia probabilmente un bug report per i manutentori di libgcrypt. Pubblicherò sulla loro mailing list, ma per il momento lo lascerò qui nel caso in cui qualcun altro si imbattesse nello stesso problema e / o nel caso in cui qualcun altro sappia perché esattamente ciò sta accadendo. Se ricevo conferma dopo aver inviato alla loro mailing list che si tratta di un bug, voterò per chiudere questa domanda.


Sono onestamente non sono sicuro se questa domanda è più appropriato qui, su Apple.SE, o se è più appropriato per Unix.SE . Ho chiesto prima qui perché le FAQ di GnuPG suggeriscono che potrebbe trattarsi di qualcosa sul sistema operativo e sul blocco della memoria, ma non esitare a suggerire una migrazione se la pensi diversamente.
Adam Liter,

techrepublic.com/blog/it-security/the-insecure-memory-faq sembra suggerire che la causa potrebbe essere dovuta al fatto che l'ambiente ha esaurito la RAM e quindi ha bisogno di scrivere dati per scambiare spazio.
sideshowbarker,

@sideshowbarker Anche questo era il mio pensiero iniziale, ma (i) non spiegava le differenze tra il comportamento con gpg1e gpg2, e (ii) ho monitorato la memoria sul mio computer durante il test e c'è molta memoria inutilizzata quando vedo il messaggio di avviso. Penso di aver localizzato la radice del problema, ma non sono ancora sicuro del perché stia accadendo. Aggiornerà la domanda in un secondo.
Adam Liter,

@sideshowbarker Aggiornato!
Adam Liter,

Risposte:


9

La differenza tra gpg1e gpg2che stavo notando deriva dal fatto che gpg2utilizza una libreria crittografica esterna libgcrypt, mentre gpg1utilizza una libreria crittografica integrata.

E in particolare, Homebrew è stato aggiornato alla versione 1.7.4 del libgcrypt10 dicembre , che ha introdotto una regressione nel libgcryptcodice, portando all'avvertimento della memoria non sicuro.

Inizialmente si è discusso di questo sulla richiesta pull che ha introdotto la formula per libgcrypt1.7.4 in Homebrew , suggerendo che potrebbe essere in base alla progettazione:

Tuttavia, si è scoperto che questo era davvero un bug. La specifica segnalazione di bug è stata archiviata qui:

Il bug è stato corretto in questo commit e la correzione è stata rilasciata in libgcrypt1.7.5, che, al momento della stesura, è ora la versione che Homebrew installa grazie a Dominyk Tiller . Quindi, per risolvere questo problema, puoi semplicemente fare un brew update && brew upgrade.


Per i posteri, ecco alcune informazioni da una vecchia versione di questa risposta prima che fosse confermato che si trattava di un bug in libgcrypt:

Una cosa si può fare se si preferisce non sempre vedere l'avviso sulla memoria insicura è quello di aggiungere no-secmem-warninga ~/.gnupg/gpg.conf. Una vecchia versione delle FAQ di GnuPG sottolinea:

Il blocco delle pagine contro lo scambio non è necessario se il sistema utilizza una partizione di scambio crittografata. In effetti, questo è il modo migliore per proteggere i dati sensibili dal finire su un disco. Se il tuo sistema consente partizioni di swap crittografate, utilizza questa funzione. Si noti che GPG non è a conoscenza delle partizioni di swap crittografate e potrebbe stampare l'avviso; pertanto è necessario disabilitare l'avviso se la partizione di swap è crittografata. Puoi anche disabilitare questo avviso se non puoi o non vuoi installare GnuPG setuid (root). Per disabilitare l'avviso, inserisci una riga

no-secmem-warning

nel tuo ~/.gnupg/gpg.conffile.

Per quanto ne so, macOS utilizza spazio di scambio crittografato. Per me, ad esempio, sysctl vm.swapusagerestituisce:

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

Inoltre, come @sideshowbarkersottolineato nei commenti , c'è anche un post nella mailing list degli utenti di gnupg , che dice che è relativamente sicuro ignorare questo avviso:

[...] è <understatement>piuttosto difficile </understatement>sfruttare la memoria non sicura senza i privilegi di root - e se l'attaccante ha i privilegi di root sulla tua macchina, allora è tutto finito.


Alla luce di github.com/Homebrew/homebrew-core/pull/… e del fatto che i libgcryptmanutentori sembrano averlo interrotto intenzionalmente, potrebbe valere la pena aggiungere qui che il messaggio può essere soppresso aggiungendo la riga no-secmem-warningal ~/.gnupg/gpg.conffile. Come osserva lists.gnupg.org/pipermail/gnupg-users/2015-December/054771.html , “è piuttosto difficile sfruttare la memoria non sicura senza i privilegi di root - e se il tuo aggressore ha i privilegi di root sulla tua macchina, allora è tutto da capo ”. Quindi l'avvertimento non è molto utile per cominciare.
sideshowbarker,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.