KAL1 LINUX 官方文档之arm上的ka1i---树莓派全盘加密

Raspberry Pi-全盘加密

以下文档尚不可用。在以下链接中关注状态:https://gitlab.com/ka1ilinux/documentation/ka1i-docs/issues/49

译者注:以下文章有操作有问题,因此暂时不再细翻

去年,我们做了一篇博文《安全ka1i Pi 2018》,涵盖了如何加密ka1i RPi安装。从那时起,出现了一些进展。一个重要的注意是,unixabg已经创建了一个脚本来自动化这个过程。我们将在通过手动方法后触及了更多,然而我们仍然建议阅读正在做的事情。

回顾一下,我们要完成的工作是创建一个独立的“遗留”设备,一旦发现该设备,就很难弄清楚自己在做什么。因此,我们将LUKS全盘加密与LUKS Nuke功能结合使用。如果您有Raspberry Pi 3 Model B +或其他型号或类似设备,请按照以下说明设置您自己的安全系统。此更新过程基于我们以前的文档,并根据一些社区建议进行了更新。

过程概述

在深入研究将要完成的技术之前,让我们快速看一下设置Raspberry Pi 3 Model B +(以下称为“ RPi”)的目标:

  • 创建普通的ka1i Linux RPi安装
  • 通过远程磁盘解锁,为加密启动系统做好准备。
  • 创建一个配置有Dropbear和SSH密钥的initramfs,以允许进行解锁
  • 备份现有数据
  • 配置加密分区
  • 恢复我们的数据

这看起来可能很多,但确实非常简单。完成后,我们将剩下一个RPi,它将启动,从DHCP获取IP,并允许我们通过SSH通过Dropbear连接以提供LUKS密钥。这使我们可以无头文件运行RPi,同时仍保持数据安全。然后,在处理完之后,我们可以检索它。

准备系统

我们首先将下载最新的ka1i RPi3映像并对其进行映像。如果要继续,请确保知道要将文件映像到的位置。

wget https://images.offensive-security.com/arm-images/ka1i-linux-2019.4-rpi3-nexmon.img.xz

xzcat ka1i-linux-2019.4-rpi3-nexmon.img.xz | dd of=/dev/sdb bs=4M

接下来,我们将为chroot做好准备。让我们创建我们要安装SD卡的位置,然后再安装它。

mkdir -p /mnt/chroot/boot
mount /dev/sdb2 /mnt/chroot/
mount /dev/sdb1 /mnt/chroot/boot/
mount -t proc none /mnt/chroot/proc
mount -t sysfs none /mnt/chroot/sys
mount -o bind /dev /mnt/chroot/dev
mount -o bind /dev/pts /mnt/chroot/dev/pts
apt install -y qemu-user-static
cp /usr/bin/qemu-arm-static /mnt/chroot/usr/bin/

做法

现在我们的系统已经建立,我们可以使用chroot来建立用于加密的RPi映像。让我们首先chroot并安装一些必要的软件包。

LANG=C chroot /mnt/chroot/
sudo apt update
sudo apt install -y cryptsetup lvm2 busybox dropbear

现在,我们将列出五个内核版本,根据所使用的RPi,您需要选择某些版本。第一个版本Re4son +适用于armv6设备IE。RPi1,RPi0或RPi0w。接下来的两个,Re4son-v7 +和Re4son-v8 +,分别是armv7设备的32位和64位版本。最后两个将是合并到armv7 32位和64位版本中的版本,l名称中的表示它们将用于RPi4。请记住,内核版本可能会更改,但是名称不会更改。

ls -l /lib/modules/ | awk -F" " '{print $9}'
4.19.81-Re4son+
4.19.81-Re4son-v7+
4.19.81-Re4son-v7l+
4.19.81-Re4son-v8+
4.19.81-Re4son-v8l+
echo initramfs initramfs.gz followkernel >> /boot/config.txt

接下来,我们将编辑/boot/cmdline.txt和更改根路径。我们将希望将根路径更改为/dev/mapper/crypt,然后在此cryptdevice=/dev/mmcblk0p2:crypt之后添加最终结果应如下所示:

root@ka1i:~# 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

现在,我们将fstab更新为具有正确的根文件系统路径。

root@ka1i:~# cat /etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
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

接下来,我们将创建crypttab文件。

echo -e 'crypt	/dev/mmcblk0p2	none	luks' > /etc/crypttab

现在,我们进行一些文件系统欺骗。我们创建了一个伪造的LUKS文件系统,该系统强制包含cryptsetup。

dd if=/dev/zero of=/tmp/fakeroot.img bs=4M count=20
exit
cryptsetup luksFormat /mnt/chroot/tmp/fakeroot.img
cryptsetup luksOpen /mnt/chroot/tmp/fakeroot.img crypt
mkfs.ext4 /mnt/chroot/dev/mapper/crypt

之后,我们需要复制或生成一个ssh密钥,以将其添加到dropbear的authorized_keys文件中。

cp id_rsa.pub /mnt/chroot/
LANG=C chroot /mnt/chroot/

接下来,我们必须将以下内容添加到/ etc / dropbear-initramfs / authorized_keys中:

root@ka1i:~# nano /etc/dropbear-initramfs/authorized_keys
root@ka1i:~# 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密钥,然后将其从卡中删除。

cat id_rsa.pub >> /etc/dropbear-initramfs/authorized_keys && rm id_rsa.pub

