我正在尝试为公共当局制定一个项目:为Raspberry Pi
那些自己买不起电脑的家庭提供一种电脑。附带一张 SD 卡,其中包含Raspbian
操作系统和一些已安装的有用软件。
这意味着我必须要求一些提供商为我们创建,比方说:500 个 SD 卡以及我们将提供的脚本:安装Raspbian
版本XYZ然后做apt-get install ...
但存在安全问题。我如何确保提供商不是恶意的并尝试添加我们不希望在 SD 卡上看到的任何其他软件?
如果我随机取出一张 SD 卡并将其插入 a 中,有没有办法检查Rasperry Pi
SD 卡是否已按照我预期的方式使用良好的命令创建?
答案1
无法检查某人如何代表您设置操作系统。隐藏事情总是有可能的。如果供应商存在恶意行为的风险,那么您唯一的选择是
- 与更值得信赖的供应商合作
- 确保您逐字节了解应安装的映像。如果您向供应商发送精确的图像而不仅仅是脚本,这是可行的......
您可以记录映像上每个分区的 sha256sum(哈希值),然后与 SD 卡进行比较在你插入电源并启动它之前。虽然理论上他们可以添加一个额外的分区,但这很容易发现。
您无法使用图像哈希的原因是,如果 SD 卡比您预期大或小一个字节,那么哈希将无效。即使在声称具有指定尺寸的卡之间,SD 卡的尺寸也确实存在差异。
记录分区哈希值的步骤
这些步骤可以在任何 Linux 机器上运行。您可以使用具有足够大SD的树莓派(建议至少16GB)
下载您想要使用的图像。例如:最新的树莓派图像:
wget --content-disposition https://downloads.raspberrypi.org/raspbian_full_latest unzip *raspbian-stretch-full.zip
ls -lh *raspbian* -rw-r--r-- 1 philip philip 5.1G Apr 8 19:43 2019-04-08-raspbian-stretch-full.img -rw-r----- 1 philip philip 2.0G Apr 8 19:48 2019-04-08-raspbian-stretch-full.zip
自定义图像。
- 设置环回设备
sudo losetup /dev/loop0 2019-04-08-raspbian-stretch-full.img sudo partprobe /dev/loop0
ls -lh /dev/loop0* brw-rw---- 1 root disk 7, 0 May 15 19:18 /dev/loop0 brw-rw---- 1 root disk 259, 0 May 15 19:18 /dev/loop0p1 brw-rw---- 1 root disk 259, 1 May 15 19:18 /dev/loop0p2
- 获取每个分区的 sha256sum(这需要一段时间!)。将其保存到文件中。
sudo sha256sum /dev/loop0p* 66aa77d8405ab585865d0e0378f06bd8baa5ab41bbb6e9cc23ac6b2be40974d4 /dev/loop0p1 1895a2c5d9e93eb3b644d8cacab9d928184290e30bba6d27b7eb9d486c30e5e8 /dev/loop0p2
- 清理
sudo partx -d /dev/loop0 sudo losetup -d /dev/loop0
检查哈希值
将卡插入任何正在运行的 Linux 机器。如果你想使用树莓派,你可以使用USB SD读卡器插入你想要检查的卡作为第二张卡。
该卡将显示为新驱动器,例如/dev/sda
或/dev/sdb
...
假设它显示为/dev/sda
,您就可以获取每个分区的哈希值:
ls -lh /dev/sd*
brw-rw---- 1 root disk 8, 16 May 9 12:23 /dev/sda
brw-rw---- 1 root disk 8, 17 May 9 12:23 /dev/sda1
brw-rw---- 1 root disk 8, 18 May 9 12:23 /dev/sda2
sudo sha256sum /dev/sda1 /dev/sda2
66aa77d8405ab585865d0e0378f06bd8baa5ab41bbb6e9cc23ac6b2be40974d4 /dev/sda1
1895a2c5d9e93eb3b644d8cacab9d928184290e30bba6d27b7eb9d486c30e5e8 /dev/sda2
自定义图像
这些步骤不能在任何 Linux 机器上运行,它们需要像树莓派上的那样的 ARM 处理器。
挂载之前创建的环回分区 (
/dev/loop0p2
)。操作系统安装在p2
引导配置上p1
。mkdir rpi-os sudo mount /dev/loop0p2 rpi-os
df -h foo Filesystem Size Used Avail Use% Mounted on /dev/loop0p2 4.9G 4.4G 202M 96% /home/philip/rpi-os
- chroot进入已挂载的文件系统
sudo chroot rpi-os
- 安装您想要的任何软件,进行任何您想要的更改。例如:
apt-get update apt-get install some-new-package
- 退出并卸载
df -h rpi-os Filesystem Size Used Avail Use% Mounted on /dev/loop0p2 4.9G 4.5G 149M 97% /home/philip/rpi-os
exit sudo umount rpi-os
答案2
有没有办法检查Linux以某种方式安装,是的。
忽略合法的更新和配置文件修改......
- 首先也许使用 LUKS 来加密 linux 根分区{这将是一个额外的防御,但会带来其他复杂性}
- 首先校验所有相关文件
- 显然内核通常位于 /boot 中vmlinuz...某事
相应的initrd、initramfs、grub和efi文件都在/boot下
在linux中使用AIDE,其中一个linux运行的是一个校验和数据库,这将有助于检测入侵
编写一些脚本来检查基本内容是否符合预期:文件系统布局、安装的文件夹、启用/禁用的服务(chkconfig 或 systemctl)
如果一切都检查无误,那么人们就可以在一定程度上确定一切都正常。错误警报会出现问题,例如,您现在进行了合法的内核更新,需要更改校验和以对应新内核,如果不是,则会将其红色标记为已更改。并区分 .conf 和其他重要文件以及真正重要的文件与那些可以更改但会导致您不关心或不应该关心的影响的文件。
我如何确保提供商不是恶意的并尝试添加我们不希望在 SD 卡上看到的任何其他软件?
这是一个价值百万美元的问题……你怎么知道{不分具体顺序} ubuntu、suse、redhat/centos、debian,无论 Linux“提供商”是谁,都没有插入某些内容?答案=选择一个好的提供商。偏执地说,缺少“Linux 内核源代码”,然后检查所有源代码以确保“他们”没有插入某些内容...然后检查与 linux 一起运行的所有 1000+ rpm,使其正常工作,例如gnome 和 glibc 使某些东西没有被溜进去......存在风险。您要在多大程度上最大限度地减少这种风险取决于您。有大约 100 多个 Linux 提供商,选择一个已经存在且大部分经过审查的提供商...例如 ubuntu、debian、suse、rh...
答案3
坚持OP的问题:
如果我随机取出一张 SD 卡并将其插入到 Rasperry Pi 中,有没有办法检查 SD 卡是否已按照我预期的方式通过良好的命令创建?
如果你将一张卡插入 Raspberry Pi 然后启动它,恐怕你将无法检查上面安装的内容:任何 rootkit 的目的都是隐藏自己的存在。
当然,解决方案是根本不启动它,而是从您拥有且信任的系统中读取/调查/比较它。