利用Arduino快速制作Teensy BadUSB

卫斯理
发布于 2021-1-22 10:34
浏览
0收藏

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盘的操作系统而进行攻击的。利用Arduino快速制作Teensy BadUSB-鸿蒙开发者社区

USB协议漏洞

 

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

  现在的USB设备很多,比如音视频设备、摄像头等,因此要求系统提供最大的兼容性,甚至免驱;所以在设计USB标准的时候没有要求每个USB设备像网络设备那样占有一个唯一可识别的地址让系统进行验证,而是允许一个USB设备具有多个输入输出设备的特征。这样就可以通过重写U盘固件,伪装成一个USB键盘,并通过虚拟键盘输入集成到U盘固件中的指令和代码而进行攻击。

 

BadUSB利用代码分析

 

 笔者对KarstenNohl和Jakob Lell公布的代码进行简单的一个流程解析。利用Arduino快速制作Teensy BadUSB-鸿蒙开发者社区

这样一个带有恶意代码的U盘就产生了,更详细的可以搜索Karsten Nohl 和 Jakob Lell公布的代码

 

利用Arduino制作TEENSY

 

 Arduino是让一种叫做单片机的小型可编程电脑尽可能简单地被使用,并且单片机可以让物体获得交互功能。

  来看一下我们需要准备的材料:

Arduino Leonardo //小型单片机模拟USB

Arduino IDE //用于烧录代码的编译器  http://pan.baidu.com/s/1hsC7OOk

安卓数据线 //用于连接电脑USB

PC一台 //ok我们可以开工了

 

Arduino Leonardo 单片机长这样:利用Arduino快速制作Teensy BadUSB-鸿蒙开发者社区

 

下载IDE

 

地址:http://pan.baidu.com/s/1hsC7OOk

  安装以后的界面如下:

利用Arduino快速制作Teensy BadUSB-鸿蒙开发者社区

 

 编写代

 

  在编辑器界面选择文件选项卡,然后点击保存,我这边先放到桌面, 比较好找

  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);//延时1000毫秒,不要太短,因为每天电脑的运行速度都不一样 
    
    Keyboard.press(KEY_CAPS_LOCK); //按下大写键 这里我们最好这样写 不然大多数电脑在中文输入的情况下就会出现问题
    
    Keyboard.release(KEY_CAPS_LOCK); //释放大写键
    
    delay(500);
    
    Keyboard.press(KEY_LEFT_GUI);//按下徽标键 也就是win键 
    
    delay(500); 
    
    Keyboard.press('r');//按下r键 
    
    delay(500); 
    
    Keyboard.release(KEY_LEFT_GUI);//松掉win键 
    
    Keyboard.release('r');//松掉r键 
    
    delay(500); 
    
    Keyboard.println("cmd");//输入cmd进入DOS
    
    delay(500); 
    
    Keyboard.press(KEY_RETURN);  //按下回车键
    
    Keyboard.release(KEY_RETURN); //释放回车键
    
    delay(500); 
    
    Keyboard.println("echo first test");
    
    Keyboard.press(KEY_RETURN);  //按下回车键
    
    Keyboard.release(KEY_RETURN); //释放回车键
    
    delay(500);
    
    Keyboard.press(KEY_CAPS_LOCK); //按下大写键
    
    Keyboard.release(KEY_CAPS_LOCK); //释放大写键 我们再次关闭开启的大写键
    
    delay(500);
    
    Keyboard.end();//结束键盘通讯 

} 

void loop()//循环,这里的代码

{ 

//循环体 写入你要循环的代码

}

 

 点击编辑器中验证的按钮:

利用Arduino快速制作Teensy BadUSB-鸿蒙开发者社区

 验证通过以后, 把芯片USB插入电脑, 等待USB灯亮了以后, 在编辑器中选择==》工具 ==》 开发板 ==》 arduino leonardo 

  再选择 工具 ==》 端口 ==》 COM端口(每一台机器端口不同)利用Arduino快速制作Teensy BadUSB-鸿蒙开发者社区

上传代码

 点击编辑器的开始按钮, 开始上传代码到芯片中

利用Arduino快速制作Teensy BadUSB-鸿蒙开发者社区

带上芯片, 重新插入电脑, 会自动弹出CMD并执行命令;

 

 

作者: NONO
出处:http://www.cnblogs.com/diligenceday/

 

 

 

分类
已于2021-1-22 10:34:48修改
收藏
回复
举报
回复
    相关推荐