MyException - 我的异常网
当前位置:我的异常网» 开源软件 » 利用WHID替隔离主机建立隐秘通道

利用WHID替隔离主机建立隐秘通道

www.MyException.Cn  网友分享于:2013-09-19  浏览:0次
利用WHID为隔离主机建立隐秘通道

0 引言

从2014年BADUSB出现以后,USB-HID攻击就这一直被关注,且具争议。争议的焦点是USB-HID的实战效果过于“鸡肋”,无论从早期的BADUSB,还是到后来的各种USB-HID设备,对于目标机来说,都要通过弹出“运行框”来实现payload的植入,由于弹框过于明显,所以实战中效果就大打折扣。于是,围绕着如何提升实战效果,很多人提出了不同的想法,我也做过多次尝试,比如通过改善payload的存储位置,通过加入BLE模块等方法,目的只有两个,一是尽可能减少payload植入过程中的code字符数,二是控制payload的植入时间。再到后来,我也开始尝试引入wifi模块,通过wifi进行控制,如2017年5月,我在freebuf上发表了《利用micropython快速实现Badusb及手机摇控扩展》,当时第一次通过wifi来控制usb-hid,实现与演示了远程关机的操作

WIFI与HID相结合国外有个更专业的名字就是WHID。WHID在当前的众多文章和应用中,多是把它作为一个控制模块,通过伪装,控制HID攻击的效果,更多呈现的是手机或者其它wifi下设备如何利用WHID对目标机进行攻击控制。但实际上,WHID完全可以在目标机上形成一个自定义的通道实现目标机与手机或者wifi下其它攻击设备的通讯,相当于给目标机安装了一个自定义网卡。这一方法,对于隔离主机的信息获取具有一定的应用效果。

1 WHID及其构成

一个传统的USB-HID设备,常常是用来虚拟或者仿真键盘、鼠标等usb外设来完成恶意代码的植入。最常见的就是通过仿真键盘来完成,主要流程是当USB-HID设备插入PC后,会仿真出一个虚拟键盘,然后通过输入win+R,调出系统的运行框,在运行框内输入code。这里常用的方法是,输入cmd等命令,调出最小布局的cmd(也可以改变颜色,目的就是让这个cmd不易察觉),再通过上下键把cmd拖出窗外,让被攻击者无法看到。这时,开始在cmd里输入code。如遍历磁盘,找到payload的存储位置,植入payload。

在植入的这个过程中,又会面临权限、免杀、过UAC等工作,如果你有足够的时间,都可以通过这个仿真键盘事前写好代码或者批处理命令,逐个解决。从这一点看,USB-HID还是很实用的,但是实际上,在插入后需要输入的code量过大,这期间如果被攻击机器的键盘操作过,或者鼠标动过,就会影响到仿真键盘的工作,从而使实现效果不尽人意。于是,有人通过在目标机器上启动Empire或Meterpreter会话,将输入的2670个字符压缩到116个字符,输入时间从38秒压缩到3秒。还有人通过修改padload存储位置,如存储在A盘,可以将输入的字符压缩到8个(如a:\m.exe),输入时间压缩到不足1秒,但这些方法都无法控制弹出运行框的时间,WHID可以说是解决了这个问题。

WHID就是在USB-HID上加入了wifi模块。你可以把wifi配置成AP,也可以配置成STA,然后利用你的PC或者手机来控制USB-HID的动作及动作时间。例如,我在《利用micropython快速实现Badusb及手机摇控扩展》一文中写到的,通过手机遥控关机。

那么WHID由哪几部分构成呢?

第一,易于使用的USB-HID攻击模块,我们常见的就是teensy、arduino等。这里我选用的是支持micropython的模块Tpyboard V102,其采用python来进行硬件控制,代码写起来比较简单、方便,而且这个模块有6个串口,足够我们进行扩展与使用。其缺点也很明显,体积略大,不易伪装,不像arduino nano、arduino pro、teensy、arduino lenorado那样可以很容易的伪装为U盘。对我来说,我觉得这不是大的缺点,因为TPYBoard也属开源硬件,原理图都是开放的,完全可以自己再画成适合伪装的形态。

第二,合适的WIFI模块。我最初在尝试时,使用的是MT7681模块,具体可见《利用micropython快速实现Badusb及手机摇控扩展》一文。后来,在学习micropython的过程中,发现利用TPYBoard v202(ESP8266芯片)更加方便,可以直接形成一个AP,并建立一个WEB服务器。于是,选定用这个模块来完成。

第三,WIFI与USB-HID的连接。连接的接口也有很多种,可以通过I2C、SPI等接口。这里我选用的是串口,只需要将TPYBoardV102与TPYBoardV202两个板子上的TX、RX相互交叉接线就可以了,操作非常简单。

WHID示意图如下:

利用micropython完成WHID的简易拼装:

2 WHID通道搭建原理

