Sampai hari ini, setiap kali saya menggunakan gpg2
(diinstal melalui Homebrew) di Mac saya (10.12.1), saya sekarang melihat peringatan berikut:
Warning: using insecure memory!
Untuk apa nilainya, saya melihat perilaku yang sama ini pada dua mesin yang berbeda: Mac mini (akhir 2012) dan MacBook Pro (akhir 2012), keduanya menjalankan 10.12.1.
Seperti yang dikatakan dalam FAQ GnuPG :
GnuPG mencoba untuk mengunci memori sehingga tidak ada proses lain yang dapat melihatnya dan agar memori tidak akan ditulis untuk swap. Jika karena alasan tertentu tidak dapat melakukan ini (misalnya, platform tertentu tidak mendukung penguncian memori semacam ini), GnuPG akan memperingatkan Anda bahwa itu menggunakan memori tidak aman.
Meskipun hampir selalu lebih baik menggunakan memori aman, tidak selalu buruk menggunakan memori tidak aman. Jika Anda memiliki mesin dan Anda yakin itu tidak menyembunyikan malware, maka peringatan ini mungkin dapat diabaikan.
Hal yang membuat saya bingung adalah gpg2
tidak berubah sejak 12 September 2016 . Saya sudah menginstal versi 2.0.30 lebih atau kurang sejak itu, tetapi saya baru mulai melihat peringatan tentang memori tidak aman hari ini. Meskipun gpg2
formula tidak berubah sejak 12 September 2016, satu hal yang dapat saya katakan dengan pasti bahwa saya lakukan pada kedua mesin sebelum permulaan melihat peringatan ini adalah a brew update && brew upgrade
. Tetapi saya bahkan tidak yakin bagaimana itu dapat memengaruhi ini; mengingat apa yang dikatakan FAQ GnuPG, sepertinya ini ada hubungannya dengan OS dan penguncian memori.
... Dan yang lebih aneh lagi adalah saya juga telah gpg1
menginstal dari Homebrew (versi 1.4.21), yang tidak memperingatkan tentang memori tidak aman ketika saya menggunakannya:
$ 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
Kedua binari milik pemilik dan grup yang sama dan memiliki izin yang sama:
-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
Saya baru saja mencoba menginstal ulang gpg2
dengan Homebrew: baik dengan menggunakan biner yang telah dikompilasi dan dengan membangun sumber bentuk, tetapi ini tidak mengubah apa pun. Saya masih mendapatkan peringatan tentang penggunaan memori tidak aman.
Selain itu, bahkan membuat biner gpg2 memiliki bit root setuid dibalik (seperti yang disarankan, misalnya , di sini ) tidak menyebabkan pesan menghilang; masih memperingatkan tentang menggunakan memori tidak aman.
Adakah yang tahu apa yang bisa berubah sehingga saya tiba-tiba mulai melihat peringatan ini hari ini? Dan mengapa saya melihatnya ketika menggunakan gpg2
biner tetapi bukan gpg1
biner?
Informasi lain yang mungkin relevan:
$ 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
Memperbarui
Saya pikir alasan ini terjadi adalah karena versi baru libgcrypt
. Saya masih tidak tahu mengapa itu terjadi, tetapi saya cukup yakin bahwa ini setidaknya merupakan akar penyebab masalah ini. Formula untuk libgcrypt
baru saja diperbarui hari ini untuk benjolan 1.7.4; ini akan menjelaskan mengapa saya melihat ini di dua komputer yang berbeda setelah brew update && brew upgrade
. Ini juga akan menjelaskan mengapa hal itu tidak terjadi gpg1
, karena gpg1
tidak bergantung pada libgcrypt
pustaka kriptografi eksternal , sebagai gantinya menggunakan pustaka kriptografi terintegrasi sendiri.
Selain itu, saya juga telah gpg2
menginstal dari MacGPG Suite, yang tidak menunjukkan masalah ini dan terkait dengan versi yang berbeda dari 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.
Jadi saya menduga bahwa ini mungkin laporan bug untuk pengelola libgcrypt
. Saya akan memposting ke milis mereka, tetapi saya akan meninggalkan ini di sini untuk sementara waktu jika ada orang lain yang menemukan masalah yang sama dan / atau kalau-kalau ada orang lain yang tahu mengapa hal ini terjadi. Jika saya mendapat konfirmasi setelah mengirim kata ke milis mereka bahwa ini adalah bug, saya akan memilih untuk menutup pertanyaan ini.
sumber
gpg1
dangpg2
, dan (ii) Saya telah memonitor memori pada komputer saya saat menguji ini, dan ada banyak memori yang tidak digunakan ketika saya melihat pesan peringatan. Saya pikir saya telah melokalisasi akar masalah, tetapi saya masih tidak yakin mengapa itu terjadi. Akan memperbarui pertanyaan dalam sedetik.Jawaban:
Perbedaan antara
gpg1
dangpg2
yang saya perhatikan muncul dari fakta yanggpg2
menggunakan perpustakaan kriptografi eksternallibgcrypt
, sedangkangpg1
menggunakan perpustakaan kriptografi terintegrasi.Dan secara khusus, Homebrew memperbarui ke versi 1.7.4
libgcrypt
pada 10 Desember , yang memperkenalkan regresi dalamlibgcrypt
kode, yang mengarah ke peringatan memori tidak aman.Awalnya ada sedikit diskusi tentang ini pada permintaan tarik yang memperkenalkan formula untuk
libgcrypt
1.7.4 ke dalam Homebrew , menyarankan bahwa itu mungkin dengan desain:@ilovezfs
juga menemukan sesuatu yang menunjukkan bahwa itu mungkin bukan bug juga .Meskipun demikian, ternyata ini memang bug. Laporan bug spesifik diajukan di sini:
libgcrypt
1.7.4 istirahat KWallet5: "Tidak bisa mendapatkan memori aman" dari GCRYCTL_INIT_SECMEMBug diperbaiki dalam komit ini , dan perbaikannya dirilis pada
libgcrypt
1.7.5, yang, pada saat penulisan, sekarang merupakan versi yang dipasang Homebrew berkat Dominyk Tiller . Jadi, untuk memperbaiki masalah ini, Anda bisa melakukan abrew update && brew upgrade
.Demi anak cucu, berikut adalah beberapa informasi dari versi lama jawaban ini sebelum dipastikan bahwa ini adalah bug di
libgcrypt
:Satu hal yang dapat Anda lakukan jika Anda tidak ingin selalu melihat peringatan tentang memori tidak aman adalah dengan menambahkan
no-secmem-warning
ke~/.gnupg/gpg.conf
. Versi lama dari FAQ GnuPG menunjukkan:Sejauh yang saya tahu, macOS tidak menggunakan ruang swap terenkripsi. Bagi saya, misalnya,
sysctl vm.swapusage
mengembalikan:Selain itu, seperti yang
@sideshowbarker
ditunjukkan dalam komentar , ada juga posting ke milis gnupg-pengguna , yang mengatakan bahwa relatif aman untuk mengabaikan peringatan ini:sumber
libgcrypt
pengelola tampaknya telah merusak ini dengan sengaja, mungkin ada baiknya menambahkan di sini bahwa pesan dapat ditekan dengan menambahkan barisno-secmem-warning
ke~/.gnupg/gpg.conf
file. Seperti yang dicatat lists.gnupg.org/pipermail/gnupg-users/2015-Desember/054771.html , “cukup sulit untuk mengeksploitasi memori tidak aman tanpa hak akses root - dan jika penyerang Anda memiliki hak akses root pada mesin Anda maka semuanya berakhir pula ” Jadi peringatan itu tidak terlalu berguna untuk memulai.