//kalinux.info
Разное 360 просмотров

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

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

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

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

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

Прежде чем мы погрузимся в технику того, что мы попытаемся выполнить, быстро рассмотрим наши цели по созданию нашей Raspberry Pi 3 Model B + (далее называемой RPi):

  1. Создайте обычную установку Kali Linux RPi
  2. Подготовьте систему для зашифрованной загрузки с удаленной разблокировкой диска
  3. Создайте initramfs, настроенные с Dropbear и SSH-ключами, чтобы разрешить разблокировку
  4. Резервирование существующих данных
  5. Настройка зашифрованных разделов
  6. Восстановить наши данные
  7. Настройка LUKS Nuke
  8. Убирайся!

Это может показаться много, но на самом деле это довольно просто и после завершения, мы останемся с 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 настроен и готов к работе. Обратите внимание, что как только мы начнем этот процесс, мы собираемся изменить ряд критически важных файлов на нашей установке 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. Мы записываем пустой файл, форматируем его как 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

После этого мы, наконец, готовы создать наши 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 никогда не перестает удивлять нас. Теперь у нас осталась хорошая система, с которой мы можем относиться с относительной уверенностью, что, даже если она будет обнаружена, она не будет слишком простой в использовании.

Но мы еще не закончили! Давайте добавим некоторые функции LUKS NUKE:

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

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