本文讲的是基于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 
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。
原文链接

基于USB armory 制作一个USB恶意软件分析器相关推荐

  1. 硬件开发笔记(六): 硬件开发基本流程,制作一个USB转RS232的模块(五):创建USB封装库并关联原理图元器件

    `该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/125369228 红胖子网络科技博文大全:开发技术集合( ...

  2. 硬件开发笔记(八): 硬件开发基本流程,制作一个USB转RS232的模块(七):创建基础DIP元器件(晶振)封装并关联原理图元器件

    若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/125370284 红胖子网络科技博文大全:开发技术集合( ...

  3. 基于Android Tv制作一个Tv桌面(二)

    标题基于Android Tv制作一个Tv桌面(二) 这里是获取APP的各种信息,不知道为什么这一步只能在主类MainActivity 上进行,不能在其他的类进行此操作,也许是我见识短浅的原因吧,因为其 ...

  4. 基于小程序制作一个猜拳小游戏

    在工作学习之余玩一会游戏既能带来快乐,还能缓解生活压力,跟随此文一起制作一个小程序游戏吧. 创建小程序 功能实现 界面优化 代码块 创建小程序 访问微信公众平台,点击账号注册. 选择小程序,并在表单填 ...

  5. 基于Java+SpringBoot制作一个校园圈子小程序

    制作一个校园圈子小程序,有效连接信息供需双方,用户可获取和发布需求信息.参与互动交流,适用于同校.同城.社区交流.客户互动.同学/老师注册发布信息等场景. 微信小程序实战开发专栏 一.小程序 1.1 ...

  6. 基于JavaSpringBoot+uniapp制作一个打卡小程序

    生活中打卡的场景无处不在,上班打卡.景点打卡.活动打卡.课堂考勤打卡.在CSDN的APP上也有签到打卡,打卡的意义并在于打卡本身,而是在于能够成为更好的自己:跟随此文制作一个打卡系统互相督促.互相鼓励 ...

  7. 微信小程序|基于小程序制作一个超酷的个人简历

    你还在用以前的方式投简历吗?趁着金三银四来临之际,跟随此文使用小程序制作一个便携超酷的个人简历,高调炫技,愉快的收offer吧! 一.小程序 <

  8. 基于小程序制作一个ChatGPT聊天机器人

    在AI技术日新月异的浪潮中,将ChatGPT与实战开发相结合,制作一个随身携带的聊天机器人,紧贴前沿的同时稳固基础. 一.前言 1.1.什么是ChatGPT 1.2.什么是文本完成 二.API 2.1 ...

  9. 基于Java+SpringBoot制作一个论坛小程序

    制作一个论坛互动平台,让兴趣志同道合者用户聚集在这里交流话题.展示自我.结交朋友. 一.小程序 1.1 项目创建 1.2 首页 1.3 论坛板块页 1.4 个人中心页 1.5 帖子详情页 二.API ...

  10. 制作一个USB可燃气体声光报警器

    手头有一些闲置的模块和小电路板,选了几件做了一个科技小制作.利用Nano做核心,MQ9可燃气体检测模块做传感器,接上一个蜂鸣器和LED就可以制作这个报警器了. 一.硬件连接 电路图就是这样的咯,将MQ ...

最新文章

  1. Mac OS X 安装和配置Scala
  2. 建造者模式(Builder)
  3. 关于开发工具环境准备事项作为故事来处理的对话
  4. 新数据革命:开源图形化数据引擎Hawk5发布
  5. # 遍历结构体_C#学习笔记05--枚举/结构体
  6. 【 Grey Hack 】万金油脚本:常见端口获取shell
  7. 2017.3.6 种树 失败总结
  8. [iOS]swift版内购
  9. java 多线程数据分发_多线程分发处理List集合数据
  10. 聊聊这两天刷屏的OpenAI新作,你注意到CLIP了吗
  11. Java设计模式-简单工厂模式(Static Factory Method)
  12. python 坦克大战
  13. 关于metasploit的一些架构目录
  14. linux复制文件查看进度条,Linux 如何显示文件夹拷贝或者移动的进度条
  15. 华为认证网络工程师培训教程集
  16. 华夏银行笔试c语言,华夏银行笔试经验分享
  17. Xiuno 程序图文详细安装教程
  18. Java操作图片大全
  19. Android ImageView: resolveUri failed on bad bitmap uri
  20. 大数据行业再拉警报,51信用卡或将彻底沦陷?

热门文章

  1. 在OpenStack虚拟机实例中创建swap分区的一种方法
  2. stream、string、byte[] 互转
  3. matlab--sum函数用法
  4. Mac下虚拟机使用那些事儿
  5. Arturia DX7 V for Mac(模拟FM数字合成器)
  6. 夏天到啦!你的mac过热怎么办?教你几招过热技巧~
  7. 航天电子业绩下降近两成
  8. 如何在Azure中配置SQL Server 2008 R2故障转移群集实例
  9. python中的json模块
  10. ASP.NET 验证控件总结