Будучи «нормальным» гражданином, живущим в Западной Европе, действительно ли необходимо стереть или зашифровать файл подкачки на моем компьютере?
Это личное суждение, которое зависит от того, насколько вы цените конфиденциальность ваших данных и насколько вы хотите защитить свои данные от раскрытия, если они попадут в руки злоумышленника. Предположим, у вас есть ноутбук, и однажды его украдут - насколько вероятно, что вор попытается извлечь пароли или ключи шифрования или другие личные данные, и вас это волнует? Многим людям все равно, а некоторым это все равно. По общему признанию, большинство воров просто продало бы ноутбук для немедленной финансовой выгоды, но есть случаи, когда злоумышленник может быть мотивирован пойти дальше в попытке получить доступ к самим данным.
И прежде чем кто-то ответит «да», могу ли я получить пример того, как я мог бы протестировать и пропустить свой собственный своп, чтобы я мог реально увидеть, какие данные незащищены, несмотря на мой зашифрованный дом?
Память любого процесса потенциально может быть выгружена в пространство подкачки. Утечка памяти может быть опасной - очевидный пример - 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».