利用Arduino快速制作Teensy BadUSB, 攻击计算机
BadUsb介绍
BadUSB是计算机安全领域的热门话题之一,该漏洞由Karsten Nohl和Jakob Lell共同发现,并在2014年的BlackHat安全大会上公布。 虽然已隔一两年,但还是有人在研究它,它的攻击方式也多种多样。
使用他们的代码做了个类似的U盘,用户插入U盘,就会自动执行预置在固件中的恶意代码,下载服务器上恶意文件,执行恶意操作——注意,这里的U盘自动运行可不是以前的autorun.inf自动运行程序哦,具体的技术细节可以参考后文内容。
参考这个视频的演示: http://v.youku.com/v_show/id_XODQ0NzYxNDg0.html
BadUSB最可怕的一点是恶意代码存在于U盘的固件中,由于PC上的杀毒软件无法访问到U盘存放固件的区域,因此也就意味着杀毒软件和U盘格式化都无法应对BadUSB进行攻击。
【BadUSB原理】
在介绍BadUSB的原理之前,笔者在这里先介绍下BadUSB出现之前,利用HID(Human InterfaceDevice,是计算机直接与人交互的设备,例如键盘、鼠标等)进行攻击的两种类型。分别是"USB RUBBERDUCKY"和"Teensy"。
- USB RUBBERDUCKY:简称USB橡皮鸭,是最早的按键注入工具,通过嵌入式开发板实现,后来发展成为一个完全成熟的商业化按键注入攻击平台。它的原理同样是将USB设备模拟成为键盘,让电脑识别成为键盘,然后进行脚本模拟按键进行攻击。
- TEENSY:攻击者在定制攻击设备时,会向USB设备中置入一个攻击芯片,此攻击芯片是一个非常小而且功能完整的单片机开发系统,它的名字叫TEENSY。通过TEENSY你可以模拟出一个键盘和鼠标,当你插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器与存储空间和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启,都可以成功。
TEENSY介绍
攻击者在定制攻击设备时,会向USB设备中置入一个攻击芯片,此攻击芯片是一个非常小而且功能完整的单片机开发系统,它的名字叫TEENSY。通过TEENSY你可以模拟出一个键盘和鼠标,当你插入这个定制的USB设备时,电脑会识别为一个键盘,利用设备中的微处理器与存储空间和编程进去的攻击代码,就可以向主机发送控制命令,从而完全控制主机,无论自动播放是否开启,都可以成功。
关于TEENSY,可以参考天融信阿尔法实验室的《HID攻击之TEENSY实战》
U盘由芯片控制器和闪存两部分组成,芯片控制器负责与PC的通讯和识别,闪存用来做数据存储;闪存中有一部分区域用来存放U盘的固件,它的作用类似于操作系统,控制软硬件交互;固件无法通过普通手段进行读取。
BadUSB就是通过对U盘的固件进行逆向重新编程,相当于改写了U盘的操作系统而进行攻击的。
USB协议漏洞
为什么要重写固件呢?下面我们可以看看USB协议中存在的安全漏洞。
现在的USB设备很多,比如音视频设备、摄像头等,因此要求系统提供最大的兼容性,甚至免驱;所以在设计USB标准的时候没有要求每个USB设备像网络设备那样占有一个唯一可识别的MAC地址让系统进行验证,而是允许一个USB设备具有多个输入输出设备的特征。这样就可以通过重写U盘固件,伪装成一个USB键盘,并通过虚拟键盘输入集成到U盘固件中的指令和代码而进行攻击。
BadUSB利用代码分析
笔者对KarstenNohl和Jakob Lell公布的代码进行简单的一个流程解析。
这样一个带有恶意代码的U盘就产生了,更详细的可以搜索Karsten Nohl 和 Jakob Lell公布的代码
利用Arduino制作TEENSY
Arduino是让一种叫做单片机的小型可编程电脑尽可能简单地被使用,并且单片机可以让物体获得交互功能。
来看一下我们需要准备的材料:
- Arduino Leonardo //小型单片机模拟USB
- Arduino IDE //用于烧录代码的编译器 http://pan.baidu.com/s/1hsC7OOk
- 安卓数据线 //用于连接电脑USB
- PC一台 //ok我们可以开工了
Arduino Leonardo 单片机长这样:
下载IDE
地址:http://pan.baidu.com/s/1hsC7OOk
安装以后的界面如下:
编写代码
在编辑器界面选择文件选项卡,然后点击保存,我这边先放到桌面, 比较好找
setup函数内部是默认执行的代码, loop函数是循环执行的代码;
以上只是程序给我们搭好的框架,实际代码要我们自己去编写。我们让USB对电脑进行操作主要是想实现自动化键盘操作,所以我们这边就要用到arduino的键盘函数
- #include<Keyboard.h> //包含键盘模块的头文件
- Keyboard.begin(); //开启键盘通信
- Keyboard.press(); //按下某个键
- Keyboard.release(); //释放某个键
- Keyboard.println(); /*输入某些内容 和一些网上的解释不同 网上解释是输入内容并且能回车,而我测试的时候并不能回车 可能和版本有关 不要不要担心有办法回车*/
- Keyboard.end(); //结束键盘通信
有编程经验的同学都知道怎么用了, 我们重新编写以上的测试代码:
- #include<Keyboard.h> //包含键盘模块头文件
- void setup(){ //初始化
- Keyboard.begin();//开始键盘通信
- delay();//延时1000毫秒,不要太短,因为每天电脑的运行速度都不一样
- Keyboard.press(KEY_CAPS_LOCK); //按下大写键 这里我们最好这样写 不然大多数电脑在中文输入的情况下就会出现问题
- Keyboard.release(KEY_CAPS_LOCK); //释放大写键
- delay();
- Keyboard.press(KEY_LEFT_GUI);//按下徽标键 也就是win键
- delay();
- Keyboard.press('r');//按下r键
- delay();
- Keyboard.release(KEY_LEFT_GUI);//松掉win键
- Keyboard.release('r');//松掉r键
- delay();
- Keyboard.println("cmd");//输入cmd进入DOS
- delay();
- Keyboard.press(KEY_RETURN); //按下回车键
- Keyboard.release(KEY_RETURN); //释放回车键
- delay();
- Keyboard.println("echo first test");
- Keyboard.press(KEY_RETURN); //按下回车键
- Keyboard.release(KEY_RETURN); //释放回车键
- delay();
- Keyboard.press(KEY_CAPS_LOCK); //按下大写键
- Keyboard.release(KEY_CAPS_LOCK); //释放大写键 我们再次关闭开启的大写键
- delay();
- Keyboard.end();//结束键盘通讯
- }
- void loop()//循环,这里的代码
- {
- //循环体 写入你要循环的代码
- }
点击编辑器中验证的按钮:
验证通过以后, 把芯片USB插入电脑, 等待USB灯亮了以后, 在编辑器中选择==》工具 ==》 开发板 ==》 arduino leonardo
再选择 工具 ==》 端口 ==》 COM端口(每一台机器端口不同)
上传代码
点击编辑器的开始按钮, 开始上传代码到芯片中
带上芯片, 重新插入电脑, 会自动弹出CMD并执行命令;
HID攻击之TEENSY实战 : http://blog.topsec.com.cn/ad_lab/hid%E6%94%BB%E5%87%BB%E4%B9%8Bteensy%E5%AE%9E%E6%88%98/
新的U盘自动运行——BadUSB原理与实现 : https://security.tencent.com/index.php/blog/msg/74
利用BadUsb5秒内黑掉一台电脑 : http://www.52pojie.cn/thread-427287-1-1.html
作者: NONO
出处:http://www.cnblogs.com/diligenceday/
企业网站:http://www.idrwl.com/
开源博客:http://www.github.com/sqqihao
QQ:287101329
微信:18101055830
厦门点燃未来网络科技有限公司, 是厦门最好的微信应用, 小程序, 微信网站, 公众号开发公司
利用Arduino快速制作Teensy BadUSB, 攻击计算机的更多相关文章
- 利用Arduino快速制作Teensy BadUSB
0×00 介绍 本文想以较简单的方式,叙述Arduino版BadUSB的制作过程.我知道在这之前已经有很多前辈都写过相关的文章,但小白可能还有点迷糊,所以这篇文章是快速带大家入门了解,我也是菜B大神不 ...
- 基于ArduinoLeonardo板子的BadUSB攻击实战
0X00 前言 在Freebuf上许多同学已经对HID攻击谈了自己的看法,如维克斯同学的<利用Arduino快速制作Teensy BadUSB>无论从科普还是实践都给我们详尽的描述了Bad ...
- 利用Python快速绘制海报级别地图
1 简介 基于Python中诸如matplotlib等功能丰富.自由度极高的绘图库,我们可以完成各种极富艺术感的可视化作品,关于这一点我在系列文章在模仿中精进数据可视化中已经带大家学习过很多案例了. ...
- 利用Bootstrap框架制作查询页面的界面
UI设计实战篇——利用Bootstrap框架制作查询页面的界面 Bootstrap框架是一个前端UI设计的框架,它提供了统一的UI界面,简化了设计界面UI的过程(缺点是定制了界面,调整的余地不是太 ...
- CorelDRAW快速制作闪耀钻石项链效果
今天小编为大家分享使用CorelDRAW快速制作闪耀钻石项链效果,过程并不是很复杂,主要用到刻刀工具.智能填充和渐变色的应用,待到一个角完成之后会走一点点捷径,利用旋转复制的方法做出完整的钻石效果,最 ...
- Photoshop将普通照片快速制作二次元漫画风格效果
今天为大家分享Photoshop将普通照片快速制作二次元漫画风格效果,教程很不错,对于喜欢漫画的朋友可以参考本文,希望能对大家有所帮助! 一提到日本动画电影,大家第一印象肯定是宫崎骏,但是日本除了宫崎 ...
- 利用Nodejs快速构建应用原型
利用Nodejs快速构建应用原型 开发一个应用往往需要快速的构建原型,然后在此基础上设计和改进,前端可能立马能看到效果,但是后端业务逻辑不会那么快,这个时候其实我们需要额只是一些模拟数据,所以不需要真 ...
- 在不格式化原有系统盘的情况下,利用grub4dos+firadisk制作RamOS VHD Win7总结
在不格式化原有系统盘的情况下,利用grub4dos+firadisk制作RamOS VHD Win7总结在不格式化原有系统盘的情况下,用grub4dos+firadisk安装WIN7到VHD,内存大的 ...
- 【公开课】《奥威Power-BI基于微软示例库(MSSQL)快速制作管理驾驶舱》文字记录与反馈
本期分享的内容: <奥威Power-BI基于微软示例库(MSSQL)快速制作管理驾驶舱> 时间:2016年11月02日 课程主讲人:叶锡文 从事商业智能行业,有丰富的实施经验,擅长 ...
随机推荐
- Unreal Engine 4(虚幻UE4)GameplayAbilities 插件入门教程(三)技能标签(Ability Tags)
本教程参考了https://wiki.unrealengine.com/GameplayAbilities_and_You,如果没有学习前两篇教程,请前往学习. GameplayAbilities插件 ...
- python新手之2变量
变量 变量是将储存的值保存在内存中.当声明一个变量的时候会在内存中开辟一个储存内容的位置. 基于变量的数据类型,解释器分配内存空间并决定储存的内容.因此我们可以通过变量分配不同的数据类型,可以在变量中 ...
- 一步一步学Vue(二)
接上篇,在本篇中,我们将要实现如下,功能,编辑和查询,我们当前的todolist程序,和线上其它的demo程序不同,我们会对其进行增删改查的基本操作,之后进行进一步的完善,按照常规的系统使用经验,一般 ...
- Ubuntu安装桌面环境
1.安装Ubuntu默认的Gnome桌面: sudo apt-get install ubuntu-desktop 2.不安装默认组件,例如Evolution和OpenOffice: sudo apt ...
- python函数(2):函数进阶
昨天说了函数的一些最基本的定义,今天我们继续研究函数.今天主要研究的是函数的命名空间.作用域.函数名的本质.闭包等等 预习: 1.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成整个文件的 ...
- 云游戏学习与实践(二)——安装GamingAnywhere
安装GamingAnywhere 一.GamingAnywhere项目 GamingAnywhere是一个开源的实现云游戏的引擎,并且高效.跨平台.易扩展.可调配. GitHub地址:https:// ...
- 【JAVASCRIPT】React学习-巧用 props 的 children 属性实现内容填充
背景 平常写组件,经常遇到需要获取内容放入组件内部的情形. 实现方法 我们有两种实现方式 1. 自定义 props render 的时候通过获取 this.props.content 填充到组件内部 ...
- Maven “Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:create...”问题总结
今天学习Maven的过程中,一直遇到一个问题:用maven指令构建新项目时,一直报错,用的 Maven 3.2 , JDK 6. 构建的命令: 错误信息: 解决方案: 在StackOverFlow上找 ...
- 三.GC相关之三分钟认识GC算法
GC算法慢慢演化,进化到了现在的分代GC.其进化过程 标记-清除算法 –> 标记-复制算法 –> 标记-整理算法 –> 分代算法. 在介绍算法之前,我们知道Java是动态加载.其特点 ...
- 3624: [Apio2008]免费道路
Description Input Output Sample Input 5 7 2 1 3 0 4 5 1 3 2 0 5 3 1 4 3 0 1 2 1 4 2 1 Sample Output ...