При использовании зашифрованного раздела с конфиденциальной информацией, злоумышленник, имеющий физический доступ к компьютеру, может воспользоваться методом холодной перезагрузки (http://www.opennet.dev/opennews/art.shtml?num=17035) для получения ключей шифрования. Метод основан на способности оперативной памяти (DRAM) какое-то время сохранять информацию после отключения питания и отсутствия импульсов регенерации ее содержимого (при температуре -50 градусов данные сохраняются более 10 минут). После холодной перезагрузки или переключении чипа памяти на другое устройство память не обнуляется и данные старой рабочей сессии можно проанализировать. Особенно актуальная проблема для ноутбуков, которые часто не выключаются и лишь переводятся в ждущий режим, при котором ОЗУ не обесточивается. В простейшем случае, восстановить ключ из памяти можно используя утилиту msramdmp (http://www.mcgrewsecurity.com/tools/msramdmp/), перезагрузившись в LiveCD (например, можно использовать [[http://www.mcgrewsecurity.com/projects/msramdmp/msramdmp_cd.iso msramdmp_cd.iso]]).В рамках проекта TRESOR (http://www1.informatik.uni-erlangen.de/tresor) подготовлены патчи для ядра Linux с реализацией модуля шифрования AES, который сохраняет ключи в отладочных регистрах процессора и обрабатывает все операции шифрования непосредственно в CPU, без копирования ключей в ОЗУ. TRESOR может использоваться на любых процессорах с поддержкой SSE2. При использовании 64-разрядных CPU с поддержкой набора инструкций AES-NI, например, Intel Core i5 или Core-i7, поддерживается работа с ключами AES 128, 192 и 256 без потери производительности. При запуске на 32-разрядных CPU с поддержкой инструкций SSE2, скорость выполнения шифрования примерно в 6 раз ниже, чем базовая реализация AES для ядра Linux. При этом можно использовать только ключи длиной 128 бит.
++ Собираем ядро с патчем TRESOR.
Загружаем ядро 2.6.36 с http://kernel.org и распаковываем его в директорию /usr/src/linux-2.6.36.
Применяем патч (http://www1.informatik.uni-erlangen.de/tresor):
cd /usr/src/
patch --directory /usr/src/linux-2.6.36 -p1 < tresor-patch-2.6.36
Запускаем menuconfig и настраиваем параметры ядра, не забыв включить TRESOR (Cryptographic API -> AES cipher algorithms (TRESOR)).
Собираем ядро. Ниже пример сборки и установки пакета для Debian GNU/Linux:
cd /usr/src/linux-2.6.36
make-kpkg kernel_image --initrd --revision tresor1
cd /usr/src
dpkg -i linux-image-2.6.36-tresor1.deb
update-initramfs -c -k 2.6.36
++ Запускаем систему
Перезагружаемся, выбрав ядро с патчами TRESOR.
В ответ на приглашение TRESOR "Enter password" вводим пароль и подтверждаем валидность хэша:
Enter password > ********
Confirm key hash > 51 b7 fd ... 58 ac Correct (yes/no) > yes
Пароль может содержать от 8 до 53 символов. Возможности поменять пароль после загрузки нет, поэтому к вводу пароля нужно отнестись внимательно иначе потребуется лишний раз перезагружать систему. Выводимый хэш не является ключом шифрования, а просто выводится для того чтобы можно было дополнительно проверить правильность задания пароля.
После того как система загрузится можно попытаться перевести её в ждущий режим и проверить работу TRESOR:
echo mem > /sys/power/state
После возвращения из спящего режима должно быть выведено приглашение для ввода пароля, такое же как после загрузки системы. Для проверки, что повторно введенный пароль верен в памяти сохраняется необратимый проверочный хэш, который позволяет удостовериться в правильности ввода, но не дает возможности восстановить содержимое пароля и ключа шифрования. Проверка пароля необходима, так как неправильно введенный пароль может привести к повреждению данных в уже примонтированном зашифрованном разделе. Так как пароль вводится в консоли при активном графическом режиме возможно потребуется ввести пароль вслепую.
++ Настройка шифрования
Устанавливаем утилиты для работы с dm-crypt:
apt-get install cryptsetup
Если ядро собрано с поддержкой LKM, убедимся, что загружен модуль ядра dm_mod:
modprobe dm_mod
В качестве демонстрации настроим два варианта шифрования: отдельного раздела на USB-накопителе и виртуального шифрованного раздела внутри файла.
++ Настройка зашифрованного дискового раздела
Зашифруем раздел /dev/sdb1:
cryptsetup create tresor /dev/sdb1 --cipher tresor --key-size 128
> Enter passphrase: указываем произвольный пароль
Размер ключа для 64-разрядных процессоров с поддержкой AES-NI может быть 128, 192 и 256. Для остальных CPU - только 128.
Форматируем созданный шифрованный раздел:
mkfs.ext2 /dev/mapper/tresor
Монтируем раздел:
mount /dev/mapper/tresor /media/tresor
все операции записи и чтения в /media/tresor производятся с использованием шифрования.
Отмонтируем раздел и выгружаем шифрованное устройство:
umount /media/tresor
cryptsetup remove tresor
++ Настройка зашифрованного контейнера (шифрованный раздел внутри файла)
Создаем пустой файл-контейнер container.img, размером 1 Гб:
dd if=/dev/zero bs=1M count=1024 of=container.img
Прикрепляем контейнер к псевдоустройству через loop-интерфейс:
losetup /dev/loop0 container.img
Повторяем действия, описанные выше для шифрованных дисковых разделов, но используя в качестве имени устройства /dev/loop0
При отмонтировании, для отсоединения контейнера от loop-устройства дополнительно выполняем:
losetup -d /dev/loop0
URL: http://www1.informatik.uni-erlangen.de/tresor?q=content/readme
Обсуждается: http://www.opennet.dev/tips/info/2617.shtml