本文讲的是
基于USB armory 制作一个USB恶意软件分析器,
前一段时间,一位朋友在自己电脑上插入了一个USB,但不巧的是,USB里含有病毒,结果电脑就中毒了……出于好奇和友情,我决定分析一下其中的恶意软件。于是我用USB armory在我的电脑上建立了一个安全隔离沙箱来分析它。
USB armory是由 Inverse Path 设计的一款开源硬件,它是一款U盘大小的微型计算机,通常受到信息安全人士和计算机极客的喜爱。它可以提供ARM A8 800 MHz CPU和512MB RAM,并且具有足够的功能来实现各种有趣的渗透测试。
在本文中,我发现的最有趣的功能之一是其安全启动的功能,称为HAB(High Assurance Boot),通过它可以更好地将USB armory的作用发挥到极致。有趣的是,上周我还听到过有一个有关此功能的安全建议。
好了,让我开始分析吧。假设现在安全启动中没有漏洞,利用USB ARMORY我可以将PKI密钥融合到安全引导中,并且只需更换每个分析目标的microSD卡,另外目标恶意软件没有很多方法来实现硬件持久性。
要注意的是,在打造USB分析器时,你还需要一个主机适配器,如果没有它,你将无法实现最后的目标。
USB armory可以在主机和非主机两种模式下使用。非主机模式是默认模式,允许你将USB armory插入USB端口,并可通过IP地址进行访问(使用CDC以太网仿真实现此功能)。USB armory基本上可以插入任何计算机并将另一台计算机通过它对接上。这种配置对于托管安全数据,某种HSM,安全通讯,TOR路由器,密码管理器,安全的比特币钱包等都是很有用的。
而主机模式则是本文要使用的模式,在这个配置中,USB ARMORY是一台独立的计算机,不过,我可以附加其他USB设备,例如键盘,USB显示器,以太网或WiFi加密狗等。只要有Linux驱动程序,你就可以将它们附加到USB ARMORY。通过这种方式,构建一个小型安全隔离沙箱的计算机是非常容易的。
由于之前,我曾为旅游中所连接的WiFi热点建立过防火墙,其具体想法就是将一个WiFi接口连接到公共网络,另一个WiFi或以太网加密狗连接到我的个人设备。通过这种方式,你就可以将你的设备与公共网络隔离开来,这样就避免了潜在的恶意攻击。除此之外,你还可以轻松利用这种方法添加TOR路由和任何其他好玩的功能,比如利用DNS隧道绕过烦人的机场网络等。
所以借助上面的经验,我也可以建立基于USB armory的分析器。
硬件要求:
USB ARMORY
USB ARMORY主机适配器
串行到USB适配器
USB 2.0 / 3.0 HUB
JUE130 USB 3.0千兆以太网适配器
一个或多个4GB + microSD卡兼容性列表
至少有一条micro-USB电缆(用于将主机适配器连接到电源)
电池电源组
软件要求:
Debian 8.x主机
设计如下:
在这种设计中,电池电源组用于为所有电源供电,但如果能自由移动,则自供电的USB集线器也可以正常工作。 USB ARMORY主机适配器也可以作为USB condom使用(只能充电的数据线),这意味着我可以安全地从普通的USB端口供电,如果需要的话,电池组还可以为USB供电,如果连接的设备太耗电,例如大硬盘,则可能需要额外的电源。 USB ARMORY连接到主机适配器的一端,而USB集线器连接到另一端,剩余的USB设备则连接到USB集线器。 USB以太网适配器可以连接到我要复制数据的网络中,以提高防火墙在USB ARMORY网络和我想要访问的任何网络之间的传输安全。
另外,反向路径和其他Linux发行版有几个预编译的安装映像,它们的默认配置是非主机模式。要启用这些映像上的主机模式,请参阅本文档https://github.com/inversepath/usbarmory/wiki/Host-adapter。
我没有在本次使用预编译的映像,因为在Linux内核没有组件支持我买的USB以太网适配器(虽然制造商提供的驱动程序可用),所以需要我用软件来进行自定义设置。最近的反向路径提供了一个Makefile来构建基于Debian的映像(而不是像以前一样复制和粘贴一系列命令)。
于是,我自定义了一个名为Armory Sandbox的 fork()函数,还给它增加了一些额外的取证软件包,还有一个Linux内核配置,其中包含了所有必需的驱动程序,例如USB以太网适配器,还有其他文件系统,例如HFS +。这些配置,都是为了支持我在目标USB设备中找到常见文件系统。如果在实践中,你还有任何特定要求,就需要生成新的内核配置文件并更新包含的内核配置文件。默认的Armory Sandbox内核配置位于kernel_conf / armorysandbox_linux-4.9.config。如果要更新内核配置,你需要执行以下操作:
KBUILD_BUILD_USER=usbarmory KBUILD_BUILD_HOST=usbarmory ARCH=arm CROSS_COMPILE=arm-none-eabi- make menuconfig
保存配置文件并复制旧配置文件或直接将其保存在内核配置,如果你不这样做,那么ARM CPU将为主机(在这种情况下为x86)建配置文件,如果你使用非graphical内核配置模式则更好,这样就可以使用其他make配置选项。
但在构建自己的映像之前,我还需要在Debian主机中安装一些所需的软件来构建根文件系统所需的ARM 交叉编译器和软件。
sudo apt-get install bc binfmt-support bzip2 gcc gcc-arm-none-eabi git gnupg make parted qemu-user-static wget xz-utils zip sudo debootstrap
由于Makefile要验证内核和U-Boot签名,因此我需要导入GPG密钥:
gpg --keyserver hkp://keys.gnupg.net --recv-keys 38DBBDC86092693E
gpg --keyserver hkp://keys.gnupg.net --recv-keys 87F9F635D31D7652
现在我就可以交叉编译ARM目标的代码。
要开始构建Armory Sandbox映像,首先要将repo复制到Debian主机中:
git clone https://github.com/gdbinit/armorysandbox
编辑Makefile并将你自己的ssh密钥添加到SSH_KEY变量中。
在实践中,你可以将默认的Debian镜像更改为更快的镜像,只需编辑DEBIAN_MIRROR变量即可。你也可能希望将默认的3500Mb图像大小设置为变量IMAGE_SIZE。假设用的是4GB的最小microSD卡。如果内存更大,我可以调整分区的大小以后的FAQ。如果你不想调整大小,你可以更改此选项,只不过需要更长的时间才能写入microSD卡。
默认帐户是usbarmory,密码与用户名相同。你应该更改默认密码(编辑Makefile,查找CHANGEME字符串)。
下一步就是通过四个步骤完成最终构建原始映像:
1.Debian文件系统和软件包,
2.Linux内核,
3.U-Boot的
4.将内核和U-Boot安装到原始映像中。
如果一切顺利,你最终得到一个armorysandbox-debian_jessie-base_image-YYYYMMDD.raw映像文件。现在我只需要将映像文件写入microSD卡:
Linux(使用dmesg验证目标终端):
sudo dd if=armorysandbox-debian_jessie-base_image-YYYYMMDD.raw of=/dev/sdX bs=1M conv=fsync
Mac OS X(使用diskutil列表验证目标终端):
sudo dd if=armorysandbox-debian_jessie-base_image-YYYYMMDD.raw of=/dev/rdiskN bs=1m
你不需要关心在microSD卡中分区的问题,此命令将擦除microSD卡中的所有内容,生成的原始映像已包含必要的分区信息。你要做的就是按Enter键,仔细检查目标设备。
dd完成写入映像后,然后就可以从主机中取出microSD卡,将其插入USB ARMORY。打开USB ARMORY的电源并连接串行控制台,并验证其是否正确启动。
默认的IP地址是10.1.0.1/24,没有任何配置的网关(至少默认情况下我不希望这个设备数据包被传送到任何地方)。你只需向使用网络的设备添加IP别名即可访问USB armory沙箱。
Mac OS X:
sudo ifconfig en0 alias 10.1.0.2 255.255.255.0
如果这个网络不行,只需编辑Makefile,然后再通过串口控制台登录,然后修改/ etc / network / interfaces配置文件即可。
如果要启用Secure Boot功能,应阅读Inverse Path安全引导文档。请记住,由于本文提到的安全问题,此功能目前不太有利用价值,但在某些场景中仍然有用。但具体我无法评估,例如某些恶意软件/漏洞可能能够对安全启动进行攻击,并以某种方式攻击我的设置。本文之所以没有包含这个设置的最大的原因是这个功能涉及永久性和不可逆转的功能。
要添加软件包,你需要编辑Makefile并使用qemu-debootstrap命令修改该行。如果你真的需要有问题的程序包,并且无法构建映像,则可以随时通过apt-get或dpkg添加它们(可以手动上传它们,也可以将armory连接到Internet)。
当Armory Sandbox完成启动时,你可以通过串行控制台或SSH登录,插入任何支持的USB设备,挂载并分析其文件系统,或将其映像到另一台设备上进行分析。完成分析后,你可以放弃microSD,如果你想要真正安全,或者将其擦除并重写你构建的Armory Sandbox映像的话。就会带来了一个额外的问题,如何安全地擦除microSD卡?
本文的目的是首先尝试建立一个隔离的USB分析系统。例如,Circl.lu已经使用Raspberry Pi设备构建了CIRCLean USB Sanitizer。该设备的问题是它尝试自动将不受信任的文档转换为另一种格式,对我来说更重要的是它能使用相同的“隔离”设备访问感染的USB和好的USB。我更喜欢通过网络来解决问题,因为我可以在隔离设备和台式机之间添加防火墙。此外,我不想自动化任何数据转换,我只想要一个安全隔离网闸。
原文发布时间为:2017年6月20日
本文作者:xiaohui
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。