• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Статья Безопасная Kali Pi 2018

secure-kali-pi-2018-1.png


Мы рассмотрели, как создать безопасный в использовании Raspberry Pi , но подумали, почему бы не вернуться назад и взглянуть на этот процесс снова. Все новые модели Raspberry Pi и Kali отличаются от охватываемых этим обзором. Мы обнаружили, что старый процесс нуждается в некоторые обновлениях.

Рекламная запись: Купить Raspberry Pi в Codeby Market raspberry — Codeby Market

Создание автономного устройства и понимание того, что мы пытаемся достичь, не делает лёгким то, что вы делаете. Таким образом, мы используем шифрование всего диска LUKS наряду с LUKS Nuke и возможность поставить это вместе. Если у вас есть Raspberry Pi 3 модель B, любой другой модели или аналогичное устройство, не стесняйтесь использовать инструкции предоставленные ниже, чтобы настроить свою безопасную систему. Этот обновленный процесс на основе нашей предыдущей документации и обновление с некоторыми предложениями сообщества.

Обзор процесса

Прежде чем мы углубимся в то, что мы будем пытаться достичь, давайте окинем беглым взглядом на наши цели по настройке нашей Raspberry Pi 3 модель B (теперь назовем её «RPi»):
  1. Обычная установка Kali Linux RPi
  2. Подготовка системы для зашифрованной загрузки с удаленного разблокированного диска
  3. Создание initramfs, настроеного с Dropbear и SSH-ключами, чтобы произошла разблокировка
  4. Резервная копия существующих данных
  5. Настройка шифрованных разделов
  6. Восстановление данных
  7. Настройка LUKS Nuke
  8. Hack away!
Этого может показаться много, но в действительности это очень простой способ и после его завершения мы останется с RPi, которая будет загружаться, получить IP с DHCP и Dropbear позволит нам подключиться через SSH для предоставления ключа LUKS. Это позволяет нам запускать RPi без заголовков и всё еще держать наши данные в безопасности. Затем, когда поработали с ним, мы можем забрать его или удаленно уничтожить наши данные с LUKS NUKE.

Подготовка базовой системы

Начнем с того, нам нужно записать RPi образ на SD карту. Мы не будем рассказывать здесь как, но вы можете найти информацию об этом .

Затем мы вставляем SD карту в RPi и пусть она загружается. При первой загрузке будет изменён размер SD-карты и последует перезагрузка, после этого она готова к использованию. Далее мы подключимся через SSH, обновим Kali и установим несколько пакетов, которые нам будут нужны.

Код:
apt update
apt dist-upgrade
apt install cryptsetup lvm2 busybox dropbear

Делаем Magic Fu

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

Во-первых, мы должны добавить строку /boot/config.txt:

Код:
echo initramfs initramfs.gz followkernel >> /boot/config.txt

Далее нам нужно проверить где расположен наше фактическое корневое устройство файловой системы:

Код:
root@kali:~# cat /etc/fstab
# proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

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

Теперь, когда мы знаем наше расположение корневой файловой системы, мы будем редактировать /boot/cmdline.txt . По умолчанию он содержит следующее:

Код:
root@kali:~# cat /boot/cmdline.txt
dwc_otg.fiq_fix_enable=2 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rootflags=noload net.ifnames=0

Примите к сведению запись root=/dev/mmcblk0p2. Мы будем обновлять его с cryptdevice значением:

Код:
root=/dev/mapper/crypt cryptdevice=/dev/mmcblk0p2:crypt

Изменения, сделанные в нашем файле, выглядят следующим образом:

Код:
root@kali:~# cat /boot/cmdline.txt
dwc_otg.fiq_fix_enable=2 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mapper/crypt cryptdevice=/dev/mmcblk0p2:crypt rootfstype=ext4 rootwait rootflags=noload net.ifnames=0

Нам также необходимо редактировать /etc/fstab и заменить устройство, где наши корневые файловые системы в настоящее время должны быть /dev/mapper/crypt:

Код:
root@kali:~# cat /etc/fstab
# proc /proc proc defaults 0 0
/dev/mmcblk0p1 /boot vfat defaults 0 2
/dev/mapper/crypt / ext4 defaults,noatime 0 1
#/dev/mmcblk0p2 / ext4 defaults,noatime 0 1

