Ubuntu шифрование раздела. Добавление шифрования в Ubuntu

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

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

Наиболее распространенный способ защиты данных это шифрование файлов. На диске создается шифрованная папка, в нее записываются файлы. Теоретически это надежно, если используется алгоритм AES, ключи большой длины. Но остается неочевидная уязвимость данных при таком способе шифрования. Дело в том, что операционная система остается незащищенной. А это дает злоумышленнику возможность установить в систему специальную программу, (кейлогер, руткит) которая будет запускаться при старте ОС и отслеживать действия пользователя и таким образом рано или поздно злоумышленник получит пароль или ключевой файл для доступа к зашифрованным папкам и файлам. Либо сможет получить сами эти данные после того, как пользователь откроет зашифрованный файл.

Значит, действительно стойкая защита данных на диске это шифрование не отдельных файлов и папок, а всего раздела. Более того, для надежной защиты необходимо шифрование всего диска. "На поверхности" не должно оставаться ничего. В этой статье будет дана инструкция как создать шифрованный системный раздел и диск в ОС Linux Ubuntu.

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

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

  • Системная область - обозначается как root или / .
  • Загрузочная область - обозначается как /boot root в виде папки.
  • Область пользовательских данных - обозначается как /home . Может располагаться на отдельном разделе или на разделе root в виде папки.
  • Область виртуальной памяти - обозначается как swap . Чаще всего размещается на отдельном разделе, но может располагаться на разделе root в виде файла.

Защищать нужно все эти области.

В статье будет рассмотрена упрощенная конфигурация - swap и /boot на отдельных разделах, а root и /home совмещены на одном разделе. Но для более сложных случаев технология защиты будет такая же.

С шифрованием областей root, swap и /home никаких трудностей нет, а вот с защитой /boot есть проблема. Дело в том, что из этой области системный загрузчик запускает initrd и ядро Linux. Если эту область зашифровать, тогда загрузчик не сможет запустить ядро и соответственно запуск ОС будет невозможен. То есть зашифровать /boot нельзя, но и оставлять открытой тоже нельзя, ведь в этом случае будет возможна подмена ядра, на другое, содержащее зловредный код, который перехватит пароль для расшифровки диска..

Выход в том, чтобы разместить раздел /boot на съемном носителе, на флешке. Флешка будет своего рода электронным ключом к системе. Без нее запуск ОС с зашифрованного диска будет невозможен. То есть защита раздела /boot осуществляется на физическом уровне - извлечением его из компьютера.

Таким образом общая схема защиты такова:

  • Разделы root, swap и /home размещаются на полностью зашифрованном жестком диске.
  • Раздел /boot размещается на съемном носителе.

Установка шифрованной Убунты будет выполняться с использованием Ubuntu Live. Почему именно Live? Ведь дистрибутив Alternate позволяет сделать тоже самое без плясок с бубном, там опции шифрования есть в установщике. Лично мне не нравится то, что Alternate это исключительно установочный дистрибутив, больше его никак нельзя использовать - ни для диагностики, ни для работы. К тому, же установщик Alternate работает в консоли, а это как-то архаично в 21 веке. Так, что Live.

Эта инструкция применима к двум LTS релизам 10.04 и 12.04, в обоих случаях все делается одинаково. Хотя на практике проверено только на этих двух релизах, на других это тоже должно работать.

После загрузки в Live нужно будет подключение к Интернет, потому, что в Live релизах нет пакета lvm2 - его придется скачивать и устанавливать. Итак, инструкция шаг за шагом.

Установка LVM

Установить подключение к Интернет. Затем выполнить две команды:

sudo apt-get update
sudo apt-get install lvm2

Можно заранее скачать, записать на флешку или диск пакеты libdevmapper-event, lvm2, watershed и затем установить их командой dpkg. Но Интернет все равно потребуется на финальной стадии.

Подготовка жесткого диска и флешки

На жестком диске нужно создать один пустой, неразмеченный в файловую систему раздел. Формат диска может MS-DOS или GPT - это неважно. Этот раздел будет выполнять роль криптоконтейнера.

На флешке также нужно создать один раздел, но с файловой системой Ext3.

Шифрование системного диска

Шифрование всего раздела на жестком диске выполняется командой:

sudo cryptsetup --cipher aes-xts-plain --key-size 512 --verify-passphrase luksFormat /dev/sda1

Важное примечание.

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

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

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

sudo cryptsetup luksOpen /dev/sda1 crypted

Эта команда выдаст запрос на ключевую фразу, которая была введена в предыдущей команде.

Создание шифрованных разделов

Следующий этап это создание шифрованных разделов внутри криптоконтейнера LUKS. Для создания этих разделов используется механизм LVM.

sudo pvcreate /dev/mapper/crypted
sudo vgcreate ubuntu /dev/mapper/crypted
sudo lvcreate -L 2600M -n swap ubuntu
ssudo lvcreate -l 100%FREE -n root ubuntu
sudo mkswap /dev/mapper/ubuntu-swap
sudo mkfs.ext3 /dev/mapper/ubuntu-root

Примечание .

Размер swap раздела должен быть примерно на 30% больше чем размер оперативной памяти. Раздел root не менее 5-7 Гигабайт.

Установка Ubuntu на шифрованный диск

После создания зашифрованных разделов нужно запустить инсталлятор, ярлык которого есть на рабочем столе. Установка обычная, важно лишь до запуска установщика отмонтировать флешку куда будет записан /boot, и правильно указать разделы для установки.

На этот запрос нужно ответить "Да". Это флешка, куда нужно будет устанавливать /boot раздел. Такой запрос будет выдан если вы забудете отмонтировать флешку до запуска установщика.

И вот таким образом подключить разделы:

Шифрованные разделы для установки Ubuntu это /dev/mapper/ubunu-root, /dev/mapper/ubunu-swap. Раздел /boot на флешке (это sdb1).

В окне установщика, на этапе шаг 8 нужно нажать кнопку "Дополнительно" и убедиться в том, что загрузчик будет установлен на флешку:

В Ubuntu 12.04 и разделы и загрузчик в одном окне:

После этого в окне шага 8 нужно нажать кнопку "Установить" и дождаться окончания установки. По завершении установки, установщик предложит перезагрузить компьютер. Перезагружать нельзя! Нужно остаться в Live Ubuntu. Дело в том, что в установленной на жесткий диск Ubuntu нет пакета lvm2, а это означает, что загрузка системы с жесткого диска будет невозможна.

Установка LVM на жесткий диск

Для установки lvm2 в свежеустановленную Ubuntu на жестком диске, нужно выполнить следующие команды:

sudo mount /dev/mapper/ubuntu-root /mnt
sudo mount /dev/sdb1 /mnt/boot
sudo mount -o bind /dev /mnt/dev
sudo mount -t proc proc /mnt/proc
sudo mount -t sysfs sys /mnt/sys

sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
sudo chroot /mnt /bin/bash
echo "crypted UUID=$(ls -la /dev/disk/by-uuid | grep $(basename /dev/sda1) | cut -d " " -f 9) none luks" >> /etc/crypttab
apt-get update
apt-get install cryptsetup lvm2
exit

Примечание 1. В Ubuntu 12.04 вместо cut -d " " -f 9 нужно писать cut -d " " -f 11 ! Кроме того, я советую после команды echo ... /etc/crypttab выполнить команду cat /etc/crypttab для проверки того, что строка записана верно:

Примечание 2. После предпоследней команды будут сообщения об ошибках, их можно игнорировать.

Теперь можно перезагружать компьютер и пользоваться установленной зашифрованной Ubuntu. Конечно в BIOS необходимо указать загрузку с той флешки, где установлен раздел /boot!

В установленной таким способом Ubuntu можно использовать даже спящий режим (hibernate), без опасения, что содержимое памяти, сброшенное на диск, станет доступно злоумышленнику.

Примечание 1

Важно понимать, что даже при таком тотальном шифровании сохраняются уязвимости.

  • Во-первых нужно сохранять в тайне ключевую фразу. Если вы ее запишите на стикер и приклеите на монитор это не хорошо. Если злоумышленник получит ключевую фразу, он сможет открыть ваш зашифрованный диск используя какой-либо Live дистрибутив Linux.
  • Во-вторых нужно на физическом уровне защищать загрузочную флешку. Не оставляйте ее без присмотра. Выключили компьютер - извлеките флешку и поместите ее в надежное место.
  • В-третьих нельзя оставлять без присмотра включенный компьютер. Когда компьютер включен, доступен и зашифрованный диск и загрузочная флешка.

Также необходимо понимать, что шифрование это защита на то время когда ваш компьютер выключен, а вас рядом нет. Но когда вы работаете на компьютере сохраняется возможность попадания на ваш компьютер вредоносных программ из Интернет. Такие программы могут "украсть" вашу информацию в то время как вы пользуетесь компьютером и Интернет.

Поэтому важно принимать и общие меры защиты. Не "шарахаться" где попало в Интернет. Не устанавливать непроверенные программы. Использовать брандмауэр. А при более серьезных требованиях к безопасности нужно использовать tcb и SELinux .

Примечание 2

Сделайте копию загрузочной флешки, проще всего командой dd . Запишите этот образ на другую флешку или на лазерный диск. Копия на другую флешку удобнее поскольку при необходимости вы сразу ее сможете использовать. Но в любом случае эту копию, на чем бы она ни была, нужно будет хранить в защищенном месте. А после обновления ядра или загрузчика необходимо будет обновлять копию флешки.

Иван Сухов, 2012 г

При написании этой статьи была использована информация из публикации в

Как установить Linux из дистрибутива Ubuntu Edgy Eft на полностью шифрованные разделы жёсткого диска с целью защиты от кражи конфиденциальных данных.

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

Другой наглядный пример, с которым столкнулся автор статьи, - это проблема сдачи ноутбука в гарантийный сервисный центр. Многие сервис-центры принимают ноутбуки на ремонт только в полной комплектации, и нельзя вынуть жесткий диск перед сдачей устройства мастерам. И тут уж остается уповать только на ответственность ремонтников.

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

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

