gpg2: Увага: використання незахищеної пам'яті!


11

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

Warning: using insecure memory!

Щодо того варто, я бачу таку саму поведінку на двох різних машинах: Mac mini (кінець 2012 р.) Та MacBook Pro (кінець 2012 р.), Обидві версії 10.12.1.

Як говориться в FAQ GnuPG :

GnuPG намагається заблокувати пам'ять, щоб жоден інший процес не міг бачити її, і пам'ять не буде записана на обмін. Якщо з якихось причин це не вдається зробити (наприклад, певні платформи не підтримують такий спосіб блокування пам’яті), GnuPG попередить вас, що він використовує незахищену пам’ять.

Хоча майже завжди краще використовувати безпечну пам’ять, не обов'язково погано використовувати незахищену пам’ять. Якщо ви є власником машини, і ви впевнені, що це не містить шкідливих програм, то це застереження, ймовірно, може бути проігноровано.

Що мене бентежить, це те, що gpg2не змінилося з 12 вересня 2016 року . У мене з тих пір була встановлена ​​версія 2.0.30 більш-менш, але сьогодні я почав бачити це попередження про незахищену пам’ять. Незважаючи на те, що gpg2формула не змінилася з 12 вересня 2016 року, я можу точно сказати, що я робив на обох машинах до початку перегляду цього попередження brew update && brew upgrade. Але я навіть не впевнений, як це може вплинути на це; враховуючи те, що говорить FAQ GnuPG, схоже, що це має щось більше спільного з блокуванням ОС та пам'яті.

... І що ще дивніше - це те, що я також 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

Я просто спробував перевстановити програму gpg2Homebrew: і за допомогою попередньо складеного двійкового файлу, і за допомогою побудови джерела форми, але це нічого не змінює. Я все ще отримую попередження про використання небезпечної пам’яті.

Більше того, навіть виготовлення бінарного файлу gpg2 має перевернути встановлений корінь (як це пропонується, наприклад , тут ), не зникає повідомлення; він все ще попереджає про використання небезпечної пам'яті.

Хтось знає, що могло змінитись так, що я сьогодні раптом почав бачити це попередження? І чому я бачу це під час використання 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, здається, припускає, що причина може бути пов’язана з тим, що ваше середовище ослабило оперативну пам’ять і тому потрібно записувати дані для обміну місцями.
sidehowbarker

@sideshowbarker Так само було моєю початковою думкою, але (i) це не пояснило б відмінності між поведінкою gpg1та gpg2і (ii) Я контролював пам'ять на своєму комп’ютері при тестуванні цього, і є багато невикористаної пам'яті коли я бачу попереджувальне повідомлення. Я думаю, що я локалізував корінь проблеми, але я все ще не впевнений, чому це відбувається. Оновіть питання через секунду.
Адам Літер

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

Відповіді:


9

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

А конкретно, Homebrew оновився до версії 1.7.4 від libgcrypt10 грудня , яка ввела регрес у libgcryptкод, що призвело до небезпечного попередження пам’яті.

Спочатку було небагато дискусій з цього приводу на запит на libgcryptвиклик, який ввів формулу 1.7.4 на домашню мову , припускаючи, що це може бути задумом:

Тим не менш, виявляється, що це справді була помилка. Конкретний звіт про помилку було подано тут:

Помилка була виправлена ​​в цьому комітеті , а виправлення було випущено в libgcrypt1.7.5, що на момент написання тексту тепер є версією, яку Homebrew встановлює завдяки Домініку Тіллеру . Таким чином, щоб виправити цю проблему, ви можете просто зробити brew update && brew upgrade.


Заради нащадків, ось деякі відомості зі старої версії цієї відповіді, перш ніж було підтверджено, що це помилка libgcrypt:

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

Блокування сторінок від їх заміни не потрібно, якщо ваша система використовує зашифрований розділ swap. Насправді це найкращий спосіб захистити конфіденційні дані від попадання на диск. Якщо ваша система дозволяє зашифровані розділи swap, скористайтеся цією функцією. Зверніть увагу, що GPG не знає про зашифровані розділи swap і може надрукувати попередження; таким чином, ви повинні відключити попередження, якщо ваш розділ swap зашифрований. Ви також можете відключити це попередження, якщо ви не можете або не хочете встановити 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 , де сказано, що ігнорувати це попередження відносно безпечно:

[...] <understatement>досить важко </understatement>експлуатувати незахищену пам’ять без привілеїв root - і якщо ваш нападник має кореневі привілеї на вашій машині, то все одно все одно.


Зважаючи на github.com/Homebrew/homebrew-core/pull/… та факт, що, libgcryptмабуть, технічне обслуговування порушило це навмисно, тут, можливо, варто додати, що повідомлення можна придушити, додавши рядок no-secmem-warningу ~/.gnupg/gpg.confфайл. Як зазначає list.gnupg.org/pipermail/gnupg-users/2015-December/054771.html , "досить важко використовувати незахищену пам'ять без привілеїв root - і якщо ваш нападник має root права на вашій машині, то все все одно ”. Тож попередження не дуже корисно для початку.
sidehowbarker
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.