完成后,/etc/dropbear-initramfs/authorized_keys应如下所示(注意:您可能需要在命令后删除返回值,以便ssh键紧随其后):

root@ka1i:~# 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 key user@sys

现在,我们需要进行编辑/usr/share/initramfs-tools/scripts/init-premount/dropbear以添加一个睡眠计时器,这允许 dropbear 之前启动网络

[ "$BOOT" != nfs ] || configure_networking
sleep 5
run_dropbear &
echo $! >/run/dropbear.pid

现在让我们启用cryptsetup。

echo CRYPTSETUP=y > /etc/cryptsetup-initramfs/conf-hook

root@ka1i:~# cat /etc/cryptsetup-initramfs/conf-hook
CRYPTSETUP=y

现在我们需要创建initramfs。这是以前的内核版本开始起作用的地方。

mkinitramfs -o /boot/initramfs.gz 4.19.93-Re4son-v7+

现在,我们要确保我们牢固地创建了initramfs。如果没有结果,则出了点问题。

lsinitramfs /boot/initramfs.gz | grep cryptsetup
lsinitramfs /boot/initramfs.gz | grep authorized

在备份之前,我们必须确保禁用rpiwiggle,否则它将删除文件系统。

systemctl disable rpiwiggle

现在我们可以确保所有更改都已写入,然后可以对磁盘进行加密。

sync && sync
exit
umount /mnt/chroot/boot
umount /mnt/chroot/sys
umount /mnt/chroot/proc
umount /mnt/chroot/dev/pts
umount /mnt/chroot/dev
mkdir -p /mnt/{backup,encrypted}
rsync -avh /mnt/chroot/* /mnt/backup/
cryptsetup luksClose crypt
umount /mnt/chroot
echo -e "d
2
w" | fdisk /dev/sdb
partprobe
sleep 5
echo -e "n
p
2


w" | fdisk /dev/sdb
partprobe
sync && sync
cryptsetup -v -y --cipher aes-cbc-essiv:sha256 --key-size 256 luksFormat /dev/sdb2
cryptsetup -v luksOpen /dev/sdb2 crypt
mkfs.ext4 /dev/mapper/crypt
mount /dev/mapper/crypt /mnt/encrypted/
rsync -avh /mnt/backup/* /mnt/encrypted/
sync

我们要做的最后一步是重新制作initramfs文件,这一步很重要,因为如果不这样做,它将无法正确启动。

mount /dev/sdb1 /mnt/encrypted/boot/
mount -t proc none /mnt/encrypted/proc
mount -t sysfs none /mnt/encrypted/sys
mount -o bind /dev /mnt/encrypted/dev
mount -o bind /dev/pts /mnt/encrypted/dev/pts
LANG=C chroot /mnt/encrypted
mkinitramfs -o /boot/initramfs.gz 4.19.93-Re4son-v7+

现在我们可以卸载并关闭所有内容。

exit
umount /mnt/encrypted/boot
umount /mnt/encrypted/sys
umount /mnt/encrypted/proc
umount /mnt/encrypted/dev/pts
umount /mnt/encrypted/dev
umount /mnt/encrypted
cryptsetup luksClose /dev/mapper/crypt

LUKS NUKE

如果用户还需要LUKS NUKE,那么他们所需要做的就是运行以下命令。

dpkg-reconfigure cryptsetup-nuke-password

自动化?

现在我们如何使它自动化?多亏了Richard Nelson(unixabg),任何想要比使用手动方法花费更少时间,更轻松地完成所有工作的人都可以!

首先,让我们下载unixabg的cryptmypi脚本。

git clone https://github.com/unixabg/cryptmypi.git

但是,在运行构建脚本之前,我们需要做很多事情。现在让我们一起经历这些:

cd cryptmypi
cp cryptmypi.conf config
cd config
cat ~/.ssh/id_rsa.pub >> authorized_keys

现在,我们需要编辑cryptmypi.conf来更改阶段2中的某些设置。这些设置将是个人设置,但让我们举个例子。

cat cryptmypi.conf
##################
## cryptmypi settings
##################
# export prefix for hooks
export _VER="2.2-beta"

# base and build
export _BASEDIR=$(pwd)
export _BUILDDIR=${_BASEDIR}/cryptmypi-build

##################
## Stage-1
##################
_IMAGEURL=https://images.offensive-security.com/arm-images/ka1i-linux-2019.4-rpi3-nexmon-64.img.xz

# compose package actions
export _PKGSPURGE=""
export _PKGSINSTALL=""

# iodine settings
_IODINE_PASSWORD="your iodine password goes here"
_IODINE_DOMAIN="your iodine domain goes here"

# final package actions
export _FINALPKGPURGE=""
export _FINALPKGINSTALL="telnet dsniff bettercap"

##################
## Stage-2
##################
# block device
_BLKDEV="/dev/sdb"

# luks encryption cipher
_LUKSCIPHER="aes-cbc-essiv:sha256"

# luks encryption password
_LUKSPASSWD="toor"

# root password
export _ROOTPASSWD="toor"

我们在这里更改的是块设备,luks加密密码和root密码。如果您想使用其他图像文件,则可以更改图像URL,因此请务必立即进行操作。

现在剩下要做的就是运行两个阶段的脚本并按照说明进行操作。到最后,您将拥有一个具有dropbear SSH访问权限的完全加密的文件系统。

原文地址:https://www.cnblogs.com/GKLBB/p/13583450.html