В данной статье я расскажу, как установить Linux из дистрибутива Ubuntu Edgy Eft (6.10) на полностью шифрованные разделы жёсткого диска. Данная технология подходит для любого дистрибутива, различия будут состоять только в том, как установить необходимый для работы софт и как сформировать образ RAM-диска initrd. В Ubuntu это делается просто установкой соответствующих пакетов и исполнением готовых скриптов. В других дистрибутивах возможны какие-то трудности, но они, я думаю, легко преодолимы.

Идея состоит в установке системы на один шифрованный раздел жёсткого диска, внутри которого с помощью технологии LVM (Linux Volume Management) "нарезаны" разделы для корневой файловой системы (/), домашних каталогов (/home), раздела подкачки (swap) и др. по желанию. При этом загрузочный раздел /boot с файлами ядер остается незашифрованным - специфика, никуда не денешься.

Операция состоит из следующих этапов:

  1. установка минимальной системы на первый нешифрованный раздел
  2. обновление системы, установка необходимого софта (внимание: на этом этапе необходим доступ в интернет, который вам придется настраивать самостоятельно)
  3. создание шифрованных разделов
  4. создание загрузочных скриптов, для монтирования шифрованного раздела на этапе загрузки системы
  5. перенос системы с первого раздела на шифрованные области диска
  6. оформление первого раздела как загрузочного во вновь получившейся системе (/boot)
  7. подготовка менеджера загрузки Grub к загрузке новой системы с шифрованными разделами

Скрипты загрузки были взяты с сайта Ubuntu Wiki . Отличия от данного пошагового руководства заключаются лишь в методе разбивки диска и указании некоторых особенностей, связанных с другим методом разбивки диска.

Первоначальная установка

Для того чтобы сэкономить место на первом разделе, который так и останется нешифрованным, лучше всего взять установочный диск типа "Сервер". Для его установки достаточно всего 600 Мб дискового пространства. Если вы решили устанавливать версию "Десктоп", то для первого раздела потребуется порядка трех гигабайтов. Скачать образ диска "Сервер" (файл ubuntu-6.10-server-i386.iso) можно с FTP-сервера ftp.chg.ru/pub/Linux/ubuntu/releases/edgy.

Итак, во время установки создаём новые Primary-разделы:

/dev/sda1 - 600 Мб (файловая система Ext3, точка монтирования "/")
/dev/sda2 - Вся остальная область диска (файловая система на выбор, точки монтирования нет)

Устанавливаем систему на первый раздел. Второй раздел целиком будет тем шифрованным пространством, внутри которого и будут размещены все остальные разделы будущей системы. Вся процедура займёт менее десяти минут, и после перезагрузки мы получим наш сервер на разделе /dev/sda1.

Установка необходимого софта

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

После того как соединение с интернетом установлено, необходимо обновить систему до актуального состояния.

В Ubuntu активно используется sudo, а так как все дальнейшие действия должны выполняться от имени пользователя root, чтобы не мучиться, можно просто на время "стать рутом" или, иначе говоря, администратором системы:

# nano /etc/apt/sources.list

С его помощью нужно раскомментировать строки, указывающие на источники пакетов universe и multiverse:

Deb http://archive.ubuntu.com/ubuntu/ edgy universe
deb http://us.archive.ubuntu.com/ubuntu/ edgy-backports main restricted universe multiverse

Если сомневаетесь - раскомментируйте все предложенные источники. Не забудьте закомментировать источник CD-ROM, с которого вы ставили систему, он будет первым:

#deb cdrom:/ edgy main restricted

# apt-get update
# apt-get dist-upgrade

Тут же можно сменить и ядро:

# apt-get install linux-386

Устанавливаем необходимые для дальнейшей работы пакеты (здесь я еще поставил пакет mc ради редактора mcedit - у каждого свои вкусы):

# apt-get install cryptsetup hashalot initramfs-tools

Система готова к следующему этапу.

Создание шифрованных разделов

Создание шифрованных разделов делится на следующие шаги:

  1. создание нового раздела на жестком диске
  2. создание на его основе шифрованного раздела
  3. инициализация LVM и "нарезка" необходимых разделов в шифрованном пространстве

Для начала загрузим в ядро необходимые для работы модули:

# modprobe dm_crypt
# modprobe aes_i586
# modprobe sha256

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

# /sbin/badblocks -c 10240 -s -w -t random -v /dev/sda2

Для особо секретных дисков можно заполнить пространство случайным "мусором":

# dd if=/dev/urandom of=/dev/sda2

Но для бытового применения всего этого, как правило, можно не делать, к тому же выполнение операции для больших дисков длится слишком долго.

Теперь создадим шифрованный раздел на основе /dev/sda2:

# cryptsetup -verify-passphrase -verbose -hash=sha256 -cipher=aes-cbc-essiv:sha256 -key-size=256 luksFormat /dev/sda2
# cryptsetup luksOpen /dev/sda2 pvcrypt

Следуйте указаниям на экране. Первая команда попросит вас два раза ввести пароль для шифрованного раздела (внимание: пароль должен вводиться в английской раскладке клавиатуры!). Вторая команда "отображает" содержимое шифрованного раздела в устройство /dev/mapper/pvcrypt. Нешифрованные данные (cleartext) будут отображены как раздел виртуального диска /dev/mapper/pvcrypt, в то время как физически они будут лежать в зашифрованном виде на /dev/sda2. Шифрование/дешифрование будет производиться ядром "на лету" с помощью драйвера device mapper (модуль ядра dm_crypt) и алгоритма AES (модуль ядра aes_i586).

Как показывает практика, такое прозрачное шифрование практически не сказывается на скорости работы с диском. Файлы копируются со скоростью до 30 Мб/с, как и в случае отсутствия шифрования.

# pvcreate /dev/mapper/pvcrypt
Physical volume "/dev/mapper/pvcrypt" successfully created
# vgcreate vgcrypt /dev/mapper/pvcrypt
Volume group "vgcrypt" successfully created
# lvcreate -n lvroot -L 10G vgcrypt
Logical volume "lvroot" created
# lvcreate -n lvswap -L 1G vgcrypt |
Logical volume "lvswap" created
# lvcreate -n lvhome -l 95G vgcrypt
Logical volume "lvhome" created

Таким образом мы создали для будущей системы три раздела:

/dev/mapper/vgcrypt-lvroot 10Gb /
/dev/mapper/vgcrypt-lvswap 1Gb swap
/dev/mapper/vgcrypt-lvhome 95Gb /home

# mkfs.reiserfs /dev/mapper/vgcrypt-lvroot
# mkfs.reiserfs /dev/mapper/vgcrypt-lvhome
# mkswap /dev/mapper/vgcrypt-lvswap

Разделы для будущей системы готовы.

Создание образа initrd

Для тех, кто не знаком с процедурой загрузки ядра Linux, я немного поясню, в чём суть. Первоначально ядро в качестве файловой системы загружает образ виртуального диска (RAM-диск) в котором содержатся необходимые драйверы и скрипты для загрузки основной файловой системы.

Этот образ /boot/initrd.img-2.6.17-10-server уже создан для ядра установленной системы. Нам необходимо его чуть-чуть переделать.

Добавляем в файл /etc/kernel-img.conf строчку

Dm_mod
dm_crypt
sha256
aes_i586

Создаем файл /etc/initramfs-tools/hooks/pvcrypt следующего содержания (этот скрипт будет исполнен во время создания образа initrd):

#!/bin/sh
PREREQ=""
prereqs() { echo "$PREREQ" }
case $1 in
prereqs)
prereqs
exit 0
;;
esac
if [ ! -x /sbin/cryptsetup ]; then exit 0 fi
. /usr/share/initramfs-tools/hook-functions
copy_exec /usr/bin/chvt /bin
copy_exec /sbin/cryptsetup /sbin

Создаём файл /etc/initramfs-tools/scripts/local-top/pvcrypt следующего содержания (этот скрипт тоже будет исполняться во время загрузки системы):

#!/bin/sh
PREREQ="udev"
prereqs() { echo "$PREREQ" }
case $1 in
prereqs)
prereqs
exit 0
;;
esac
modprobe -Qb dm_crypt
modprobe -Qb aes_i586
modprobe -Qb sha256
then
/bin/chvt 1
fi
echo "Cryptsetup operation."
/sbin/cryptsetup luksOpen /dev/sda2 pvcrypt
if grep -q splash /proc/cmdline;
then
/sbin/usplash -c & sleep 1
fi

/dev/sda2 при запуске команды /sbin/cryptsetup указывает на шифрованный раздел, который мы создали ранее (он может назваться и по другому, всё зависит от особенностей вашей системы), а pvcrypt на имя виртуального устройства в каталоге /dev/mapper/, на которое будет отображено расшифрованное (cleartext) содержимое шифрованного раздела.

Сделаем созданные нами скрипты исполняемыми:

#chmod +x /etc/initramfs-tools/hooks/pvcrypt
#chmod +x /etc/initramfs-tools/scripts/local-top/pvcrypt

И обновим образ RAM-диска initrd командой:

# update-initramfs -u ALL

Теперь настало время следующего этапа - тестирование.

Пробная перезагрузка

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

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

# ls -al /dev/mapper/
total 0
drwxr-xr-x 2 root root 180 2007-02-06 13:10 .
drwxr-xr-x 16 root root 13240 2007-02-06 13:10 ..
crw-rw-- 1 root root 10, 63 2007-02-06 13:09 control
brw-rw-- 1 root disk 254, 0 2007-02-06 13:09 pvcrypt
brw-rw-- 1 root disk 254, 4 2007-02-06 13:10 sda1
brw-rw-- 1 root disk 254, 5 2007-02-06 13:10 sda2
brw-rw-- 1 root disk 254, 3 2007-02-06 13:09 vgcrypt-lvhome
brw-rw-- 1 root disk 254, 1 2007-02-06 13:09 vgcrypt-lvroot
brw-rw-- 1 root disk 254, 2 2007-02-06 13:09 vgcrypt-lvswap

