ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Электроника и Фрикинг (https://forum.antichat.xyz/forumdisplay.php?f=21)
-   -   Безопасная Kali Pi 2018 (https://forum.antichat.xyz/showthread.php?t=564009)

ghost 12.07.2018 11:01

https://forum.antichat.xyz/attachmen...5738abc76e.png

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

Цитата:


Рекламная запись:Купить Raspberry Pi в античат Market raspberry — античат 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.

Источник

Абстрактное Очертание 12.09.2019 23:29

В этом руководстве имеются недочёты.
  1. Не указано, что размер загрузочного раздела должен быть не менее 150 "метров" (если размер MicroSD позволяет, то и все 500 можно отдать под boot раздел - но это с лихвой)
  2. Кроме того, не сказано. каким образом генерируется файл авторизации
    Код:

    mkinitramfs -o /boot/initramfs.gz
  3. Желательно выдать разрешения:
    Код:

    chmod 600 /etc/dropbear-initramfs/authorized_keys
Цитата:


авп2525 сказал(а):

cryptsetup: ERROR: Couldn't resolve device /dev/root cryptsetup: WARNING: Couldn't determine root device


Вероятно, эта ошибка возникает из-за того, что пересборка виртуальной файловой системы происходит ДО того, как создан каталог /dev/root, который в свою очередь будет находится в busybox при загрузке системы.
То есть, на эту ошибку не нужно ображать внимания в данном случае.
Система должна загрузиться и при первом запуске появится приглашение initframs.
Если понадобится, то при первом запуске необходимо будет открыть зашифрованный раздел с помощью команды:

Код:

#  cryptsetup luksOpen /dev/mmcblk0p2 crypt

Mister511 19.05.2021 22:57

Коллеги, подымем тему)

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


Время: 16:28