本文原创作者:MR.zhang
原创投稿详情:重金悬赏 | 合天原创投稿等你
本篇文章在上篇文章上做了改进,写得更详细生动,可收藏学习!
0x01 WhatIs HID
HID全称为Human Interface Device直译为人类接口设备,也被称为人体学输入设备,是指与人类直接交互的计算机设备,而pc端上的”HID”一般指的是USB-HID标准,更多指微软在USB委员会上提议创建的一个人体学输入设备工作组。
说了这么多,其实就是设备管理器里的…这个
1.1HID标准的概念之前,设备往往要匹配鼠标和键盘,更换新的设备时候,就需要重载所有协议和设备,极其繁琐
类似于TCP/IP协议族一样,在标准化协议发布之前,设备之间的通讯由开发商单方面的协议主导,不同品牌的设备从而因为协议不同,而无法通信。
1.2而HID标准概念之后,所有HID定义的设备驱动程序提供可包含任意数量数据类型和格式的自我描述包。计算机上的单个HID驱动程序就可以解析数据和实现数据I/O与应用程序功能的动态关联。
1.3可以说:HID标准的诞生让接口类型,功能更加丰富,多样化,同时也加快了设备的创新与发展。
0X02 What Is HID attack
HIDattack 通过插入带有攻击向量的USB设备等方式,恶意代码直接就被加载执行,攻击操作也就瞬时发生。此类方式属于物理层面攻击。
相对来说,攻击者控制了用户的键盘,则就可以说控制了对方主机的权限。
攻击者可以在一个芯片中,写入编程进去的恶意代码,诱导用户,或其他方式插入主机中,即可完成整个攻击操作。
2.1那么造成HID攻击的原因到底是什么
HID设备类协议缺陷
在聊HID设备标识符之前,先说说鼠标和键盘。早期的鼠标键盘,如果网龄久一些的话,都知道,是那种PS/2的接口。
在今天,大部分的鼠标和键盘都用USB来代替,ps/2的接口已经非常非常少见了。
既然,USB插得有可能是移动储存设备,也有可能是类似键盘鼠标的输入设备,那么计算机是如何分辨的呢?
答案就是HID协议中的定义的HID设备标识符。
就我们人类而言,键盘之所以是键盘,是因为能打字,
鼠标之所以能是鼠标,是因为能控制光标的移动
U盘之所以是U盘,是因为他能长得像U盘,能传入传输文件。
但是计算机不是人,他只认识0和1,DeviceClass Definition for Human InterfaceDevices是一个公开的国际标准,用于规定HID设备的类型。当任何一个HID设备在接入电脑时,操作系统就首先会读取其设备标识符。
你如果具备U盘的标识,那我就给你挂载一个盘符。
你如果具备键盘的标识符,我就接受你给我输入的信息。
原则上HID是一出厂,就被设定好了的,出厂了就不能再更改了。
老生常谈的一句话“互联网本身是安全的,自从有了安全的人,互联网就变得不安全了。”
但是HID规范和协议是公开,通过自定义HID标识,让计算机模拟了键盘的输入。
则达到了我们所说的HID攻击。
0X03 发动HID攻击需要什么
按理说这种物理攻击,应该是玩物联网的兄弟们鼓捣的东西,那么就自然少不了单片机等硬件的支持。
如黑客想发动一次HID攻击的话,有很多种硬件的选择,
以下笔者只是简单的举三个例子
3.1 digispark单片机
自带8k的闪存,除去(bootloader占用2K,用户可编程部分6K)
3.2CJMCU-Beetle
均价32RMB左右,32KB闪存(4kbbootloader 占用)
3.3 商业版定制BadUSB---小黄鸭
价格不菲,40美刀是我等穷逼消费不起的。按照汇率野爹小几百块钱呢。
可以插入一个12MB的SD卡(相对于淘宝9.9的内个,就储存部分就扩展了几百倍了。)长得也更像U盘啊。
对比图
0X04.如何对单片机写简单的模拟键盘程序
提醒一下各位,所有的单片机都是可以跨平台攻击的,前提是,你准备的payload是这个平台的payload的不同平台的命令指示符的指令是不一样的。你如果去攻击win的程序去插入了linux的服务器上,那也毫无意义。
首先去官网下载编译器
https://www.arduino.cc/en/Main/Software
打开编译器:
初始化界面:
初始化代码部分
voidsetup(){
//put your setup code here, to run once:
}
voidloop(){
//put your main code here, to run repeatedly:
}
Arduino提供了以下键盘函数
#include //包含键盘模块的头文件
Keyboard.begin(); //开启键盘通信
Keyboard.press(); //按下某个键
Keyboard.release();//释放某个键
Keyboard.println();/*输入某些内容和一些网上的解释不同 网上解释是输入内容并且能回车,而我测试的时候并不能回车可能和版本有关 不要不要担心有办法回车*/
Keyboard.end(); //结束键盘通信
以下是单片机模拟打开win+R echo helloworld
(更高阶的操作,本文不再探究,互联网资源丰富还请小伙伴利用自己的搜索引擎去探索吧~)
写完代码之后,进行编译
然后上传(如果代码写的没有问题的话)
。
注意:digispark与其他arduino不太一样。以前DigisparkArduino在SourceForge上提供了专用版的ArduinoIDE,但是很久没有更新,而且支持的板子较少,不方便。
下面会介绍
如果你是DigisparArduino板子,就需要设置一下了。
然后运行Arduino,打开File菜单下的Preferences,在AdditionalBoards manager中输入下面网址:
1. http://digistump.com/package_digistump_index.json
去工具里面的打开开发板管理器,安装一下等5分钟。
最后你选择工具开发板digispark(default)
写完程序后。
你就可以去你身边小伙伴的电脑上插插插了~
0X05 一种新型的BadUSB(wifi版)
近两年的badusb社区又有geek鼓捣出新玩意,比如说这样的:
将wifi模块焊上去
增加了wifi模块的badusb,可以通过wifi连接的形式,将代码烧进内存。
在实际的攻击场景则更容易按照需求对代码进行测试,也为攻击方式增加更多的可能性。
所需要的设备
ESP8266 Wi-Fi芯片我推荐使用ESP-12。它使用广泛,价格便宜,体积小巧,拥有4MB的闪存。但是,如果你是初学者,你应该从NodeMCU或者Wemos d1 mini等开发者板开始。
ATmega32u4Arduino Micro和Arduino Leonardo使用ATmega32u4作为例子。您也可以购买Arduino Pro Micro或其他使用ATmega32u4的廉价Arduino克隆。我将使用ATmega32u4 CJMCU甲虫。
(一个3.3V稳压器)我把它放在括号内,因为如果你的ATMega32u4板不提供3.3V,你只需要这个。ESP8266仅适用于3.3V,因此根据您的电路板,您可能需要一个稳压器,以便从5V获得3.3V电压。
参考接线图:
引脚连接图:
具体步骤可以参考github地址:https://github.com/spacehuhn/wifi_ducky
打开 NodeMCUFlasher 写入软件
刷入bin固件https://github.com/spacehuhn/wifi_ducky/releases
中文版固件:
http://files.cnblogs.com/files/k1two2/esp8266_wifi_duck_4mb_zh.zip
将的Wi-FiDucky插入并连接到新的Wi-Fi
默认网络WiFiDuck。
密码是quackquack。
输入http://192.168.4.1进入管理地址
效果图
(发挥你的想象力,就可以让板子变得更强大)。
0X06 最危险的U盘—USBkiller
USBkill用于测试USB端口防止电源浪涌攻击。最新发布的USBKill 3.0可以测试,设备是否有抵御这种攻击的能力。
(当然了,抵御不了这种攻击的设备,基本都会冒烟什么的)
根据其最早开发团队做的统计,约95%的设备,根据其发布在YouTube的视频,包括三星GalaxyS9+在内的手机也均无法抵御USB的攻击。
那么他的攻击方式到底是什么呢?
虽然外观U盘长得差不多,但是其内部并不是真正的U盘结构,而换成了电容。它从其电容连接的元件的USB电源中收集功率,直到其达到高电压,然后再将高电压再反向放电到USB接口。
就好比,这东西就像个电荷储存器,来收集USB接口供给他的能量,等达到足够高压的时候,再反向输出给接口。
据他们团队所说,苹果是唯一一家,可以防御这种攻击方法的设备。
攻击效果图(三张gif)
0X07 思考
U盘作为人们常见的移动存储设备,简单,方便,便携的特别,使人们经常会拿U盘来拷贝资料等等。同时也吸引了一批对USB接口做手脚的人,HID安全同样也是信息安全中不可或缺的一部分分支。
如果黑客要对于目标单位进行定向投放。U盘上再写个什么“重要资料”“岛国优秀电影赏析”什么的。肯定会有好奇的人拿过来插一插,学习学习的吧。
正是可以利用人们的猎奇心理,黑客们也就达到了目的。
0X08 声明
本文介绍的关于HID攻击的几种方法,只是用于学习信息安全所使用,涉及到的攻击行为只是希望让大家提高安全意识。若读者因此做出危害信息安全的行为后果自负,与合天智汇以及原作者无关,特此声明
看不过瘾?合天2017年度干货精华请点击《【精华】2017年度合天网安干货集锦》
别忘了投稿哦!
合天公众号开启原创投稿啦!!!
大家有好的技术原创文章。
欢迎投稿至邮箱:edu@heetian.com
合天会根据文章的时效、新颖、文笔、实用等多方面评判给予100元-500元不等的稿费哟。
有才能的你快来投稿吧!
点击了解投稿详情 重金悬赏 | 合天原创投稿等你来!