Далее нам нужно создать файл /etc/crypttab, содержащий следующее:

Код:
crypt /dev/mmcblk0p2 none luks

Теперь, прежде чем мы начнем создание нашего initramsfs, нам нужно сделать хитрый маленький хак - заставить cryptsetup быть включеным. Для этого мы создадим поддельные файловые системы LUKS. Мы сотрём в dd пустой файл, отформатируем его как LUKS, смонтируем его и поставим на нём файловую систему.

Код:
dd if=/dev/zero of=/tmp/fakeroot.img bs=1M count=20
cryptsetup luksFormat /tmp/fakeroot.img
cryptsetup luksOpen /tmp/fakeroot.img crypt
mkfs.ext4 /dev/mapper/crypt

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

Настройка SSH и Initramfs

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

Чтобы обойти это, мы собираемся настроить Dropbear, чтобы стартануть и позволить аутентификацию с SSH, а затем подключить вас и предоставить ваш LUKS пароль – и всё удаленно!

Мы начинали с создания файла на /etc/dropbear-initramfs/authorized_keys, который содержит:

Код:
command="export PATH='/sbin:/bin/:/usr/sbin:/usr/bin'; /scripts/local-top/cryptroot && kill -9 `ps | grep -m 1 'cryptroot' | cut -d ' ' -f 3` && exit"

Важно отметить, это должно быть всё в одной строке. Линия не влезает там вообще. Если у вас есть этот набор напрямую, он должен выглядеть подобным образом:

Код:
root@kali:~# cat /etc/dropbear-initramfs/authorized_keys
command="export PATH='/sbin:/bin/:/usr/sbin:/usr/bin'; /scripts/local-top/cryptroot && kill -9 `ps | grep -m 1 'cryptroot' | cut -d ' ' -f 3` && exit" ssh-rsa AAAAB3NzaC... user@system

Далее мы сделаем небольшие изменения в /usr/share/initramfs-tools/scripts/init-premount/dropbear. Это изменение для того, что нам нужно замедлить Dropbear и обеспечить что сеть настроена, прежде чем выкинет из Dropbear. В конце файла где говорится:

Код:
# On NFS mounts, wait until the network is configured. On local mounts,
# configure the network in the background (in run_dropbear()) so someone
# with console access can enter the passphrase immediately. (With the
# default ip=dhcp, configure_networking hangs for 5mins or so when the
# network is unavailable, for instance.)
[ "$BOOT" != nfs ] || configure_networking
run_dropbear &
echo $! >/run/dropbear.pid

Мы хотим добавить следующее:

Код:
[ "$BOOT" != nfs ] || configure_networking
sleep 5
run_dropbear &
echo $! >/run/dropbear.pid
With that completed, we are finally ready to create our initramfs!
Код:
mkinitramfs -o /boot/initramfs.gz

Прежде чем продолжить, мы гарантируем, что наши индивидуальные изменения сделаны в новом initramfs:

Код:
lsinitramfs /boot/initramfs.gz | grep cryptsetup
lsinitramfs /boot/initramfs.gz | grep authorized

С тем что проверяется, мы гарантируем, что все изменения записываются на диск и выключаем RPi.

Код:
sync && sync
init 0

Резервное копирование и восстановление

Извлекаем SD-карту из вашего RPi и вернёмся к системе, которую вы изначально используете для записи SD-карты. Давайте готовить окружение среды:

Код:
ls -al /mnt/{chroot,backup,encrypted}
# Please make sure there is nothing here first before you move on, otherwise you will have a bad day.
rm -rf /mnt/{chroot,backup,encrypted}
mkdir -p /mnt/{chroot,backup,encrypted}

Теперь вставьте SD-карту и проверьте идентификатор устройства. В нашем случае, устройство /dev/sdc2, но у вас могут быть другим. Измените при необходимости как на вашей системе. Мы подключим устройство и сделаем резервную копию файловой системы:

