gpg2: Внимание: использование небезопасной памяти!


11

На сегодняшний день, когда я использую gpg2(установлен через Homebrew) на моем Mac (10.12.1), я теперь вижу следующее предупреждение:

Warning: using insecure memory!

Что бы это ни стоило, я вижу такое же поведение на двух разных машинах: Mac mini (конец 2012 года) и MacBook Pro (конец 2012 года), оба работают под управлением 10.12.1.

Как часто задаваемые вопросы GnuPG говорят:

GnuPG пытается заблокировать память, чтобы никакой другой процесс ее не увидел, и чтобы память не была записана для подкачки. Если по какой-либо причине он не может этого сделать (например, некоторые платформы не поддерживают этот тип блокировки памяти), GnuPG предупредит вас, что использует небезопасную память.

Хотя почти всегда лучше использовать безопасную память, использование небезопасной памяти не обязательно плохо. Если вы владеете машиной и уверены, что в ней нет вредоносных программ, это предупреждение, вероятно, можно игнорировать.

Меня смущает то, что gpg2с 12 сентября 2016 года ничего не изменилось . С тех пор у меня установлена ​​более или менее версия 2.0.30, но я только начал видеть это предупреждение о небезопасной памяти сегодня. Даже при том , что gpg2формула не изменилась с 12 сентября 2016 года, то одна вещь , которую я могу с уверенностью сказать , что я сделал на обеих машинах до начала видеть это предупреждение является brew update && brew upgrade. Но я даже не уверен, как это может повлиять на это; учитывая то, что говорится в GnuPG FAQ, похоже, что это как-то связано с ОС и блокировкой памяти.

... И что еще более странно, я также gpg1установил из Homebrew (версия 1.4.21), который не предупреждает о небезопасной памяти при ее использовании:

$ 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

Оба бинарных файла принадлежат одному владельцу и группе и имеют одинаковые разрешения:

-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

Я только что попытался переустановить gpg2с помощью Homebrew: как с помощью предварительно скомпилированного бинарного файла, так и путем создания исходного кода, но это ничего не меняет. Я все еще получаю предупреждение об использовании небезопасной памяти.

Более того, даже если в двоичном файле gpg2 бит корня setuid перевернут (как предлагается, например , здесь ), это не приведет к исчезновению сообщения; он по-прежнему предупреждает об использовании небезопасной памяти.

Кто-нибудь знает, что могло измениться так, что я вдруг начал бы видеть это предупреждение сегодня? И почему я вижу это при использовании gpg2двоичного файла, а не gpg1двоичного?

Другая, возможно, актуальная информация:

$ 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

Обновить

Я думаю, что причина этого происходит из-за новой версии libgcrypt. Я до сих пор не знаю, почему это происходит, но я уверен, что это, по крайней мере, коренная причина проблемы. Формула для libgcryptбыла только что обновлена ​​сегодня для 1.7.4 удара; это объясняет, почему я вижу это на двух разных компьютерах после brew update && brew upgrade. Это также объяснило бы, почему это не происходит gpg1, потому gpg1что не полагалось на внешнюю libgcryptкриптографическую библиотеку, вместо этого используя свою собственную интегрированную криптографическую библиотеку.

Кроме того, я также gpg2установил из MacGPG Suite, который не демонстрирует эту проблему и связан с другой версией 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.

Таким образом, я предполагаю, что это, вероятно, сообщение об ошибке для сопровождающих libgcrypt. Я опубликую их список рассылки, но пока оставлю это здесь, если кто-то еще столкнется с той же проблемой и / или если кто-то еще знает, почему именно это происходит. Если я получу подтверждение после отправки сообщения в их список рассылки, что это ошибка, я проголосую, чтобы закрыть этот вопрос.


Я честно не знаю , если этот вопрос является наиболее подходящим здесь, на Apple.SE, или , если это более подходит для Unix.SE . Сначала я спросил здесь, потому что часто задаваемые вопросы GnuPG предполагают, что это может быть что-то в отношении блокировки ОС и памяти, но, пожалуйста, не стесняйтесь предлагать миграцию, если вы думаете иначе.
Адам Литер

