Содержание статьи
- Настройка диска
- Сборка cryptsetup
- Модифицируем код
- Итог
LUKS — популярная и распространенная система шифрования дисков. Однако, когда есть доступ к хосту с правами администратора, вполне возможно установить закладку, которая будет перехватывать ключи зашифрованных разделов. В этой статье мы сначала разберемся с LUKS и утилитой cryptsetup, а потом посмотрим, как изменить исходный код таким образом, чтобы можно было перехватывать парольную фразу или ключ для расшифровки раздела.
LUKS — это, по сути, стандарт для шифрования дисков в Linux. Поддерживается до восьми слотов ключей, есть выбор хеш‑функций, алгоритмов и режимов шифрования, есть адаптивный алгоритм выбора количества итераций. Расшифровать данные на диске можно, только имея доступ к секретному ключу и паролю.
Среди других преимуществ LUKS:
- совместимость через стандартизацию;
- защита от атак с низкой энтропией;
- возможность аннулировать секретную фразу.
Ну и распространяется она бесплатно.
Настройка диска
Все манипуляции мы будем проводить на свежем Debian 10, добавив дополнительный диск для экспериментов с шифрованием.
После установки переходим под root:
su -
Затем утилитой fdisk смотрим названия доступных дисков:
$ fdisk -l
Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x09849b5eDevice Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 37750783 37748736 18G 83 Linux
/dev/sda2 37752830 41940991 4188162 2G 5 Extended
/dev/sda5 37752832 41940991 4188160 2G 82 Linux swap / Solaris
Disk /dev/sdb: 4 GiB, 4294967296 bytes, 8388608 sectors
Disk model: VMware Virtual S
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
В своем примере я буду использовать устройство /dev/sdb. Для разметки диска использую утилиту parted, передав имя диска в качестве аргумента:
parted /dev/sdb
Помечаю таблицу разделов как GPT:
(parted) mklabel gpt
И создаю единственный раздел, занимающий весь диск:
(parted) mkpart primary 1 -1(parted) quit
Сборка cryptsetup
Работы с разметкой /dev/sdb закончены. Переходим к сборке cryptsetup.
Если у тебя уже установлен LUKS и ты хочешь модифицировать текущую версию утилиты, используй dpkg-dev. В этом же примере я буду собирать cryptsetup из исходных кодов, скачанных отдельно от системы. У меня версия 2.0.6, так как при сборке последней доступной (2.3.4) были проблемы с версиями библиотек.
Скачиваем, распаковываем и устанавливаем необходимые зависимости:
# cd /root# wget https://www.kernel.org/pub/linux/utils/cryptsetup/v2.0/cryptsetup-2.0.6.tar.xz# tar xf cryptsetup-2.0.6.tar.xz# cd cryptsetup-2.0.6# apt update && apt install build-essential automake autopoint libtool pkg-config uuid-dev libdevmapper-dev libpopt-dev libgcrypt20-dev libjson-c-dev libssl-dev libblkid-dev gettext
Собираем и устанавливаем:
# ./configure# make && make install
Проверяем установку:
# cryptsetup --version
cryptsetup 2.0.6
Отлично. Теперь создадим зашифрованный раздел с помощью cryptsetup и пароля, вводимого в TTY:
# cryptsetup luksFormat /dev/sdb1
Соглашаемся на форматирование (YES) и вводим пароль для последующего доступа к разделу. Я использую t3st3ncryp7.
Проверяем, все ли удалось.
# cryptsetup isLuks /dev/sdb1 && echo Ok!
Ok!
Все получилось! Подключаем шифрованный раздел, чтобы дальше его монтировать:
# cryptsetup luksOpen /dev/sdb1 db
Вводим парольную фразу (t3st3ncryp7). Чуть позже в этом месте мы перехватим вводимый в TTY пароль.
Форматируем раздел:
# mke2fs -j /dev/mapper/db
И монтируем для работы, например в /mnt:
# mount /dev/mapper/db /mnt && cd /mnt# echo Hello! > test.txt# cat test.txt
Hello!
# ls -la
итого 28
drwxr-xr-x 3 root root 4096 ноя 6 06:49 .
drwxr-xr-x 20 root root 4096 ноя 6 05:34 ..
drwx------ 2 root root 16384 ноя 6 06:48 lost+found
-rw-r--r-- 1 root root 7 ноя 6 06:49 test.txt
Модифицируем код
На этом этапе мы научились монтировать шифрованный раздел LUKS c использованием парольной фразы. Сейчас мы исправим исходный код, чтобы сохранять не только вводимый пароль, но и случайно сгенерированный файл, который может быть указан в качестве ключа для расшифровки раздела.
Продолжение доступно только участникам
Материалы из последних выпусков становятся доступны по отдельности только через два месяца после публикации. Чтобы продолжить чтение, необходимо стать участником сообщества «Xakep.ru».
Присоединяйся к сообществу «Xakep.ru»!
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
1 год7690 р. |
1 месяц720 р. |
Я уже участник «Xakep.ru»