跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

精选回复

发布于

我们之前已经介绍过如何使用Raspberry Pi 创建安全的“一次性黑客盒”,但我们认为是时候回去再次查看该过程了。随着所有新的Raspberry Pi 型号和Kali 自上次介绍以来的变化,我们发现旧流程需要进行一些更新。

作为回顾,我们试图完成的是创建一个独立的“遗留”设备,当它被发现时,很难弄清楚你在做什么。因此,我们使用LUKS 全盘加密和LUKS Nuke 功能将其组合在一起。如果您有Raspberry Pi 3 B+ 型,或者任何其他型号或类似设备,请随时使用以下说明来设置您自己的安全系统。此更新的流程基于我们之前的文档,并根据一些社区建议进行了更新。

流程概述

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

创建正常的Kali Linux RPi 安装使用远程磁盘解锁为加密启动准备系统创建一个配置有Dropbear 和SSH 密钥的initramfs 以允许解锁备份现有数据配置加密分区恢复我们的数据配置LUKS NukeHack 吧!这可能看起来很多,但它确实非常简单,一旦完成,我们将留下一个将启动的RPi,从DHCP 获取IP,Dropbear 将允许我们通过SSH 连接以提供LUKS 密钥。这使我们能够无头运行RPi,但仍能保证数据安全。然后,当我们完成后,我们可以检索它或使用LUKS NUKE 远程访问并销毁我们的数据。

准备基础系统

首先,我们需要将RPi 映像写入SD 卡。我们不会在这里讨论这一点,但您可以在我们的文档中找到有关这样做的信息。

完成此操作后,我们将SD 卡插入RPi 并让它启动。首次启动时,它将调整SD 卡的大小并重新启动,之后即可使用。接下来,我们通过SSH 连接,更新Kali,并安装一些我们需要的软件包:

易于更新

apt dist 升级

apt install cryptsetup lvm2 busybox dropbear

施展魔法-Fu

RPi 已全部设置完毕并准备就绪,让我们亲自动手并深入研究吧。请注意,一旦我们开始此过程,我们将更改RPi 安装上的许多关键文件。重要的是,在准备好之前不要重新启动设备或以其他方式关闭系统,否则系统将无法启动。

首先,我们需要在/boot/config.txt: 中添加一行

echo initramfs initramfs.gz followkernel /boot/config.txt

接下来,我们要验证实际根文件系统设备所在的位置:

root@kali:~# cat /etc/fstab

# proc /proc proc 默认0 0

/dev/mmcblk0p1 /boot vfat 默认0 2

/dev/mmcblk0p2/ext4 默认值,noatime 0 1

请特别注意,我们的根文件系统位于/dev/mmcblk0p2。这就是我们将在接下来的示例中使用的内容,因此请务必使用您在系统上收到的任何值来更新说明。

现在我们知道了根文件系统位置,我们将编辑/boot/cmdline.txt 。默认包含以下:

root@kali:~# cat /boot/cmdline.txt

dwc_otg.fiq_fix_enable=2 控制台=ttyAMA0,115200 kgdboc=ttyAMA0,115200 控制台=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rootflags=noload net.ifnames=0

记下条目root=/dev/mmcblk0p2。我们将使用cryptdevice 值: 更新它

根=/dev/mapper/crypt cryptdevice=/dev/mmcblk0p2:crypt

进行更改后,我们的文件如下所示:

root@kali:~# cat /boot/cmdline.txt

dwc_otg.fiq_fix_enable=2 控制台=ttyAMA0,115200 kgdboc=ttyAMA0,115200 控制台=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 默认0 0

/dev/mmcblk0p1 /boot vfat 默认0 2

/dev/mapper/crypt/ext4 默认值,noatime 0 1

#/dev/mmcblk0p2/ext4 默认值,noatime 0 1

接下来,我们需要创建一个包含以下内容的/etc/crypttab 文件:

crypt /dev/mmcblk0p2 没有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 密钥解锁HDD。如果您运行的是无头系统,那就不是特别方便。

为了解决这个问题,我们将配置Dropbear 启动,允许您使用SSH 进行身份验证,然后连接您以提供您的LUKS 密码- 全部都是从远程进行!

我们首先在/etc/dropbear-initramfs/authorized_keys 创建一个包含: 的文件

命令='导出路径='/sbin:/bin/:/usr/sbin:/usr/bin'; /scripts/local-top/cryptroot Kill -9 \`ps | grep -m 1 'cryptroot' | grep -m 1 'cryptroot' | grep -m 1 'cryptroot' cut -d ' ' -f 3\` 退出'