techrepublic.com/blog/it-security/the-insecure-memory-faq, по- видимому, предполагает, что причина может быть связана с тем, что в вашей среде недостаточно памяти и поэтому необходимо записать данные в пространство подкачки.
Sideshowbarker

@sideshowbarker Это была моя первоначальная мысль, но (i) это не объясняло различий между поведением с gpg1и gpg2, и (ii) я проверял память на своем компьютере при тестировании, и есть много неиспользуемой памяти когда я вижу предупреждающее сообщение. Я думаю, что локализовал корень проблемы, но я все еще не уверен, почему это происходит. Обновлю вопрос через секунду.
Адам Литер

@sideshowbarker Обновлено!
Адам Литер

Ответы:


9

Разница между тем gpg1и тем, gpg2что я заметил, проистекает из того факта, что gpg2используется внешняя криптографическая библиотека libgcrypt, тогда как gpg1используется встроенная криптографическая библиотека.

В частности, Homebrew обновился до версии 1.7.4 от libgcrypt10 декабря , что libgcryptпривело к регрессии в коде, что привело к предупреждению о небезопасной памяти.

Первоначально была небольшая дискуссия по этому поводу по запросу, который ввел формулу для libgcrypt1.7.4 в Homebrew , предполагая, что это может быть задумано :

Тем не менее, оказывается, что это действительно было ошибкой. Конкретный отчет об ошибке был подан здесь:

Ошибка была исправлена ​​в этом коммите , а исправление было выпущено в libgcrypt1.7.5, которая на момент написания теперь является версией, которую Homebrew устанавливает благодаря Dominyk Tiller . Таким образом, чтобы решить эту проблему, вы можете просто сделать brew update && brew upgrade.


Ради потомков, вот некоторая информация из старой версии этого ответа, прежде чем было подтверждено, что это ошибка в libgcrypt:

Одна вещь , которую вы можете сделать , если вы не хотите всегда видеть предупреждение о небезопасном памяти , чтобы добавить no-secmem-warningк ~/.gnupg/gpg.conf. Старая версия GnuPG FAQ указывает:

Блокировка страниц от подкачки не требуется, если ваша система использует зашифрованный раздел подкачки. Фактически это лучший способ защитить конфиденциальные данные от попадания на диск. Если в вашей системе предусмотрены зашифрованные разделы подкачки, воспользуйтесь этой функцией. Обратите внимание, что GPG не знает о зашифрованных разделах подкачки и может напечатать предупреждение; таким образом, вы должны отключить предупреждение, если ваш раздел подкачки зашифрован. Вы также можете отключить это предупреждение, если не можете или не хотите устанавливать GnuPG setuid (root). Чтобы отключить предупреждение, вы ставите строку

no-secmem-warning

в ваш ~/.gnupg/gpg.confфайл.

Насколько я знаю, macOS использует зашифрованное пространство подкачки. Для меня, например, sysctl vm.swapusageвозвращает:

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

Кроме того, как @sideshowbarkerотмечается в комментариях , в списке рассылки gnupg-users также есть сообщение , в котором говорится, что игнорировать это предупреждение относительно безопасно:

[...] <understatement>довольно сложно </understatement>эксплуатировать небезопасную память без привилегий root - и если у вашего злоумышленника есть привилегии root на вашей машине, то все кончено.


В свете github.com/Homebrew/homebrew-core/pull/… и того факта, что libgcryptсопровождающие, кажется, преднамеренно нарушили это, возможно, стоит добавить, что сообщение может быть подавлено путем добавления строки no-secmem-warningв ~/.gnupg/gpg.confфайл. Как отмечает lists.gnupg.org/pipermail/gnupg-users/2015-De December/054771.html : «довольно небезопасно использовать небезопасную память без привилегий root - и если у вашего злоумышленника есть привилегии root на вашей машине, то все равно все кончено ». Так что предупреждение не очень полезно для начала.
sideshowbarker
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.