模拟键盘攻击:BadUsb 简单教学

3,340 阅读8分钟

本文来自作者  凌云 在 GitChat 上精彩分享    阅读原文」看看大家与作者交流了哪些问题

【不要错过文末彩蛋

编辑 | 娜迦

前言

初次接触硬件入侵,很多原理不懂,文章中可能有些误导的话,如有不对麻烦多多纠正。寻找志同道合的小伙伴一起学习。

主角:BadUsb

首先来介绍一下 Badusb 是什么吧。

参考文章:新的U盘自动运行—BadUSB 原理与实现 - 博客 - 腾讯安全应急响应中心

利用烧鹅制作简单BadUSB,插谁谁怀孕 - 安全客 - 有思想的安全新媒体

极客 DIY | 打造你的专属黑客U盘—BadUSB

操作步骤

  1. 准备一块开发板(文章底部我会给出购买链接)

  2. 下载一个 Arduino ide 编程软件(下载地址文章底部会给出)

  3. 准备写入 badusb 板子的代码(即是命令)

什么是Arduino ide?

Arduino 是一款便捷灵活、方便上手的开源电子原型平台。包含硬件(各种型号的 Arduino 板)和软件(Arduino IDE)。由一个欧洲开发团队于2005年冬季开发。

其成员包括 Massimo Banzi、David Cuartielles、Tom Igoe、Gianluca Martino、David Mellis 和 Nicholas Zambetti 等。

它构建于开放原始码 simple I/O 介面版,并且具有使用类似 Java、C 语言的 Processing/Wiring 开发环境。

主要包含两个主要的部分:硬件部分是可以用来做电路连接的 Arduino 电路板;另外一个则是 Arduino IDE,你的计算机中的程序开发环境。

你只要在IDE中编写程序代码,将程序上传到 Arduino 电路板后,程序便会告诉 Arduino 电路板要做些什么了。

Arduino 能通过各种各样的传感器来感知环境,通过控制灯光、马达和其他的装置来反馈、影响环境。板子上的微控制器可以通过 Arduino 的编程语言来编写程序,编译成二进制文件,烧录进微控制器。

对 Arduino 的编程是通过 Arduino 编程语言 (基于 Wiring)和 Arduino 开发环境(基于 Processing)来实现的。

基于 Arduino 的项目,可以只包含 Arduino,也可以包含 Arduino 和其他一些在 PC 上运行的软件,他们之间进行通信 (比如 Flash, Processing, MaxMSP)来实现。[1]

参考文章:

https://security.tencent.com/index.php/blog/msg/74

BadUSB原理

在介绍BadUSB的原理之前,笔者在这里先介绍下 BadUSB 出现之前,利用HID(Human InterfaceDevice,是计算机直接与人交互的设备,例如键盘、鼠标等)进行攻击的两种类型。分别是「USB RUBBERDUCKY」和「Teensy」。

TEENSY介绍

攻击者在定制攻击设备时,会向 USB 设备中置入一个攻击芯片,此攻击芯片是一个非常小而且功能完整的单片机开发系统,它的名字叫 TEENSY。

通过 TEENSY 你可以模拟出一个键盘和鼠标,当你插入这个定制的 USB 设备时,电脑会识别为一个键盘,利用设备中的微处理器与存储空间和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启,都可以成功。

参考文章:

http://bobao.360.cn/learning/detail/431.html

漏洞背景

「BadUSB」是今年计算机安全领域的热门话题之一,该漏洞由 Karsten Nohl 和 Jakob Lell 共同发现,并在今年的 BlackHat 安全大会上公布。 BadUSB 号称是世界上最邪恶的USB外设。

笔者使用他们的代码做了个类似的U盘,用户插入U盘,就会自动执行预置在固件中的恶意代码,下载服务器上恶意文件,执行恶意操作。

注意,这里的U盘自动运行可不是以前的 autorun.inf 自动运行程序哦,具体的技术细节可以参考后文内容。

USB RUBBER DUCKY介绍

简称USB橡皮鸭,是最早的按键注入工具,通过嵌入式开发板实现,后来发展成为一个完全成熟的商业化按键注入攻击平台。

它的原理同样是将USB设备模拟成为键盘,让电脑识别成为键盘,然后进行脚本模拟按键进行攻击。

USB协议漏洞

为什么要重写固件呢?下面我们可以看看USB协议中存在的安全漏洞。

现在的USB设备很多,比如音视频设备、摄像头等,因此要求系统提供最大的兼容性,甚至免驱;

所以在设计USB标准的时候没有要求每个USB设备像网络设备那样占有一个唯一可识别的MAC地址让系统进行验证,而是允许一个USB设备具有多个输入输出设备的特征。