对于一个WHID来说,由于其带有的WIFI模块,构建了一个无线网络,所以我们完全可以考虑利用这个WIFI网络实现与PC之间的隐蔽通讯,从而建立一套自定义的无线网卡。如果说,对于互联网主机,USB-HID可以实现payload的植入,利用payload反弹一个shell的话,那么对于隔离主机,WHID一样可以反弹一个shell给攻击者,实现对隔离主机的攻击。从原理来说,就是WHID通过HID在隔离主机内植入一个payload,也可以认为是WHID自定义网卡的驱动,然后隔离主机会通过串口等接口与WHID进行交互,WHID再将交互内容通过WIFI模块传递给远端的控制者。

第一,实现USB-HID设备与隔离主机的通讯。其实,USB-HID负责与PC进行通讯的就是一个单片机,其与PC的通讯方式有很多种,最为常见的就是串口通讯,往往在单片机与pc之间会有一个TTL转USB的芯片,如CH340等。一般串口通讯的最大速度为115200bps,约相当于每秒14KB。如果在通讯中觉得这个速度过于有限,那也可以尝试使用SPI转USB,这样速度可以达到每秒10MB以上。TPYBoard v102开发板自带了TTL转USB模块,所以本文中的研究过程全部采用串口通讯。

第二,实现USB-HID与WIFI模块之前的通讯,由于TPYBoard v102本身带有SD卡存储,可以作为缓存存放,这样在速度上要求不是很高,所以TPYBoard v102与TPYBoard v202(ESP8266)之间完全可以采用串口通讯,连接简单,操控方便。

第三,实现WIFI模块与控制终端之间的通讯,这一点对于WIFI来说一定是通过无线网络。本研究中,利用TPYBoard v202建立了一个AP及web服务器,提供WEB网页服务做为控制平台。

于是,WHID与隔离主机之间的通道传输如下图所识:

3 利用隔离主机WHID通道读取文件

为了说明如何利用WHID从隔离主机中获取信息,这里我们以获取文件为例进行讲解。命题为获取D盘根目录下test.txt的内容。具体步骤为:

(1)准备一套可供使用的Payload代码。根据命题,payload需要解决两个问题,一是类似上位机,获取WHID所在串口,并通过握手包来确认其工作正常;二是读取D盘下的test.txt文件内容,并通过串口向WHID进行传送。

(2)利用WHID完成payload植入。植入是打通通道的最关键一步,第一步中准备的payload相当于给WHID安装了驱动,从而保障PC与WHID的通讯畅通。这里的植入过程,依然还是依赖于HID。常见的使用方法为将Payload存在特定存储位置,HID仿真键盘运行payload。

(3)payload运行后,查找WHID所在的串口,与WHID进行握手,确认通讯正常,然后读取D盘根目录下的test.txt文件,将内容通过串口传送给WHID设备。

(4)WHID实现一个AP,并建立一个WEB服务器,将获取到的串口数据在自身实现的web上进行呈现。此时手机或者其它终端连接到这个AP上,通过Web就能查看结果。

实现的攻击效果为,通过手机连入WHID建立的无线网络,然后输入WHID预定的web地址,会呈现上图中的WEB控制页面,当点击“植入”后,电脑中会闪过“运行”框,从而完成payload植入,然后点击“查看”,就能获取到文件内容。如下图:

如果攻击者,把WHID与一个USB设备进行伪装,其攻击就很具有迷惑性。如与USB小音箱封装到一个盒子里,从外表看,就是一个略大点的USB音箱,但实际上已经可以进行WHID攻击了。当然攻击者也完成可以通过payload从隔离主机中反弹出一个shell,从而再进行进一步的渗透。

【效果视频】

http://v.youku.com/v_show/id_XMzAwMjA1MzgxMg==.html?spm=a2hzp.8244740.0.0

【部分代码】

仅包含硬件固件,未包含Payload。

http://pan.baidu.com/s/1qXVhfWg

【免责声明】

请不要在非合法情况下利用TPYboard实施攻击,这种行为将会被视作非法活动。由本软件所造成的任何不良后果,作者将不承担任何责任,请各位谨慎使用。

 

文章评论

不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
编程语言是女人
编程语言是女人
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员应该关注的一些事儿
程序员应该关注的一些事儿
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
 程序员的样子
程序员的样子
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
旅行,写作,编程
旅行,写作,编程
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员必看的十大电影
程序员必看的十大电影
那些争议最大的编程观点
那些争议最大的编程观点
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
鲜为人知的编程真相
鲜为人知的编程真相
10个调试和排错的小建议
10个调试和排错的小建议
总结2014中国互联网十大段子
总结2014中国互联网十大段子
我是如何打败拖延症的
我是如何打败拖延症的
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
程序员的鄙视链
程序员的鄙视链
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
一个程序员的时间管理
一个程序员的时间管理
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
我的丈夫是个程序员
我的丈夫是个程序员
每天工作4小时的程序员
每天工作4小时的程序员
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员都该阅读的书
程序员都该阅读的书
老程序员的下场
老程序员的下场
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
代码女神横空出世
代码女神横空出世
Java程序员必看电影
Java程序员必看电影
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
如何成为一名黑客
如何成为一名黑客
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
为什么程序员都是夜猫子
为什么程序员都是夜猫子
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有