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

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

@webware

t.me/webware

Мы рассмотрели, как создать безопасный в использовании 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 обнаружен, его содержимое будет в безопасности.


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

cryptsetup luksDump /dev/mmcblk0p2
cryptsetup luksAddNuke /dev/mmcblk0p2

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

Источник codeby.net

Report Page