Перенос системы на шифрованные разделы

Теперь нам надо перенести систему с первого раздела на шифрованные области.

Для этого созданные шифрованные разделы (LVM) надо смонтировать и скопировать на них файлы с первого раздела.

# mkdir /mnt/root
# mount /dev/mapper/vgcrypt-lvroot /mnt/root
# mkdir /mnt/root/home
# mount /dev/mapper/vgcrypt-lvhome /mnt/root/home
# cp -ax / /mnt/root
# cp -rp /dev/* /mnt/root/dev/
# rm -rf /mnt/root/boot/*
# mount /dev/sda1 /mnt/root/boot/

Фактически в каталоге /mnt/root/ у нас теперь смонтированы все разделы новой, будущей системы. Все дальнейшие работы мы будем проводить именно в нём.

Подготовка к рестарту системы

После того как система перенесена на шифрованные разделы, первый раздел /dev/sda1 для новой системы будет загрузочным каталогом /boot.

Сперва нам необходимо отредактировать файл /mnt/root/etc/fstab (не забываем, что мы уже перенесли систему на новые разделы и нам уже необходимо редактировать файлы будущей системы). В нашем случае он может выглядеть следующим образом:

# /etc/fstab: static file system information.
#
#
proc /proc proc defaults 0 0
usbfs /proc/bus/usb usbfs devmode=0666 0 0
/dev/sda1 /boot ext3 defaults 0 0
/dev/mapper/vgcrypt-lvroot / reiserfs defaults 0 0
/dev/mapper/vgcrypt-lvhome /home reiserfs defaults 0 0
/dev/mapper/vgcrypt-lvswap none swap sw 0 0

Так как раздел /dev/sda1 становится каталогом /boot новой системы, но в данный момент времени он является корневым /, то необходимо скопировать все файлы из /boot в корневой каталог:

# cp -r /boot/* /

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

Теперь подготовим менеджер загрузки Grub.

Отредактируем файл /mnt/boot/grub/menu.lst так, чтобы в списке вариантов загрузки, первыми строчками были:

Title Ubuntu, kernel 2.6.17-10-server Default
root (hd0,0)
kernel /vmlinuz-2.6.17-10-server
root=/dev/mapper/vgcrypt-lvroot ro quiet splash
initrd /initrd.img-2.6.17-10-server
quiet
savedefault
boot

Здесь ключевой строчкой является параметр root=/dev/mapper/vgcrypt-lvroot, указывающий ядру, что корневым каталогом (root) в системе будет раздел /dev/mapper/vgcrypt-lvroot.

Не забывайте, что vmlinuz-2.6.17-10-server - файл ядра, которое будет загружаться.

Посмотреть версию текущего загруженного ядра можно командой:

# uname -r
2.6.17-10-server

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

В том же файле menu.lst еще необходимо найти строчку:

# kopt=root=/dev/sda1 ro

и поменять ее на:

# kopt=root=/dev/mapper/vgcrypt-lvroot ro

Внимание: эта строка должна остаться закомментированной!

Теперь при установке в систему новых ядер автоматически исполняемая команда update-grub будет назначать правильный параметр root= ядра.

Выполним команду:

# grub-install -root-directory=/mnt/root/ /dev/sda

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

Послесловие

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

Тут я могу дать только один совет: пользуйтесь tripwire или подобными программами. И не забывайте проверять целостность загрузочного раздела. Не мешает также позаботиться о сохранении данных разбивки LVM-разделов, чтобы в случае сбоя можно было попытаться восстановить данные.

Если боитесь забыть пароль, стоит создать специальный дополнительный ключ для расшифровки раздела.

Делается это так:

$ sudo dd if=/dev/random of=/path-to/keyfile bs=1 count=256
$ sudo cryptsetup luksAddKey /dev/sda2 /path-to/keyfile

Теперь можно сохранить keyfile, например, на USB-драйве, и даже если вы забудете пароль, информацию можно будет расшифровать с помощью этого ключевого файла. Однако наличие такого дополнительного ключа повышает риск того, что он однажды достанется злоумышленнику. Выбирать вам.

Шифрование в Windows

В Windows полное шифрование дисков возможно выполнить только с помощью стороннего софта. Примером такого софта является SafeGuard Easy .

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

Существует масса причин зашифровать данные на своем жестком диске, но расплатой за безопасность данных будет снижение скорости работы системы. Цель этой статьи - сравнить производительность при работе с диском, зашифрованным разными средствами.

Чтобы разница была более драматичной, мы выбрали не суперсовременную, а среднестатистическую машину. Обычный механический хард на 500 Гбайт, двухъядерный AMD на 2,2 ГГц, 4 гига оперативки, 64-битная Windows 7 SP 1. Никаких антивирусов и прочих программ во время теста запущено не будет, чтобы ничто не смогло повлиять на результаты.

Для оценки производительности я выбрал CrystalDiskMark. Что до тестируемых средств шифрования, то я остановился на таком списке: BitLocker, TrueCrypt, VeraCrypt, CipherShed, Symantec Endpoint Encryption и CyberSafe Top Secret.

BitLocker

Это стандартное средство шифрования дисков, встроенное в Microsoft Windows . Многие просто используют его, не устанавливая сторонних программ . Действительно, зачем, если все уже есть в системе? С одной стороны, правильно. С другой стороны, код закрыт, и нет уверенности, что в нем не оставили бэкдоров для ФБР и прочих интересующихся.

Шифрование диска осуществляется по алгоритму AES с длиной ключа 128 или 256 бит. Ключ при этом может храниться в Trusted Platform Module, на самом компьютере или на флешке.

Если используется TPM, то при загрузке компьютера ключ может быть получен сразу из него или после аутентификации. Авторизоваться можно при помощи ключа на флешке или введя PIN-код с клавиатуры. Комбинации этих методов дают множество вариантов для ограничения доступа: просто TPM, TPM и USB, TPM и PIN или все три сразу.

У BitLocker есть два неоспоримых преимущества: во-первых, им можно управлять через групповые политики; во-вторых, он шифрует тома, а не физические диски. Это позволяет зашифровать массив из нескольких дисков, чего не умеют делать некоторые другие средства шифрования. Также BitLocker поддерживает GUID Partition Table (GPT), чем не может похвастаться даже наиболее продвинутый форк «Трукрипта» VeraCrypt. Чтобы зашифровать с его помощью системный GPT-диск, придется сначала конвертировать в формат MBR. В случае с BitLocker это не требуется.

В целом, недостаток один - закрытые исходники. Если ты хранишь секреты от домочадцев, BitLocker отлично подойдет. Если же твой диск забит документами государственной важности, лучше подыскать что-то другое.

Можно ли расшифровать BitLocker и TrueCrypt

Если попросить Google, то он найдет интересную программу Elcomsoft Forensic Disk Decryptor, пригодную для расшифровки дисков BitLocker, TrueCrypt и PGP. В рамках этой статьи испытывать ее не стану, но поделюсь впечатлениями о другой утилите от Elcomsoft, а именно Advanced EFS Data Recovery. Она превосходно расшифровывала EFS-папки, но при условии, что пароль пользователя не был задан. Если задать пароль хоть 1234, программа оказывалась бессильной. Во всяком случае, расшифровать зашифрованную EFS-папку, принадлежащую пользователю с паролем 111, у меня не получилось. Думаю, с продуктом Forensic Disk Decryptor ситуация будет такой же.

TrueCrypt

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

Есть лишь крупицы информации, не позволяющие сложить пазл воедино. Так, в 2013 году начался сбор средств для проведения независимого аудита TrueCrypt. Причиной прослужила полученная от Эдварда Сноудена информация о намеренном ослаблении средств шифрования TrueCrypt . На аудит было собрано свыше 60 тысяч долларов. В начале апреля 2015 года работы были завершены, но никаких серьезных ошибок, уязвимостей или других существенных недостатков в архитектуре приложения выявлено не было.

Как только закончился аудит, TrueCrypt снова оказался в центре скандала. Специалисты компании ESET опубликовали отчет о том, что русскоязычная версия TrueCrypt 7.1a, загруженная с сайта truecrypt.ru, содержала малварь. Более того, сам сайт truecrypt.ru использовался как командный центр - с него отправлялись команды инфицированным компьютерам. В общем, будь бдителен и не скачивай программы откуда попало.

К преимуществам TrueCrypt можно отнести открытые исходники, надежность которых теперь подкреплена независимым аудитом, и поддержку динамических томов Windows . Недостатки: программа больше не развивается, и разработчики не успели реализовать поддержку UEFI/GPT. Но если цель - зашифровать один несистемный диск, то это неважно.

В отличие от BitLocker, где поддерживается только AES, в TrueCrypt есть еще Serpent и Twofish. Для генерации ключей шифрования, соли и ключа заголовка программа позволяет выбрать одну из трех хеш-функций: HMAC-RIPEMD-160, HMAC-Whirlpool, HMAC-SHA-512. Однако о TrueCrypt уже много чего было написано, так что не будем повторяться.

VeraCrypt

Наиболее продвинутый клон TrueCrypt. У него собственный формат, хотя есть возможность работы в режиме TrueCrypt, в котором поддерживаются зашифрованные и виртуальные диски в формате «Трукрипта». В отличие от CipherShed, VeraCrypt может быть установлена на один и тот же компьютер одновременно с TrueCrypt.

INFO

Самоустранившись, TrueCrypt оставил богатое наследие: у него множество форков, начиная с VeraCrypt, CipherShed и DiskCryptor.

В TrueCrypt используется 1000 итераций при генерации ключа, которым будет зашифрован системный раздел , а VeraCrypt использует 327 661 итерацию. Для стандартных (не системных) разделов VeraCrypt использует 655 331 итерацию для хеш-функции RIPEMD-160 и 500 000 итераций для SHA-2 и Whirlpool. Это делает зашифрованные разделы существенно более устойчивыми к атаке прямым перебором, но и значительно снижает производительность работы с таким разделом. Насколько значительно, мы скоро выясним.