需要注意的是,这一切都需要在一行上。那里根本没有换行。如果您设置正确,它应该类似于this:

root@kali:~# cat /etc/dropbear-initramfs/authorized_keys

命令='导出路径='/sbin:/bin/:/usr/sbin:/usr/bin'; /scripts/local-top/cryptroot kill -9 `ps | grep -m 1 'cryptroot' | grep -m 1 'cryptroot' | grep -m 1 'cryptroot' cut -d ' ' -f 3` exit' ssh-rsa AAAAB3NzaC. user@system

接下来,我们对/usr/share/initramfs-tools/scripts/init-premount/dropbear 进行一个小更改。此更改是由于我们需要减慢Dropbear 的速度,以确保在Dropbear 启动之前建立网络。在文件末尾,它显示:

# 在NFS 挂载上,等待网络配置完成。在本地坐骑上,

# 在后台配置网络(在run_dropbear() 中),以便有人

# 具有控制台访问权限可以立即输入密码。 (与

# 默认ip=dhcp,configure_networking 挂起5 分钟左右

# 例如,网络不可用。)

[ '$BOOT' !=nfs ] ||配置网络

运行_dropbear

回声$!/run/dropbear.pid

我们想添加一个简单的睡眠语句,如so:

[ '$BOOT' !=nfs ] ||配置网络

睡5

运行_dropbear

回声$!/run/dropbear.pid

完成后,我们终于准备好创建我们的initramfs!

mkinitramfs -o /boot/initramfs.gz

在进行定制之前,我们确保我们的更改已进入新的initramfs:

lsinitramfs /boot/initramfs.gz | lsinitramfs /boot/initramfs.gz | grep 密码设置

lsinitramfs /boot/initramfs.gz | lsinitramfs /boot/initramfs.gz | grep 授权

经过验证,我们确保所有更改都写入磁盘并关闭RPi:

同步同步

初始化0

备份和恢复

从RPi 中取出SD 卡,然后返回到最初用于写入SD 卡的系统。我们来准备环境:

ls -al /mnt/{chroot,备份,加密}

# 在继续之前请先确保这里没有任何东西,否则你会度过糟糕的一天。

rm -rf /mnt/{chroot,备份,加密}

mkdir -p /mnt/{chroot,备份,加密}

现在插入SD 卡并验证设备ID。在我们的例子中,设备是/dev/sdc2,但您的设备可能有所不同,因此请根据您的系统进行必要的调整。我们挂载设备并备份文件系统:

挂载/dev/sdc2 /mnt/chroot/

rsync -avh /mnt/chroot/* /mnt/备份/

卸载/mnt/chroot

完成后,我们删除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

完成此操作后,我们将根文件系统备份恢复到现在加密的分区:

挂载/dev/mapper/crypt /mnt/加密/

rsync -avh /mnt/备份/* /mnt/加密/

同步

卸载/mnt/加密/

cryptsetup luks关闭/dev/mapper/crypt

测试一下

您现在可以将SD 卡放回RPi 并让它启动。如果您观察启动,您应该会看到Dropbear 启动。此时,您应该能够通过SSH 进入系统并解锁drive:

root@kali:~# ssh -o 'UserKnownHostsFile /dev/null' [emailprotected]

无法确定主机“10.42.42.94 (10.42.42.94)”的真实性。

ECDSA 密钥指纹为SHA256:L+QVP+OmncGDleuEoj77OlRGuCji2gp0c1gMYjUupU0。

您确定要继续连接吗(是/否)?是的

警告: 已将“10.42.42.94”(ECDSA) 永久添加到已知主机列表中。

请解锁磁盘/dev/mmcblk0p2 (crypt):

cryptsetup (crypt): 设置成功

与10.42.42.94 的连接已关闭。

这些小设备的多功能性与Kali 的强大功能相结合,永远让我们惊叹不已。现在我们只剩下一个很好的无头系统,我们可以相对自信地操作,即使它被发现,也不会太容易进入。

但我们还没有完成!让我们添加一些LUKS NUKE 功能:

cryptsetup luksDump /dev/mmcblk0p2

cryptsetup luksAddNuke /dev/mmcblk0p2

现在,当我们通过SSH 登录时,我们可以输入一个密码来允许SD 卡解锁并继续启动过程,另一个密码会破坏LUKS 标头,使数据无法访问。如果您最终遇到无法找回设备的情况,此刻录设备的选项可能会非常有帮助。如果您想真正做到这一点,您还可以将其与将RPi 变成无线接入点相结合,从而允许您通过无线连接远程控制和解锁/核对系统。如果您无法持续直接访问RPi 将连接到的网络,这非常有用。

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。