Как можно получить конфиденциальную информацию из раздела подкачки?

8

Когда я задаю этот вопрос в Google, я получаю только всевозможную информацию о том, как защитить конфиденциальные данные, как зашифровать своп и насколько опасным может быть «обычный» своп в системе linux.

Но я не мог найти никакого программного обеспечения, метода или «как», чтобы действительно получить (прочитать) любой фрагмент данных из раздела подкачки.

Итак, мой вопрос, будучи «нормальным» гражданином, живущим в Западной Европе, действительно ли необходимо стереть или зашифровать файл подкачки на моем компьютере? И прежде чем кто-то ответит «да», могу ли я получить пример того, как я мог бы протестировать и пропустить свой собственный своп, чтобы я мог реально увидеть, какие данные незащищены, несмотря на мой зашифрованный дом?

боб
источник
1
Один метод можно найти по этому вопросу
Nattgew
1
может быть полезно, security.stackexchange.com/questions/29350/…
user.dz

Ответы:

10

Будучи «нормальным» гражданином, живущим в Западной Европе, действительно ли необходимо стереть или зашифровать файл подкачки на моем компьютере?

Это личное суждение, которое зависит от того, насколько вы цените конфиденциальность ваших данных и насколько вы хотите защитить свои данные от раскрытия, если они попадут в руки злоумышленника. Предположим, у вас есть ноутбук, и однажды его украдут - насколько вероятно, что вор попытается извлечь пароли или ключи шифрования или другие личные данные, и вас это волнует? Многим людям все равно, а некоторым это все равно. По общему признанию, большинство воров просто продало бы ноутбук для немедленной финансовой выгоды, но есть случаи, когда злоумышленник может быть мотивирован пойти дальше в попытке получить доступ к самим данным.

И прежде чем кто-то ответит «да», могу ли я получить пример того, как я мог бы протестировать и пропустить свой собственный своп, чтобы я мог реально увидеть, какие данные незащищены, несмотря на мой зашифрованный дом?

Память любого процесса потенциально может быть выгружена в пространство подкачки. Утечка памяти может быть опасной - очевидный пример - Heartbleed - посмотрите, как я использовал Heartbleed для кражи закрытого крипто-ключа сайта . Память, предоставляемая Heartbleed, принадлежит только одному процессу, тогда как память, потенциально доступная вашему пространству подкачки, принадлежит каждому процессу. Представьте, что процесс, содержащий закрытый ключ или список паролей (например, веб-браузер), заменяется - эти элементы будут отображаться в открытом виде в пространстве подкачки. Их извлечение - это просеивание в памяти определенных шаблонов данных - это могут быть незашифрованные ASCII-данные, видимые черезstringsили он может быть более сложным, как в Heartbleed (где тест состоит в том, что некоторые последовательные байты являются делителем открытого криптографического ключа). Если у вас есть зашифрованный / домашний раздел, то очевидной вещью, которую нужно искать, является блок данных, который формирует ключ шифрования, который разблокирует данные пользователя.

Рабочий пример:

  • сделать, bash -c 'echo SECRET=PASSWORD > /dev/null; sleep 1000'чтобы создать процесс bash с некоторыми секретными данными в его стеке

  • сделать, sysctl vm.swappiness=100чтобы увеличить swappiness (не обязательно, но может сделать пример проще)

  • запустите top -c, нажмите f, включите столбец SWAP, нажмите q, чтобы вернуться к верхнему виду процесса, прокрутите вниз, пока не увидите bash -cпроцесс

  • в другом терминале сохраните программу Chimnay Kanchi из Linux: как загрузить системную память? чтобы usemem.cскомпилировать gcc -o usemem usemem.cи запустить usemem &несколько раз в терминале. Это будет использовать 512 МБ блоков памяти одновременно. (Неважно, что вызывает замену памяти, это может быть нормальное использование системы, процесс запуска или преднамеренная атака, конечный результат тот же)

  • смотреть сверху, дождаться пока bash -cменяются местами (значение столбца SWAP> 0)

  • Теперь беги, strings /dev/sdaX | grep SECRETгде X - твой обменный парититон

  • Поздравляем - вы только что извлекли «секретные» данные из раздела подкачки. вы увидите несколько копий текста SECRET, за которым следует «пароль», копии, включающие полную командную строку, просочившуюся из родительского процесса bash, процесса top и процесса «bash -c». Строки, которые не включают полную командную строку, просочились из процесса 'bash -c'.

  • Чтобы доказать утечку секретов из памяти процесса, а не только из командной строки, добавьте строку unsigned char secret[] = "SECRET=XXXX";в usemem.c (чуть ниже unsigned long mem;строки). Перекомпилируйте и запустите usemem &несколько раз, и strings /dev/sdaX | grep SECRETснова. На этот раз вы увидите утечку секрета «XXXX».

Bain
источник
+1 за довольно хорошее объяснение и отличный пример.
Jobin
-1

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

Итак, для начала вам следует прочитать несколько статей о практической разработке программного обеспечения и шифровании данных.

Начните читать эту статью: http://www.ibm.com/developerworks/library/s-data.html?ns-311

Надеюсь, поможет.

Октавио Филипе Гонсалвес
источник