本文作者:xiaowuyi,来自FreeBuf.COM(MicroPythonQQ交流群:157816561,公众号:MicroPython玩家汇)

  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下其它攻击设备的通讯,相当于给目标机安装了一个自定义网卡。这一方法,对于隔离主机的信息获取具有一定的应用效果。

  1WHID及其构成

  一个传统的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的模块TpyboardV102,其采用python来进行硬件控制,代码写起来比较简单、方便,而且这个模块有6个串口,足够我们进行扩展与使用。其缺点也很明显,体积略大,不易伪装,不像arduinonano、arduinopro、teensy、arduinolenorado那样可以很容易的伪装为U盘。对我来说,我觉得这不是大的缺点,因为TPYBoard也属开源硬件,原理图都是开放的,完全可以自己再画成适合伪装的形态。

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

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

  WHID示意图如下:

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

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

  2WHID通道搭建原理

  对于一个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以上。TPYBoardv102开发板自带了TTL转USB模块,所以本文中的研究过程全部采用串口通讯。

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

  第三,实现WIFI模块与控制终端之间的通讯,这一点对于WIFI来说一定是通过无线网络。本研究中,利用TPYBoardv202建立了一个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,从而再进行进一步的渗透。

  【效果视频】

  【部分代码】

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

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

  【免责声明】

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

  

TPYBoard实例之利用WHID为隔离主机建立隐秘通道的更多相关文章

  1. 利用WHID为隔离主机建立隐秘通道

    0 引言 从2014年BADUSB出现以后,USB-HID攻击就这一直被关注,且具争议.争议的焦点是USB-HID的实战效果过于“鸡肋”,无论从早期的BADUSB,还是到后来的各种USB-HID设备, ...

  2. 利用Ossim系统进行主机漏洞扫描

    利用Ossim系统进行主机漏洞扫描 企业中查找漏洞要付出很大的努力,不能简单的在服务器上安装一个漏洞扫描软件那么简单,那样起不了多大作用.这并不是因为企业中拥有大量服务器和主机设备,这些服务器和设备又 ...

  3. windows环境利用apache 配置虚拟主机

    windows环境利用apache 配置虚拟主机 1.改动http.host #LoadModule vhost_alias_module modules/mod_vhost_alias.so #In ...

  4. Docker容器利用weave实现跨主机互联

    Docker容器利用weave实现跨主机互联 环境: 实现目的:实现主机A中容器1与主机B中容器1的网络互联 主机A步骤: ①下载复制weave二进制执行文件(需要internet)[root@192 ...

  5. 基于Wi-Fi的HID注射器,利用WHID攻击实验

    WHID代表基于 Wi-Fi 的 HID 注射器,即对 HID 攻击进行无线化攻击的一种注入工具. 实验攻击原理如下图: 攻击者使用ESP8266作为AP,在自己的电脑创建客户端连接AP.在客户端键入 ...

  6. 如何利用webmin在Linux主机中添加网站

    Linux系统因其高效稳定而受到广大用户的推崇与青睐,然后其管理的复杂性也使很多用户望而却步,动弹不得.为了降低 Linux系统的管理难度,更有效方便的使用该系统,我司所有Linux主机或VPS系统均 ...

  7. 在Apache中利用ServerAlias设置虚拟主机接收多个域名和设置域名泛解析

    ServerAlias:服务器别名,在Apache中可以用于设置虚拟主机接收到个域名,也可以用于接收泛解析的域名.具体的设置方法如下: 一.用于设置虚拟主机接收多个域名 一个虚拟主机常常会接收多个域名 ...

  8. Nagios利用NSClient++监控Windows主机

    在Nagios的libexec下有check_nt这个插件,它就是用来检查windows机器的服务的.其功能类似于check_nrpe.不过还需要搭配另外一个软件NSClient++,它则类似于NRP ...

  9. 爬虫入门实例:利用requests库爬取笔趣小说网

    w3cschool上的来练练手,爬取笔趣看小说http://www.biqukan.com/, 爬取<凡人修仙传仙界篇>的所有章节 1.利用requests访问目标网址,使用了get方法 ...

随机推荐

  1. extjs 关于dom操作的几个库

    经过几天的学习研究,发现ext与jquery的设计思路完全是来自两个方向. jquery是内聚,把所有东西都放在$的下面,而ext是采用分模块的设计思路,每个功能封装一个库.这样就形成了各自的实用风格 ...

  2. IntelliJ IDEA(四) :Settings【Appearance and Behavior】

    前言 IDEA是一个智能开发工具,每个开发者的使用习惯不同,如何个性化自己的IDEA?我们可以通过Settings功能来设置.Settings文件是IDEA的配置文件,通过他可以设置主题,项目,插件, ...

  3. C#中级-从零打造基于Socket在线升级模块

    一.前言       前段时间一直在折腾基于Socket的产品在线升级模块.之前我曾写过基于.Net Remoting的.基于WCF的在线升级功能,由于并发量较小及当时代码经验的不足一直没有实际应用. ...

  4. TRIZ系列-创新原理-26-复制原理

    复制原理的详细表述例如以下:1)用简化的,廉价的复制品来替代易碎的或不方便操作的物体;    这样能够减少成本,提高可操作性.2)假设已经使用了可见光的复制品,那么使用红外光或者紫外光的复制品:    ...

  5. DirectX:在graph自己主动连线中增加自己定义filter(graph中遍历filter)

    为客户提供的视频播放的filter的測试程序中,採用正向手动连接的方式(http://blog.csdn.net/mao0514/article/details/40535791).因为不同的视频压缩 ...

  6. immutable日常操作之深入API

    写在前面 本文只是个人在熟悉Immutable.js的一些个人笔记,因此我只根据我自己的情况来熟悉API,所以很多API并没有被列举到,比如常规的push/map/filter/reduce等等操作, ...

  7. objective-c 开发最简单的UITableView时数据进不去的问题

    今天在使用UITableView时遇到的问题,我在plist文件配置的数据进不去列表,以下是解决方案 问题原因:plist文件root的type配置错误 如上图所示,博主是使用plist文件作为我的沙 ...

  8. APP之构架自己的webapi框架

    当我们学习到一定程度的时候,我们会想要去深入了解代码底层的东西,也更想拥有一个属于自己的框架.本文可能成为编写一个webapi框架的开端.有研究MVC框架的朋友会发现,mvc框架的路由MvcRoute ...

  9. sqlserver 存储过程 增加

    CREATE PROCEDURE [dbo].[InsertMessage]( @strTable varchar(), --表名 @strValues nvarchar(), --要插入的数据(用英 ...

  10. 【USACO】玉米实验(单调队列)

    Description 约翰决定培育新的玉米品种以提高奶牛的产奶效率.约翰所有的土地被分成 N ×N 块,其中第 r行第 c 列的玉米质量为 Ar,c.他打算找一块质量比较均匀的土地开始自己的实验.经 ...