Среди преимуществ VeraCrypt - открытый исходный код, а также собственный и более защищенный по сравнению с TrueCrypt формат виртуальных и зашифрованных дисков. Недостатки те же, что и в случае с прародителем, - отсутствие поддержки UEFI/GPT. Зашифровать системный GPT-диск по-прежнему нельзя, но разработчики уверяют, что работают над этой проблемой и скоро такое шифрование будет доступно. Вот только работают они над этим уже два года (с 2014-го), и когда будет релиз с поддержкой GPT и будет ли он вообще, пока не известно.

CipherShed

Еще один клон TrueCrypt. В отличие от VeraCrypt, он использует исходный формат TrueCrypt, поэтому можно ожидать, что его производительность будет близка к производительности TrueCrypt.

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

Symantec Endpoint Encryption

В 2010 году компания Symantec выкупила права на программу PGPdisk. В результате появились такие продукты, как PGP Desktop и, впоследствии, Endpoint Encryption. Именно ее мы и рассмотрим. Программа, конечно же, проприетарная, исходники закрыты, и одна лицензия стоит 64 евро. Зато тут есть поддержка GPT, но только начиная с Windows 8.

Другими словами, если нужна поддержка GPT и есть желание зашифровать системный раздел, то придется выбирать между двумя проприетарными решениями: BitLocker и Endpoint Encryption. Вряд ли, конечно, домашний пользователь будет устанавливать Endpoint Encryption. Проблема в том, что для этого требуется Symantec Drive Encryption, для установки которого нужны агент и сервер управления Symantec Endpoint Encryption (SEE), а сервер хочет поставить еще и IIS 6.0. Не многовато ли всякого добра ради одной программы для шифрования диска? Мы прошли через все это только ради того, чтобы замерить производительность.

Момент истины

Итак, приступаем к самому интересному, а именно к тестированию. Первым делом нужно проверить производительность диска без шифрования. Нашей «жертвой» будет раздел жесткого диска (обычного, не SSD) размером 28 Гбайт, отформатированный как NTFS.

Открываем CrystalDiskMark, выбираем количество проходов, размер временного файла (во всех тестах будем использовать 1 Гбпйт) и сам диск. Стоит отметить, что количество проходов практически не влияет на результаты. На первом скриншоте показаны результаты измерения производительности диска без шифрования с числом проходов 5, на втором - с числом проходов 3. Как видишь, результаты практически идентичны, поэтому остановимся на трех проходах.


Результаты CrystalDiskMark нужно трактовать так:

  • Seq Q32T1 - тест последовательной записи / последовательного чтения, количество очередей - 32, потоков - 1;
  • 4K Q32T1 - тест случайной записи / случайного чтения (размер блока 4 Кбайт, количество очередей - 32, потоков - 1);
  • Seq - тест последовательной записи / последовательного чтения;
  • 4K - тест случайной записи / случайного чтения (размер блока 4 Кбайт);

Начнем с BitLocker. На шифрование раздела размером 28 Гбайт было потрачено 19 минут.

Продолжение статьи доступно только подписчикам

Вариант 1. Оформи подписку на «Хакер», чтобы читать все статьи на сайте

Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта, включая эту статью. Мы принимаем оплату банковскими картами , электронными деньгами и переводами со счетов мобильных операторов.

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

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


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


Однако у описанных способов есть один крайне существенный недостаток. Они оба работают на уровне операционной системы и их можно относительно легко обойти если иметь немного времени и физический доступ к компьютеру (например, загрузившись с USB-флешки можно сбросить административный пароль или изменить файловые разрешения). Полную уверенность в безопасности и конфиденциальности данных можно получить только если задействовать достижения криптографии и надежно их. Ниже мы рассмотрим два способа подобной защиты.

Первым рассматриваемым сегодня способом будет встроенная криптозащита от Microsoft. Шифрование, названное BitLocker, впервые появилось в Windows 8. Обезопасить с его помощью отдельную папку или файл не получится, доступно только шифрование всего диска целиком. Из этого в частности вытекает тот факт, что шифровать системный диск нельзя (система не сможет загрузиться), хранить важные данные в системных библиотеках типа «Мои документы» также нельзя (по умолчанию они располагаются на системном разделе).
Чтобы включить встроенное шифрование, проделайте следующее:

DiskCryptor

Второй рассматриваемой сегодня криптографической утилитой является DiskCryptor - бесплатное решение с открытым исходным кодом . Чтобы использовать его, воспользуйтесь следующей инструкцией:

Безусловным плюсом этой утилиты по сравнению с механизмом BitLocker является то, что использовать ее можно на системах, вышедших до Windows 8 (поддерживается даже снятая с поддержки Windows XP). Но DiskCryptor имеет и несколько существенных минусов:

  • не существует способов восстановления доступа к зашифрованной информации (если забыли пароль, то гарантированно потеряли свои данные);
  • поддерживается только разблокировка с помощью пароля, использование смарткарт или биометрических датчиков невозможно;
  • пожалуй самый большой недостаток использования DiskCryptor в том, что злоумышленник с административным доступом к системе сможет стандартными средствами отформатировать диск. Да, он доступа к данным не получит, но и вы их потеряете.

Резюмируя могу сказать, что если на компьютере установлена ОС начиная с Windows 8, то лучше использовать встроенный функционал.

Эта документация перемещена в архив и не поддерживается.

Общие сведения о шифровании диска BitLocker

Назначение: Windows Server 2008, Windows Server 2008 R2, Windows Vista

Шифрование диска BitLocker - это возможность защиты данных, доступная в Windows Server 2008 R2 и в некоторых выпусках Windows 7. Интеграция BitLocker в операционную систему противодействует угрозам кражи или уязвимости данных, защищая от потери, кражи или неправильного списания компьютеров.

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

Шифрование BitLocker обеспечивает максимальную защиту при использовании с доверенным платформенным модулем (TPM) версии 1.2. Модуль TPM - это аппаратный компонент, устанавливаемый во многие современные компьютеры их производителями. Он работает вместе с шифрованием BitLocker, помогая защитить данные пользователя и гарантируя, что компьютер не был подменен, пока система была выключена.

На компьютерах без установленного доверенного платформенного модуля версии 1.2 шифрование BitLocker можно, тем не менее, использовать для шифрования диска операционной системы Windows. Но эта реализация потребует от пользователя вставлять USB-ключ запуска, чтобы запустить компьютер или вывести его из спящего режима, и не обеспечивает проверку целостности системы перед запуском, предоставляемую шифрованием BitLocker с доверенным платформенным модулем.

В дополнение к доверенному платформенному модулю, шифрование BitLocker предоставляет возможность блокировки обычного процесса запуска, пока пользователь не введет персональный идентификационный номер (ПИН) или не вставит съемное устройство, например USB-устройство флэш-памяти, содержащее ключ запуска. Эти дополнительные меры безопасности обеспечивают многофакторную проверку подлинности и гарантию того, что компьютер не будет запущен или выведен из спящего режима, пока не будет предоставлен правильный PIN или ключ запуска.

Проверка целостности системы

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

