gpg2: Peringatan: menggunakan memori tidak aman!

11

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 gpg2tidak 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 gpg2formula 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 gpg1menginstal 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 gpg2dengan 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 gpg2biner tetapi bukan gpg1biner?

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 libgcryptbaru 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 gpg1tidak bergantung pada libgcryptpustaka kriptografi eksternal , sebagai gantinya menggunakan pustaka kriptografi terintegrasi sendiri.

Selain itu, saya juga telah gpg2menginstal 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.

Adam Liter
sumber
Saya jujur tidak yakin apakah pertanyaan ini yang paling tepat di sini, di Apple.SE, atau jika itu lebih tepat untuk Unix.SE . Saya bertanya di sini dulu karena FAQ GnuPG menyarankan mungkin ada sesuatu tentang OS dan penguncian memori, tapi jangan ragu untuk menyarankan migrasi jika Anda berpikir sebaliknya.
Adam Liter
techrepublic.com/blog/it-security/the-insecure-memory-faq tampaknya menyarankan penyebabnya mungkin karena lingkungan Anda sudah kehabisan RAM dan karenanya perlu menulis data untuk bertukar ruang.
sontonbarker
@sontonbarker Itu adalah pemikiran awal saya juga, tetapi (i) itu tidak akan menjelaskan perbedaan antara perilaku dengan gpg1dan gpg2, 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.
Adam Liter
@sontonbarker Diperbarui!
Adam Liter

Jawaban:

9

Perbedaan antara gpg1dan gpg2yang saya perhatikan muncul dari fakta yang gpg2menggunakan perpustakaan kriptografi eksternal libgcrypt, sedangkan gpg1menggunakan perpustakaan kriptografi terintegrasi.

Dan secara khusus, Homebrew memperbarui ke versi 1.7.4 libgcryptpada 10 Desember , yang memperkenalkan regresi dalam libgcryptkode, yang mengarah ke peringatan memori tidak aman.

Awalnya ada sedikit diskusi tentang ini pada permintaan tarik yang memperkenalkan formula untuk libgcrypt1.7.4 ke dalam Homebrew , menyarankan bahwa itu mungkin dengan desain:

Meskipun demikian, ternyata ini memang bug. Laporan bug spesifik diajukan di sini:

Bug diperbaiki dalam komit ini , dan perbaikannya dirilis pada libgcrypt1.7.5, yang, pada saat penulisan, sekarang merupakan versi yang dipasang Homebrew berkat Dominyk Tiller . Jadi, untuk memperbaiki masalah ini, Anda bisa melakukan a brew 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-warningke ~/.gnupg/gpg.conf. Versi lama dari FAQ GnuPG menunjukkan:

Mengunci halaman agar tidak ditukar tidak perlu jika sistem Anda menggunakan partisi swap terenkripsi. Sebenarnya itu adalah cara terbaik untuk melindungi data sensitif dari berakhir pada disk. Jika sistem Anda mengizinkan partisi swap terenkripsi, harap manfaatkan fitur itu. Perhatikan bahwa GPG tidak tahu tentang partisi swap terenkripsi dan mungkin mencetak peringatan; dengan demikian Anda harus menonaktifkan peringatan jika partisi swap Anda dienkripsi. Anda mungkin juga ingin menonaktifkan peringatan ini jika Anda tidak bisa atau tidak ingin menginstal GnuPG setuid (root). Untuk menonaktifkan peringatan, Anda memberi garis

no-secmem-warning

ke dalam ~/.gnupg/gpg.conffile Anda .

Sejauh yang saya tahu, macOS tidak menggunakan ruang swap terenkripsi. Bagi saya, misalnya, sysctl vm.swapusagemengembalikan:

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

Selain itu, seperti yang @sideshowbarkerditunjukkan dalam komentar , ada juga posting ke milis gnupg-pengguna , yang mengatakan bahwa relatif aman untuk mengabaikan peringatan ini:

[...] <understatement>cukup sulit </understatement>untuk mengeksploitasi memori tidak aman tanpa hak akses root - dan jika penyerang Anda memiliki hak akses root pada mesin Anda, maka semuanya sudah berakhir.

Adam Liter
sumber
Mengingat github.com/Homebrew/homebrew-core/pull/… dan fakta bahwa libgcryptpengelola tampaknya telah merusak ini dengan sengaja, mungkin ada baiknya menambahkan di sini bahwa pesan dapat ditekan dengan menambahkan baris no-secmem-warningke ~/.gnupg/gpg.conffile. 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.
sontonbarker