这样就可以通过重写U盘固件,伪装成一个USB键盘,并通过虚拟键盘输入集成到U盘固件中的指令和代码而进行攻击。

OK,了解了以上的步骤。我们来操作。

模拟HID攻击,外形可以像U盘,但实际上是一块开发板。我们可以往里面放入代码。比如:远程下载,窃取 WIFI 密码..等等这些代码。

实践

通过某包我去搜索了一下关于 arduino 开发板有没有的卖。

找到了一块性价比较高的板子,现在那间店铺找不到了。我就不贴图了。

十几块钱就有了,如果你想伪装性好的话是有壳的,但是价格就高了。板子到了,等了差不多一周的时间..快递终于到了,不得不吐槽一下某达的快递速度

板子实物图

是不是很简陋?因为没有壳的,如果有壳的样子跟U盘一样,但拆开都这样了。

我是买没有壳的,因为第一次接触,还很多不懂买着便宜的去了解一下吧。

由于是没有插口的,所以只能用数据线去代替。

插上之后会亮一下红灯,接着绿灯一直在亮。如果你的没有亮,可能是坏了吧哈哈

我当时一直在网吧测试,插上之后没反应,于是我一直在找问题,发现是驱动安装失败。

当时很苦恼啊,你安装驱动吧,又要重启才能生效,重启后又还原了。

而且笔记本一直在修,拖了好几天。

昨天我终于测试完成。

把代码写入 BadUsb 里面。

需要的工具:Arduino ide

下载完成后解压,并且打开文件夹,打开 arduino 的程序

打开之后界面如下:

下面拿一段远程下载代码来作为演示

我们把上面这段代码,复制先,然后粘贴到 Arduino ide 里面。

粘贴之后,选择你的板子,和端口。如下图。

工具—板—端口

如果你不知道你的是什么板子和端口,可以在设备管理查看

接着端口 COM 和 LPT 可以看到,由于我现在写文章是在网吧,所以没有驱动是不行的

选择完端口和板子之后就上传

接着会出现一个保存路径,可以保存在桌面。随便都行。

保存完成之后就能启动了。

代码如果看不懂的话,留在交流群上我会详细点给各位讲。因为写作平台上传图片实在是不方便。

推荐的板子

  1. CJMCU-Beetle 价格39 邮费12

    https://item.taobao.com/item.htm?spm=a230r.1.14.8.dXcUK1&id=42830879568&ns=1&abbucket=7#detail

  2. CJMCU-32有壳 价格56 邮费12(伪装好)

    https://item.taobao.com/item.htm?spm=a230r.1.14.4.dXcUK1&id=536421581630&ns=1&abbucket=7#detail

  3. arduino Leonardo 价格18 邮费6(性价比高)

    https://item.taobao.com/item.htm?spm=a230r.1.14.62.NnzAY2&id=531457877154&ns=1&abbucket=7#detail

仅供推荐,店铺和我没有利益关系,各位自行选择板子也可以。

彩蛋

重磅 Chat

高效学习,快速变现:不走弯路的五大学习策略

分享人:  

Seaborn Lee, 一名会在 B 站直播写代码,会玩杂耍球、弹 Ukulele、极限健身、跑步、写段子、画画、翻译、写作、演讲、培训的程序员。喜欢用编程实现自己的想法,在 Android 市场上赚过钱,有多次创业经历。

擅长学习,习惯养成,时间管理。身体力行地影响他人做出积极的改变!目前就职于 ThoughtWorks,致力于传播快乐高效的编程理念。业余创立软件匠艺社区 CodingStyle.cn,组织超过30场技术活动。

Chat简介:

说到学习呀,真是头大哟:

  • 碎片化,没有较长的连续时间来学习

  • 难专注,捧起书,手机却在召唤:来呀,快活呀~ 反正有,大把时光~

  • 做不到,看了很多书,生活中却做不到

  • 然并卵,学了方法和工具,找不到使用场景

  • 效率低,学习速度跟不上知识产生的速度

  • 记不牢,学习速度赶不上遗忘速度

在这个知识泛滥、跨界竞争的年代,学习能力才是核心竞争力。你想想,过去一周,有没有哪一件工作是不需要学习就能完成的?

尽管如此重要,大部分人却没研究过学习这件事,以为上下班路上打开「得到」听本书,就是碎片时间终身学习者了。

想要免费 参与本场 Chat ?

关注 「GitChat 技术杂谈」 公众号

并在后台回复 「高效学习」

👇

阅读原文」查看本次 Chat 交流实录