Код:
mount /dev/sdc2 /mnt/chroot/
rsync -avh /mnt/chroot/* /mnt/backup/
umount /mnt/chroot

Как только это будет сделано, мы удалим существующий раздел 2 на SD карте и заново создадим один пустой, который мы создали для шифрования LUKS.

Код:
echo -e "d\n2\nw" | fdisk /dev/sdc
echo -e "n\np\n2\n\n\nw" | fdisk /dev/sdc

Обновив разделы, мы перезагрузим их путём запуска partprobe и затем настроим LUKS на новый раздел:

Код:
cryptsetup -v -y --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sdc2
cryptsetup -v luksOpen /dev/sdc2 crypt
mkfs.ext4 /dev/mapper/crypt

Мы восстановим резервную копию корневой файловой системы, теперь зашифрованной.

Код:
mount /dev/mapper/crypt /mnt/encrypted/
rsync -avh /mnt/backup/* /mnt/encrypted/
sync
umount /mnt/encrypted/
cryptsetup luksClose /dev/mapper/crypt

Проверка

Теперь можно вернуть SD карту в RPi и дать ему запуститься. Если смотрели за загрузкой, вы должны были увидеть, что Dropbear запустился. В этот момент вы должны иметь возможность войти по SSH в систему и разблокировать диск.

Код:
root@kali:~# ssh -o "UserKnownHostsFile /dev/null" root@10.42.42.94
The authenticity of host '10.42.42.94 (10.42.42.94)' can't be established.
ECDSA key fingerprint is SHA256:L+QVP+OmncGDleuEoj77OlRGuCji2gp0c1gMYjUupU0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.42.42.94' (ECDSA) to the list of known hosts.
Please unlock disk /dev/mmcblk0p2 (crypt):
cryptsetup (crypt): set up successfully
Connection to 10.42.42.94 closed.

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

Но мы кое что не сделали! Добавим немного функциональности:

Код:
cryptsetup luksDump /dev/mmcblk0p2
cryptsetup luksAddNuke /dev/mmcblk0p2

Теперь, когда мы подключены по SSH, у нас есть один пароль, мы можем войти чтобы позволить разблокировку для SD-карты и продолжить процесс загрузки и другой, который разрушает LUKS заголовок, что делает данные недоступными. Если вы окажетесь в ситуации, когда не удаётся извлечь устройство, этот параметр, чтобы удалить заголовки устройства может быть очень полезным. Если вы хотите быть действительно фантазёром, можно также совместить это с , позволяя удаленно разблокировать/удалять систему через беспроводное соединение. Это очень полезно, если вы не будете иметь постоянный прямой доступ к сети, которае будет передаваться RPi.

 
M

mtd

сколько не пытался делать всегда миллион ошибок
 
А

авп2525

У меня выскакивает такая ошибка:
Код:
После этого мы наконец готовы создать наши initramfs!
┌─[root@kali]─[~]
└──╼ #mkinitramfs -o /boot/initramfs.gz
cryptsetup: ERROR: Couldn't resolve device /dev/root
cryptsetup: WARNING: Couldn't determine root device
Почему ?
Как исправить ?
Что я "не так" делаю ?
Вроде разобрался, что к чему, в этой статье... Но шифрованная система не грузится.
Полагаю, что из-за этой ошибки.
 
В этом руководстве имеются недочёты.
  1. Не указано, что размер загрузочного раздела должен быть не менее 150 "метров" (если размер MicroSD позволяет, то и все 500 можно отдать под boot раздел - но это с лихвой)
  2. Кроме того, не сказано. каким образом генерируется файл авторизации mkinitramfs -o /boot/initramfs.gz
  3. Желательно выдать разрешения: chmod 600 /etc/dropbear-initramfs/authorized_keys
cryptsetup: ERROR: Couldn't resolve device /dev/root cryptsetup: WARNING: Couldn't determine root device
Вероятно, эта ошибка возникает из-за того, что пересборка виртуальной файловой системы происходит ДО того, как создан каталог /dev/root, который в свою очередь будет находится в busybox при загрузке системы.
То есть, на эту ошибку не нужно ображать внимания в данном случае.
Система должна загрузиться и при первом запуске появится приглашение initframs.
Если понадобится, то при первом запуске необходимо будет открыть зашифрованный раздел с помощью команды:
# cryptsetup luksOpen /dev/mmcblk0p2 crypt
 
Последнее редактирование:
  • Нравится
Реакции: ghost

Mister511

New member
19.05.2021
1
0
BIT
0
Коллеги, подымем тему)

Получаю сообщение " alert /dev/mapper/crypt does not exist "
Кто сталкивался?
Автор темы, подскажи в чем проблема
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!