Шифрование BitLocker помогает гарантировать целостность процесса запуска с помощью следующих действий.

  • Обеспечение способа проверки целостности корневого файла и файлов, используемых на ранних этапах загрузки, и гарантирование отсутствия враждебных изменений в этих файлах, которые могли быть выполнены, например, вирусами загрузочных секторов или средствами редактирования компонентов загрузки.
  • Улучшенная защита, противостоящая программным атакам, когда компьютер находится вне сети. Любое альтернативное программное обеспечение, которое может запустить систему, не получит доступ к ключам шифрования для диска операционной системы Windows.
  • Блокировка системы при замене файла. Если любой из контролируемых файлов был заменен, система не запустится. Это предупредит пользователя о замене, так как система не сможет быть запущена в обычном порядке. В случае блокировки системы шифрование BitLocker обеспечит простой процесс восстановления.

    Требования к оборудованию, микропрограммам и программному обеспечению

    Для использования BitLocker компьютер должен удовлетворять определенным требованиям.

    • Чтобы шифрование BitLocker могло использовать возможность проверки целостности системы, предоставляемую доверенным платформенным модулей, на компьютере должен быть установлен модуль версии 1.2. Если на компьютере не установлен доверенный платформенный модуль, то при включении шифрования BitLocker потребуется сохранить ключ запуска на съемном устройстве, например на USB-устройстве флэш-памяти.
    • На компьютере с модулем TPM также должна быть установлена BIOS, соответствующая спецификациям группы Trusted Computing Group (TCG). BIOS создает цепочку доверий для действий перед загрузкой операционной системы и должна включать поддержку статического корневого объекта измерения уровня доверия, определенного TCG. Для компьютера без модуля TPM соответствие BIOS спецификациям TCG не требуется.
    • BIOS системы (для компьютеров как с доверенным платформенным модулем, так и без него) должна поддерживать класс запоминающих устройств USB , включая чтение небольших файлов с USB-устройства флэш-памяти в среде до запуска операционной системы. Для получения дополнительных сведений о USB см. спецификации запоминающих устройств USB и команд запоминающих устройств UFI на веб-сайте USB (http://go.microsoft.com/fwlink/?LinkId=83120).
    • Жесткий диск должен быть разбит хотя бы на два диска.
      • Диск операционной системы (или загрузочный диск) содержит операционную систему и файлы, необходимые для ее работы, он должен быть отформатирован в файловой системе NTFS .
      • Системный диск содержит файлы, необходимые для загрузки Windows после того, как BIOS загрузит платформу. Для этого диска шифрование BitLocker не включается. Для работы шифрования BitLocker системный диск не должен быть зашифрован, он не должен являться томом операционной системы и должен быть отформатирован в файловой системе NTFS. Емкость системного диска должна быть не менее 1,5 гигабайт (ГБ).

    Установка и инициализация

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

    В любой момент времени после установки и первоначальной настройки операционной системы администратор может использовать мастер настройки BitLocker для инициализации шифрования BitLocker. Процесс инициализации состоит из двух этапов:

    1. На компьютерах с доверенным платформенным модулем инициализируйте последний, используя мастер установки доверенного платформенного модуля, компонент панели управления Шифрование диска BitLocker , или выполнив скрипт, предназначенный для инициализации модуля.
    2. Настройте шифрование BitLocker. Откройте из панели управления мастер настройки шифрования BitLocker, который проведет через процесс настройки и предоставит возможность настроить дополнительные параметры проверки подлинности.

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

    Подробные сведения о настройке и развертывании шифрования BitLocker см. в пошаговом руководстве по шифрованию диска Windows BitLocker (http://go.microsoft.com/fwlink/?LinkID=140225).

    Корпоративная реализация

    Шифрование BitLocker может использовать существующую инфраструктуру доменных служб Active Directory (AD DS) организации для удаленного хранения ключей восстановления. Шифрование BitLocker предоставляет мастер для настройки и управления, а также возможности расширения и управления с помощью интерфейса WMI с поддержкой сценариев. Кроме того, шифрование BitLocker предоставляет консоль восстановления, встроенную в процесс загрузки, чтобы позволить пользователю или персоналу службы поддержки восстановить доступ к заблокированному компьютеру.

    Для получения дополнительных сведений о написании сценариев для шифрования BitLocker см. Win32_EncryptableVolume (http://go.microsoft.com/fwlink/?LinkId=85983).

    Списание и повторное использование компьютера

    Аннотация

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

    Введение

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

    Мы покажем ряд атак, которые, используя эффекты остаточной намагниченности DRAM, позволят нам восстановить хранимые в памяти ключи шифрования. Это представляет собой реальную угрозу для пользователей ноутбуков, которые полагаются на системы шифрования жёсткого диска . Ведь в случае, если злоумышленник похитит ноутбук, в тот момент, когда зашифрованный диск подключён, он сможет провести одну из наших атак для доступа к содержимому, даже если сам ноутбук заблокирован или находится в спящем режиме. Мы это продемонстрируем, успешно атакуя несколько популярных систем шифрования, таких как – BitLocker, TrueCrypt и FileVault. Эти атаки должны быть успешны и в отношении других систем шифрования.

    Хотя мы сосредоточили наши усилия на системах шифрования жёстких дисков, в случае физического доступа к компьютеру злоумышленника, любая важная информация хранящаяся в оперативной памяти может стать объектом для атаки. Вероятно, и многие другие системы безопасности уязвимы. Например, мы обнаружили, что Mac OS X оставляет пароли от учётных записей в памяти, откуда мы смоги их извлечь, так же мы совершили атаки на получение закрытых RSA ключей веб-сервера Apache.

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

    Атаки на зашифрованные диски

    Шифрование жёстких дисков это известный способ защиты против хищения данных. Многие полагают, что системы шифрования жёстких дисков позволят защитить их данные, даже в том случае, если злоумышленник получил физических доступ к компьютеру (собственно для этого они и нужны, прим. ред.). Закон штата Калифорния, принятый в 2002 году, обязывает сообщать о возможных случаях раскрытия персональных данных, только в том случае, если данные не были зашифрованы, т.к. считается, что шифрование данных - это достаточная защитная мера. Хотя закон не описывает никаких конкретных технических решений , многие эксперты рекомендуют использовать системы шифрования жёстких дисков или разделов, что будет считаться достаточными мерами для защиты. Результаты нашего исследования показали, что вера в шифрование дисков необоснованна. Атакующий, далеко не самой высокой квалификации, может обойти многие широко используемые системы шифрования, в случае если ноутбук с данными похищен, в то время когда он был включён или находился в спящем режиме. И данные на ноутбуке могут быть прочитаны даже в том случае, когда они находятся на зашифрованном диске, поэтому использование систем шифрования жёстких дисков не является достаточной мерой.

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

    BitLocker

    BitLocker – система, входящая в состав некоторых версий ОС Windows Vista. Она функционирует как драйвер работающий между файловой системой и драйвером жёсткого диска, шифруя и расшифровывая по требованию выбранные секторы. Используемые для шифрования ключи находятся в оперативной памяти до тех пор, пока зашифрованный диск подмантирован.

    Для шифрования каждого сектора жёсткого диска BitLocker использует одну и ту же пару ключей созданных алгоритмом AES: ключ шифрования сектора и ключ шифрования, работающий в режиме сцепления зашифрованных блоков (CBC). Эти два ключа в свою очередь зашифрованы мастер ключом. Чтобы зашифровать сектор, проводится процедура двоичного сложения открытого текста с сеансовым ключом, созданным шифрованием байта смещения сектора ключом шифрования сектора. Потом, полученные данные обрабатываются двумя смешивающими функциями, которые используют разработанный Microsoft алгоритм Elephant. Эти безключевые функции используются с целью увеличения количества изменений всех битов шифра и, соответственно, увеличения неопределённости зашифрованных данных сектора. На последнем этапе, данные шифруются алгоритмом AES в режиме CBC, с использованием соответствующего ключа шифрования. Вектор инициализации определяется путём шифрования байта смещения сектора ключом шифрования, используемом в режиме CBC.

    Нами была реализована полностью автоматизированная демонстрационная атака названная BitUnlocker. При этом используется внешний USB диск с ОС Linux и модифицированным загрузчиком на основе SYSLINUX и драйвер FUSE позволяющий подключить зашифрованные BitLocker диски в ОС Linux. На тестовом компьютере с работающей Windows Vista отключалось питание, подключался USB жёсткий диск , и с него происходила загрузка. После этого BitUnlocker автоматически делал дамп оперативной памяти на внешний диск , при помощи программы keyfind осуществлял поиск возможных ключей, опробовал все подходящие варианты (пары ключа шифрования сектора и ключа режима CBC), и в случае удачи подключал зашифрованный диск. Как только диск подключался, появлялась возможность с ним работать как с любым другим диском. На современном ноутбуке с 2 гигабайтами оперативной памяти процесс занимал около 25 минут.

    Примечательно, что данную атаку стало возможным провести без реверс-инжиниринга какого-либо ПО. В документации Microsoft система BitLocker описана в достаточной степени, для понимания роли ключа шифрования сектора и ключа режима CBC и создания своей программы реализующей весь процесс.

    Основное отличие BitLocker от других программ этого класса – это способ хранения ключей при отключённом зашифрованном диске. По умолчанию, в базовом режиме, BitLocker защищает мастер ключ только при помощи TPM модуля, который существует на многих современных ПК. Данный способ, который, по всей видимости, широко используется, особенно уязвим к нашей атаке, поскольку он позволяет получить ключи шифрования, даже если компьютер был выключен в течение долгого времени, поскольку, когда ПК загружается, ключи автоматически подгружаются в оперативную память (до появления окна входа в систему) без ввода каких-либо аутентификационных данных.

    По всей видимости, специалисты Microsoft знакомы с данной проблемой и поэтому рекомендуют настроить BitLocker в улучшенный режим, где защита ключей осуществляется, не только при помощи TPM, но и паролем или ключом на внешнем USB носителе . Но, даже в таком режиме, система уязвима, если злоумышленник получит физический доступ к ПК в тот момент, когда он работает (он даже может быть заблокирован или находиться в спящем режиме, (состояния - просто выключен или hibernate в это случае считаются не подверженными данной атаке).

    FileVault

    Система FileVault от Apple была частично исследована и проведён реверс-инжиниринг. В Mac OS X 10.4 FileVault использует 128-битный ключ AES в режиме CBC. При введении пароля пользователя, расшифровывается заголовок, содержащий ключ AES и второй ключ K2, используемый для расчёта векторов инициализации. Вектор инициализации для I-того блока диска рассчитывается как HMAC-SHA1 K2(I).

    Мы использовали нашу программу EFI для получения образов оперативной памяти для получения данных с компьютера Макинтош (базирующимся на процессоре Intel) с подключённым диском, зашифрованным FileVault. После этого программа keyfind безошибочно автоматически находила AES ключи FileVault.

    Без вектора инициализации, но с полученным AES ключом появляется возможность расшифровать 4080 из 4096 байт каждого блока диска (всё кроме первого AES блока). Мы убедились, что инициализационный вектор так же находится в дампе. Предполагая, что данные не успели исказиться, атакующий может определить вектор, поочерёдно пробуя все 160-битовые строки в дампе и проверяя, могут ли они образовать возможный открытый текст , при их бинарном сложении с расшифрованной первой частью блока. Вместе, используя программы типа vilefault, AES ключи и инициализационный вектор позволяют полностью расшифровывать зашифрованный диск.

    В процессе исследования FileVault, мы обнаружили, что Mac OS X 10.4 и 10.5 оставляют множественные копии пароля пользователя в памяти, где они уязвимы к данной атаке. Пароли учётных записей часто используются для защиты ключей, которые в свою очередь, могу использоваться для защиты ключевых фраз зашифрованных FileVault дисков.

    TrueCrypt

    TrueCrypt – популярная система шифрования с открытым кодом , работающая на ОС Windows, MacOS и Linux. Она поддерживает множество алгоритмов, включая AES, Serpent и Twofish. В 4-ой версии, все алгоритмы работали в режиме LRW; в текущей 5-ой версии, они используют режим XTS. TrueCrypt хранит ключ шифрования и tweak ключ в заголовке раздела на каждом диске, который зашифрован другим ключом получающимся из вводимого пользователем пароля.

    Мы тестировали TrueCrypt 4.3a и 5.0a работающие под ОС Linux. Мы подключили диск, зашифрованный при помощи 256-битного AES ключа, потом отключили питание и использовали для загрузки собственное ПО для дампа памяти. В обоих случаях, keyfind обнаружила 256-битный неповреждённый ключ шифрования. Так же, в случае TrueCrypt 5.0.a, keyfind смогла восстановить tweak ключ режима XTS.

    Чтобы расшифровать диски созданные TrueCrypt 4, необходим tweak ключ режима LRW. Мы обнаружили, что система хранит его в четырёх словах перед ключевым расписанием ключа AES. В нашем дампе, LRW ключ не был искажён. (В случае появления ошибок, мы все равно смогли бы восстановить ключ).

    Dm-crypt

    Ядро Linux, начиная с версии 2.6, включает в себя встроенную поддержку dm-crypt – подсистемы шифрования дисков. Dm-crypt использует множество алгоритмов и режимов, но, по умолчанию, она использует 128-битный шифр AES в режиме CBC с инициализационными векторами создаваемыми не на основе ключевой информации.

    Мы тестировали созданный dm-crypt раздел, используя LUKS (Linux Unified Key Setup) ветку утилиты cryptsetup и ядро 2.6.20. Диск был зашифрован при помощи AES в режиме CBC. Мы ненадолго отключили питание и, используя модифицированный PXE загрузчик, сделали дамп памяти. Программа keyfind обнаружила корректный 128-битный AES ключ, который и был восстановлен без каких-либо ошибок. После его восстановления, злоумышленник может расшифровать и подключить раздел зашифрованный dm-crypt, модифицируя утилиту cryptsetup таким образом, чтобы она воспринимала ключи в необходимом формате.

    Способы защиты и их ограничения

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

    Перезапись памяти

    Прежде всего, надо по-возможности избегать хранения ключей в ОЗУ. Необходимо перезаписывать ключевую информацию, если она больше не используется, и предотвращать копирование данных в файлы подкачки. Память должна очищаться заблаговременно средствами ОС или дополнительных библиотек. Естественно, эти меры не защитят используемые в данный момент ключи, поскольку они должны храниться в памяти, например такие ключи как, используемые для шифрованных дисков или на защищённых веб серверах.

    Так же, ОЗУ должна очищаться в процессе загрузки. Некоторые ПК могут быть настроены таким образом, чтобы очищать ОЗУ при загрузке при помощи очищающего POST запроса (Power-on Self-Test) до того как загружать ОС. Если злоумышленник не сможет предотвратить выполнение данного запроса , то на данном ПК у него не будет возможности сделать дамп памяти с важной информацией. Но, у него всё ещё остаётся возможность вытащить микросхемы ОЗУ и вставить их в другой ПК с необходимыми ему настройками BIOS.

    Ограничение загрузки из сети или со съёмных носителей

    Многие наши атаки были реализованы с использованием загрузки по сети или со съёмного носителя . ПК должен быть настроен так, чтобы требовать пароль администратора для загрузки с этих источников. Но, необходимо отметить, что даже если система настроена на загрузку только с основного жёсткого диска, атакующий может сменить сам жёсткий диск, или во многих случаях, сбросить NVRAM компьютера для отката на первоначальные настройки BIOS.

    Безопасный спящий режим

    Результаты исследования показали, что простое блокирование рабочего стола ПК (т.е ОС продолжает работать, но, для того, чтобы с ней начать взаимодействие необходим ввод пароля) не защищает содержимое ОЗУ. Спящий режим не эффективен и в том случае, если ПК блокируется при возврате из спящего режима, поскольку злоумышленник может активировать возврат из спящего режима, после чего перезагрузить ноутбук и сделать дамп памяти. Режим hibernate (содержимое ОЗУ копируется на жёсткий диск) так же не поможет, кроме случаев использования ключевой информации на отчуждаемых носителях для восстановления нормального функционирования.

    В большинстве систем шифрования жёстких дисков, пользователи могут защититься выключением ПК. (Система Bitlocker в базовом режиме работы TPM модуля остаётся уязвимой, поскольку диск будет подключен автоматически, когда ПК будет включён). Содержимое памяти может сохраняться в течение короткого периода после отключения, поэтому рекомендуется понаблюдать за своей рабочей станцией ещё в течение пары минут. Несмотря на свою эффективность, данная мера крайне неудобна в связи с долгой загрузкой рабочих станций.

    Переход в спящий режим можно обезопасить следующими способами: требовать пароль или иной другой секрет чтобы «разбудить» рабочую станцию и шифровать содержимое памяти ключом производным от этого пароля. Пароль должен быть стойким, так как злоумышленник может сделать дамп памяти и после чего попробовать подобрать пароль перебором. Если же шифрование всей памяти невозможно, необходимо шифровать только те области, которые содержат ключевую информацию. Некоторые системы могут быть настроены таким образом, чтобы переходить в такой тип защищённого спящего режима, хотя это обычно и не является настройкой по умолчанию.

    Отказ от предварительных вычислений

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

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

    Расширение ключей

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

    На практике, представьте, что у нас есть 256-битный AES ключ K, который в данный момент не используется, но понадобится позднее. Мы не можем перезаписать его, но мы хотим сделать его стойким к попыткам восстановления. Один из способов добиться этого – это выделить большую B-битную область данных, заполнить её случайными данными R, после чего хранить в памяти результат следующего преобразования K+H(R) (суммирование двоичное, прим. ред.), где H – это хэш функция, например SHA-256.

    Теперь представьте, что электричество было отключено, это приведёт к тому, что d бит в данной области будут изменены. Если хэш функция стойкая, при попытке восстановления ключа K, злоумышленник может рассчитывать только на то, что он сможет угадать какие биты области B были изменены из приблизительно половины, которые могли изменится. Если d бит были изменены, злоумышленнику придётся провести поиск области размером (B/2+d)/d чтобы найти корректные значения R и уже после этого восстановить ключ K. Если область B велика, такой поиск может быть очень долог, даже если d относительно мала.

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

    Физическая защита

    Некоторые из наших атак основывались на наличии физического доступа к микросхемам памяти. Такие атаки могут быть предотвращены физической защитой памяти. Например, модули памяти находиться в закрытом корпусе ПК, или залиты эпоксидным клеем, чтобы предотвратить попытки их извлечения или доступа к ним. Так же, можно реализовать затирание памяти как ответную реакцию на низкие температуры или попытки открыть корпус. Такой способ потребует установки датчиков с независимой системой питания. Многие из таких способов связаны с аппаратурой, защищённой от несанкционированного вмешательства (например, сопроцессор IBM 4758) и могут сильно повысить стоимость рабочей станции . С другой стороны, использование памяти, припаянной к материнской плате , обойдётся гораздо дешевле.

    Изменение архитектуры

    Можно изменить архитектуру ПК. Что невозможно для уже используемых ПК, зато позволит обезопасить новые.

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

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

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

    Доверенные вычисления

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

    Используемые TPM модули не реализуют полное шифрование. Вместо этого, они наблюдают за процессом загрузки для принятия решения о том, безопасно ли загружать ключ в ОЗУ или нет. Если ПО необходимо использовать ключ, то можно реализовать следующую технологию: ключ, в пригодной для использования форме не будет храниться в ОЗУ, до тех пор пока процесс загрузки не пройдёт по ожидаемому сценарию. Но, как только ключ оказывается в оперативной памяти – он сразу становиться мишенью для наших атак. TPM модули могут предотвратить загрузку ключа в память, но они не предотвращают его считывание из памяти.

    Выводы

    Вопреки популярному мнению, модули DRAM в отключённом состоянии хранят данные в течение относительно долгого времени. Наши эксперименты показали, что данное явление позволяет реализовать целый класс атак, которые позволяют получить важные данные, такие как ключи шифрования из оперативной памяти, несмотря на попытки ОС защитить её содержимое. Описанные нами атаки реализуемы на практике, и наши примеры атак на популярные системы шифрования доказывают это.

    Но и другие виды ПО также уязвимы. Системы управления цифровыми правами (DRM) часто используют симметричные ключи, хранящиеся в памяти, и их так же можно получить, используя описанные методы. Как мы показали, веб-сервера с поддержкой SSL тоже уязвимы, поскольку они хранят в памяти закрытые ключи необходимые для создания SSL сеансов. Наши способы поиска ключевой информации, скорее всего, будут эффективны для поиска паролей, номеров счетов и любой другой важной информации , хранящейся в ОЗУ.

    Похоже что нет простого способа устранить найденные уязвимости. Изменение ПО скорее всего не будет эффективным; аппаратные изменения помогут, но временные и ресурсные затраты будут велики; технология «доверенных вычислений» в её сегодняшней форме так же мало эффективна, поскольку она не может защитить ключи находящиеся в памяти.

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

    В итоге, возможно, придётся рассматривать DRAM память как не доверенную компоненту современного ПК, и избегать обработки важной конфиденциальной информации


Автор: Nitish Tiwari
Дата публикации: 04 febriary 2015
Перевод: Н.Ромоданов
Дата перевода: март 2015 г.

TrueCrypt больше не поддерживается, но dm-crypt и LUKS - отличный вариант с открытым исходным кодом, позволяющий шифровать и использовать шифрованные данные.

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

В мае этого года остановилась разработка приложения TrueCrypt, известного инструментального средства с открытым исходным кодом, предназначенного для шифрования дисков. Как многие из вас знают, это был один из весьма надежных инструментов, предназначенных для шифрования дисков. Прискорбно видеть исчезновение инструмента такого калибра, но величие мира с открытым исходным кодом таково, что есть несколько других инструментов с открытым исходным кодом, которые помогут вам достичь безопасности с помощью шифрования дисков, у которых, к тому же, есть много конфигурационных настроек. Мы рассмотрим два из них - dm-crypt и LUKS - в качестве альтернативы TrueCrypt для платформы Linux. Давайте начнем с краткого рассмотрения dm-crypt, а затем - LUKS.

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

Ресурсы

Шаг 01: Рассматриваем Dm-crypt

Название приложения dm-crypt является сокращением от device mapper- crypt (шифрование при отображении устройства). Как следует из названия, оно базируется на отображении устройств — фреймворке ядра Linux, предназначенном для отображения блочных устройств на виртуальные блочные устройства более высокого уровня. При отображении устройств можно пользоваться несколькими функциями ядра, такими как dm-cache (создает гибридные тома), dm-verity (предназначена для проверки целостности блоков, является частью Chrome OS) и также очень популярным Docker. Для криптографических целей в dm-crypt применяется фреймворк ядра Linux Crypto API.

Итак, если подвести итог, то приложение dm-crypt является подсистемой шифрования на уровне ядра, предлагающее прозрачное шифрование диска: это означает, что файлы доступными сразу после монтирования диска - для конечного пользователя нет видимой задержки. Чтобы шифровать с использованием dm-crypt вы можете просто указать один из симметричных шифров, режим шифрования, ключ (любого допустимого размера), режим генерации IV, а затем в /dev создать новое блочное устройство. Теперь при любой записи на это устройство будет происходить шифрование, а при чтении — расшифровка. Вы можете как и обычно смонтировать на этом устройстве файловую систему, либо можете использовать устройство dm-crypt для создания других конструкций, таких как RAID или том LVM. Таблица соответствия для dm-crypt задается следующим образом:

Здесь значение start-sector (начальный сектор), как правило, равно значению 0, значение size (размер) равно размеру устройства, указываемую в секторах, а target name является именем, которое вы хотите присвоить зашифрованному устройству. Таблица целевого отображения target-mapping table состоит из следующих разделов:

[<#opt_params> ]

Шаг 02: Рассматриваем LUKS

Как мы уже видели на предыдущем шаге, приложение dm-crypt может самостоятельно шифровать / расшифровывать данные. Но у него есть несколько недостатков - если приложением dm-crypt пользоваться непосредственно, то оно не будет создавать на диске метаданные, и это может стать серьезной проблемой в случае, если вы хотите обеспечить совместимость между различными дистрибутивами Linux. Кроме того, приложение dm-crypt не поддерживает использование несколько ключей, тогда как в реальных ситуация очень важно пользоваться несколькими ключами.

Именно по этим причинам на свет появилась методика LUKS (Linux Unified Key Setup — Унифицированная настройка ключей в Linux). LUKS является в Linux стандартом шифрования жестких дисков и стандартизация позволяет обеспечить совместимость различных дистрибутивов. Также поддерживается использование нескольких ключей и парольных фраз. В рамках такой стандартизации к зашифрованным данным добавляется заголовок LUKS и в этом заголовке присутствует вся информация, необходимая для настройки. Когда есть такой заголовок с данными, то пользователи могут легко перейти на любой другой дистрибутив. Сейчас в проекте dm-crypt рекомендуется использовать LUKS в качестве предпочтительного способа настройки шифрования диска. Давайте рассмотрим, как установить утилиту cryptsetup и как ее использовать для создания томов на основе LUKS.

Шаг 03: Установка

Функциональные возможности уровня ядра, которые применяются в dm-crypt, уже есть во всех дистрибутивах Linux; нам нужно к ним только интерфейс. Мы будем пользоваться утилитой cryptsetup, с помощью которой можно создавать тома с использованием dm-crypt, стандарта LUKS, а также старого и доброго приложения TrueCrypt. Для того, чтобы установить cryptsetup на дистрибутивах Debian / Ubuntu, вы можете воспользоваться следующими командами:

$ sudo apt-get update $ sudo apt-get install cryptsetup

Первая команда синхронизирует индексные файлы ракета с содержимым их репозиториев: она получает информацию о последних версиях всех доступных пакетов. Вторая команда загрузит и установит на ваш компьютер пакет cryptsetup. Если вы используете дистрибутив RHEL/Fedora/CentOS, то для установки утилиты cryptsetup вы можете воспользоваться командой yum.

$ yum install cryptsetup-luks

Шаг 04: Создание целевого файла

Теперь, когда утилита cryptsetup успешно установлена, мы должны создать целевой файл, в котором будет храниться контейнер LUKS. Хотя есть много способов создания такого файла, при его создании необходимо выполнить ряд условий:

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

В создании файла, который будет удовлетворять вышеуказанным условиям, нам может помочь команда dd, хотя она и будет работать сравнительно медленно. Просто используйте ее вместе с файлом специального устройства /dev/random, указанным в качестве входных данных, и целевого файла, который должен быть указан в качестве выходных данных. Пример команды выглядит следующим образом:

$ dd if=/dev/random of=/home/nitish/basefile bs=1M count=128

В результате в каталоге /home/nitish будет создан файл с именем basefile, имеющий размер в 128 МБ. Однако, учтите, что на выполнение этой команды может потребоваться достаточно большое время; в системе, которой пользовался наш эксперт, на это потребовался час времени.

Шаг 05: Создаем dm-crypt LUKS

После того, как вы создали целевой файл, в этом файле необходимо создать раздел LUKS. Этот раздел служит в качестве основного слоя, на базе которого строится все шифрование данных. Кроме этого, в заголовке этого раздела (LUKS header) содержится вся информация, требуемая для совместимости с другими устройствами. Чтобы создать раздел LUKS применяется команда cryptsetup:

$ cryptsetup -y luksFormat /home/nitish/basefile

После того, как вы согласитесь с тем, что данные, находящиеся внутри файла basefile, будут безвозвратно удалены, введете парольную фразу, а затем — ее подтверждение, будет создан раздел LUKS. Вы можете проверить это с помощью следующей команды file:

$ file basefile

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

Шаг 06: Создаем и монтируем файловую систему

Контейнер LUKS, который мы создали на предыдущем шаге, теперь доступен в виде файла. В нашем примере, это /home/nitish/basefile. Утилита cryptsetup позволяет открывать контейнер LUKS как независимое устройство. Чтобы сделать это, сначала отобразите файл контейнера на имя устройства, а затем смонтируйте устройство. Команда, осуществляющая отображение, выглядит следующим образом:

После того как вы успешно введете парольную фразы, созданную на предыдущем шаге, контейнер LUKS будет отображен на имя volume1. Фактически происходит открытие файла как локального устройства типа loopback, так что остальная часть системы теперь может обрабатывать файл, как если бы это было реальное устройство.

Шаг 07: Файловая система - продолжение

Файл контейнера LUKS теперь доступен в системе в виде обычного устройства. Прежде, чем мы сможем использовать его для обычных операций, мы должны его отформатировать и создать на нем файловую систему. Вы можете пользоваться любой файловой системой, которая поддерживается в вашей системе. В моем примере, мы использовали ext4, поскольку это самая новая файловая система для систем Linux.

$ mkfs.ext4 -j /dev/mapper/volume1

После того, как устройство будет успешно отформатировано, следующим шагом будет его монтирование. Сначала вы должны создать точку монтирования, предпочтительно в /mnt (исходя из здравого смысла).

$ mkdir /mnt/files

Теперь выполняем монтирование:

Для перекрестной проверки воспользуйтесь командой df –h - вы в конце списка смонтированные устройств увидите устройство "/dev/mapper/volume1". Видно, что заголовок LUKS уже занимает в устройстве уже некоторое место.

Благодаря этому шагу, вы теперь можете использовать устройство LUKS с файловой системой ext4. Просто используйте это устройство для хранения файлов - все, что вы будет записывать на это устройство, будет шифроваться, а все, что вы будете читать с него, будет расшифровано и показано вам.

Шаг 08: Использование шифруемого диска

Мы выполнили несколько шагов для того, чтобы достичь этого результата, и если вам не очень понятно, как все это работает, вы, скорее всего, запутаетесь в том, что нужно сделать только один раз (требуется для установки), и в том, что нужно делать регулярно при использовании шифрования. Давайте рассмотрим следующий сценарий: вы успешно выполнили все описанные выше шаги, а затем выключили компьютер. На следующий день, когда вы запускаете ваш компьютер, вы не в состоянии найти смонтированное устройство - куда оно делось? Чтобы со всем этим разобраться, нужно иметь в виду, что после запуска системы нужно смонтировать контейнер LUKS, а перед остановкой компьютера - размонтировать.

Для того, чтобы получить доступ к файлу LUKS, каждый раз, когда вы включаете компьютер, выполняйте следующие действия, а затем прежде, чем выключить компьютер, безопасно закрывайте файл:

Откройте файл LUKS (т.е. /home/nitish/basefile) и введите пароль. Команда выглядит следующим образом:

$ cryptsetup luksOpen /home/nitish/basefile volume1

После того, как файл будет открыт, смонтируйте его (если он не монтируется автоматически):

$ mount /dev/mapper/volume1 /mnt/files

Теперь вы можете использовать смонтированное устройство как обычный диск и читать с него или записывать на него данные.

После того, как все сделаете, размонтируйте устройство следующим образом:

$ umount /mnt/files

После успешного размонтирования, закройте файл LUKS:

$ cryptsetup luksClose volume1

Шаг 09: Резервное копирование

Большинство потерь данных, хранящихся в контейнере LUKS, связаны с повреждением заголовка LUKS или слотов с ключами. Кроме того, что даже из-за случайной перезаписи в память заголовка могут быть повреждены заголовки LUKS, в реальных условиях также возможен полный выход жесткого диска из строя. Лучший способ защититься от таких проблем — это резервное копирование. Давайте посмотрим, какие доступны варианты резервного копирования.

Чтобы создать резервную копию файла заголовка LUKS, укажите в команде параметр luksHeaderBackup:

$ sudo cryptsetup luksHeaderBackup /home/nitish/basefile --header-backup-file /home/nitish/backupfile

Или, если вы хотите восстановить файл из резервной копии, то укажите в команде параметр luksHeaderRestore:

$ sudo cryptsetup luksHeaderRestore /home/ nitish/basefile --header-backup-file /home/nitish/backupfile

Для проверки файла заголовка LUKS и проверки того, что файл, с которым вы имеете дело, соответствует действительно существующему устройству LUKS, вы можете воспользоваться параметром isLuks.

$ sudo cryptsetup -v isLuks /home/nitish/basefile

Мы уже видели, как делать резервную копию файлов заголовков LUKS, но резервная копия заголовка LUKS на самом деле не защитит от полного отказа диска, так что вам с помощью следующей команды cat необходимо сделать резервную копию всего раздела:

$ cat /home/nitish/basefile > basefile.img

Шаг 10: Различные настройки

Есть несколько других настроек, которые при использовании шифрования dm-crypt LUKS могут оказаться полезными. Давайте их рассмотрим.

Чтобы сделать дамп заголовка LUKS, в команде cryptsetup есть параметр luksDump. Он позволит вам сделать снимок файла заголовка LUKS того устройства, которое вы используете. Пример команды выглядит следующим образом:

$ cryptsetup luksDump /home/nitish/basefile

В начале данной статьи мы упоминали о том, что LUKS поддерживает работу с несколькими ключами. Давайте сейчас это увидим в действии, добавив новый слот ключа (прим.пер.: слот ключа — место под ключ ):

$ cryptsetup luksAddKey --Key-slot 1 /home/nitish/basefile

Эта команда добавляет ключ к слоту ключа с номером 1, но только после того, как вы введете текущий пароль (ключ, присутствующий в слоте ключа 0). Всего есть восемь слотов ключей, и вы можете расшифровывать данные с использованием любого ключа. Если вы после того, как добавили второй ключ, сделаете дамп заголовка, вы увидите, что второй слот ключа занят.

Вы можете удалить слоты с ключами следующим образом:

$ cryptsetup luksRemoveKey /home/nitish/basefile

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


Автор: Paddy Landau
Дата публикации: сентябрь 2012 г.
Перевод: Семененко В.
Дата публикации перевода: 13 ноября 2012 г.

Когда вы устанавливаете операционную систему Ubuntu, возможно вы не задумываетесь о настройке шифрования данных в ней. Или же может быть такая ситуация, когда вы добавляете пользователя в систему, без шифрования его домашней директории. Но теперь вы передумали и решили настроить защиту данного каталога. Другими словами, вы (или другой пользователь на компьютере) желаете иметь такую возможность, которой на данный момент нет...

Создание шифрованного раздела в Ubuntu

Каким же образом можно добавить возможность шифрования в уже установленной системе Ubuntu Linux?

К счастью, реализовать ее достаточно легко. Для этого достаточно выполнить три основных шага:

  • создать шифрованную копию вашей домашней директории;
  • удалить оригинальную незашифрованную домашнюю директорию;
  • зашифровать раздел подкачки swap (выполняется только один раз, при установке системы Ubuntu или же при пошаговом выполнении данного руководства).

Описанные в этой статье действия производились на полностью обновленной системе Ubuntu Precise 12.04.

Подготовка

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

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

Используя привычный вам менеджер пакетов, установите программу encrypt-utils .

Шифрование

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

Перезагружаем Ubuntu Linux и заходим в "Режим восстановления" (Recovery Mode). Небольшой совет - во время старта загрузки системы нажмите и удерживайте клавишу Shift, чтобы открылось меню Grub. Обычно строка "Режим восстановления" (Recovery Mode) располагается второй сверху в списке этого загрузчика.

В меню режима восстановления, выберите "Drop" для того, чтобы появилась подсказка командной строки для учетной записи root.

Для исправления программной ошибки, о которой говорилось в начале данной статьи, введите две следующие команды:

Mount --options remount,rw / mount --all

Теперь можно создать шифрованную копию домашней директории пользователя paddy . Для этого введем команду, указанную ниже. При этом потрудитесь вспомнить ваш собственный пароль, так как данная утилита потребует его для выполнения операции:

Ecryptfs-migrate-home --user paddy

Когда процесс шифрования будет завершен, вы увидите несколько предупреждений. Можете проигнорировать их. Но вам необходимо будет запомнить путь к временной папке, созданной данной командой. Ее вид будет примерно следующим:

/home/paddy.ChPzzxqD

При этом восемь последних символов (после точки) являются случайным набором. Эта директория вам потребуется в последующих шагах "Завершение" или "Возвращение к исходному состоянию", о которых будет рассказано дальше.

Перезагрузите систему Ubuntu Linux. Для этого введите команду:

Reboot now

После ввода и запуска команды может пройти несколько секунд, так что наберитесь терпения.

Завершение

Зайдите в систему Ubuntu обычным способом, как вы делали каждый раз. Проверьте, что все работает, как прежде.

Если что-то не так, можете сразу переходить к пункту "Возвращение к исходному состоянию".

Если все в системе работает нормально, выполнил завершающие шаги.

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

Sudo rm -R /home/paddy.ChPzzxqD

Восстановите данные, которые были вами удалены (если были) в шаге "Подготовка".

Снова откройте терминал и введите команду для шифрования раздела подкачки swap . Если у вас до этого уже имелся пользователь с настроенным шифрованием домашней директории, можете спокойно пропустить данный шаг:

Sudo ecryptfs-setup-swap

Снова перезагрузитесь.

Возвращение к исходному состоянию

Если процесс шифрования выполнился с ошибками, вам потребуется повторить заново предыдущие шаги.

Запустите команды:

Mount --options remount,rw / mount --all ecryptfs-migrate-home --user paddy

Затем введите команду для просмотра содержимого временной папки, созданной в процессе шифрования. Для этого вам опять же потребуется вспомнить путь к ней. При этом не должно появиться никаких ошибок. Если же они появились, вам потребуется помощь.

Ls -l /home/paddy.ChPzzxqD

Теперь выполните процесс возвращения к исходному состоянию, выполнив три команды:

Cd /home rm -R paddy .ecryptfs/paddy mv paddy.ChPzzxqD

Снова перезагрузитесь.

Надеюсь, вышеназванные шаги помогли вам. Если у вас возникли неразрешимые проблемы, вы можете оставить запрос на моей ветке форума Ubuntu:

Спящий режим при шифровании

Большинство пользователей часто задаются вопросом, почему в операционной системе Ubuntu нет спящего режима (hibernate) после выполнения предыдущих операций (описанных ранее в этой статье) и как можно восстановить такую возможность. Причина заключается в настроенном шифровании. Если у вас настроено шифрование домашней директории, раздел подкачки при этом также шифруется, но с помощью случайного ключа. Когда вы переводите систему в режим hibernate , данные оперативной памяти сохраняются в разделе подкачки, при этом они шифруются случайным ключом. При восстановлении системы из спящего режима тот ключ, которым производилось шифрование раздела swap , уже потерян безвозвратно и система не может прочитать данный раздел. Соответственно, данные не могут быть извлечены и возвращение к предыдущему состоянию невозможно.

Если в вашей системе не настроено шифрование разделов, то восстановить возможность спящего режима в Ubuntu просто. Для этого достаточно выполнить команды:

Ls -l /home/paddy.ChPzzxqD rm -R paddy .ecryptfs/paddy

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

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

Мною был опробован данный способ в обоих случаях - как на обычной системе Ubuntu 12.04, так и на системе Ubuntu, установленной на виртуальной машине VirtualBox. В последнем случае были проблемы с отображением экрана при восстановлении из спящего режима. Но на обычной системе все работало прекрасно.

Подготовка

Введите в терминале следующую команду:

Sudo cryptsetup status crypt swap 1

В результате вы увидите строку, в которой будет обозначено устройство, выглядящее примерно так:

/dev/sda1

/dev/sdb5

Это устройство является разделом подкачки swap в вашей системе. Запомните его, так как оно потребуется вам в дальнейшем.

При каких-либо изменениях в системе я всегда рекомендую выполнять полное резервное копирование данных. В нашем случае оно также будет полезным.

Настройка спящего режима

Введите следующие команды. Удостоверьтесь, что вы заменили устройство /dev/sdXN вашим разделом подкачки swap , созданным в параграфе "Подготовка". При вводе команд вам следует строго придерживаться указанной последовательности:

Sudo swapoff /dev/mapper/cryptswap1 sudo cryptsetup luksClose /dev/mapper/cryptswap1 sudo cryptsetup luksFormat cipher aes cbc essiv:sha256 verify passphrase key size 256 /dev/sdXN WARNING! ======== This will overwrite data on /dev/sda1 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: Verify passphrase: sudo cryptsetup luksOpen /dev/sdXN cryptswap1

Введите ключевую фразу для устройства /dev/sda1 (и повторите ее во избежание опечатки):

Sudo mk swap /dev/mapper/crypt swap 1 sudo swapon --all swapon -s

Последняя команда отобразит файловое имя устройства /dev/crypt swap 1 .

Откройте в предпочитаемом редакторе файл настроек /etc/crypttab . Замените в нем строку crypt swap 1 следующей (не забудьте при этом заменить устройство /dev/sdXN на ваше устройство подкачки):

Cryptswap1 /dev/sdXN none luks

Теперь отредактируйте файл /usr/share/initramfstools/scripts/local-top/cryptroot . В нем найдите строку (обычно она имеет номер 288, но он может измениться):

Message "cryptsetup: unknown error setting up device mapping"

Перейдите к следующей пустой строке (перед FSTYPE=") и вставьте новую строку (при этом не забыв заменить устройство /dev/sdXN):

/sbin/cryptsetup luksOpen /dev/sdXN crypt swap 1

Отредактируйте файл /etc/acpi/hibetnate.sh . В первой пустой строке вставьте значение:

DEVICE="/dev/mapper/crypt swap 1"

Отредактируйте файл /etc/initramfstools/conf.d/resume . Замените в нем существующую строку следующей:

RESUME=/dev/mapper/crypt swap 1

Затем отредактируйте файл /etc/polkit1/localauthoriyt/50-local.d/com.ubuntu.enable-hibernate.pkla . Файл изначально не существует, поэтому потребуется сначала его создать. Затем добавьте в него строки:

Identity=unixuser:* Action=org.freedesktop.upower.hibernate ResultActive=yes

Наконец, откройте терминал и введите в нем команду:

Sudo update initramfs u k all

Перезагрузитесь.

Использование спящего режима

При последующем запуске Ubuntu Linux спросит вас о новой ключевой фразе для раздела подкачки. Введите ее и процесс дальнейшего нормального входа в систему продолжится.

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

Теперь вы обнаружите режим "Hibernate" в меню выключения Ubuntu Linux и сможете им пользоваться. Если вы хотите переходить в спящий режим из командной строки, достаточно набрать в терминале следующую команду.